diff --git a/mkrtos_user/lib/sys_svr/inc/rpc_prot.h b/mkrtos_user/lib/sys_svr/inc/rpc_prot.h index e8e3e7fe1..7018a1a35 100644 --- a/mkrtos_user/lib/sys_svr/inc/rpc_prot.h +++ b/mkrtos_user/lib/sys_svr/inc/rpc_prot.h @@ -31,3 +31,5 @@ #define DRV_WRITE ((uint16_t)2) //!< 写入设备 #define DRV_CLOSE ((uint16_t)3) //!< 关闭设备 #define DRV_IOCTL ((uint16_t)4) //!< 控制设备 + +#define META_PROT 0x0004 diff --git a/mkrtos_user/lib/sys_svr/src/drv_cli.c b/mkrtos_user/lib/sys_svr/src/drv_cli.c index 5d9d4cad1..824944a77 100644 --- a/mkrtos_user/lib/sys_svr/src/drv_cli.c +++ b/mkrtos_user/lib/sys_svr/src/drv_cli.c @@ -10,20 +10,20 @@ #include #include -RPC_GENERATION_CALL2(drv_t, DRV_OPEN, open, +RPC_GENERATION_CALL2(drv_t, FS_PROT, DRV_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, name, rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, oflags) -RPC_GENERATION_CALL1(drv_t, DRV_CLOSE, close, +RPC_GENERATION_CALL1(drv_t, FS_PROT, DRV_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc) -RPC_GENERATION_CALL3(drv_t, DRV_READ, read, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) -RPC_GENERATION_CALL3(drv_t, DRV_WRITE, write, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) -RPC_GENERATION_CALL3(drv_t, DRV_IOCTL, ioctl, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_IOCTL, ioctl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) diff --git a/mkrtos_user/lib/sys_svr/src/drv_svr.c b/mkrtos_user/lib/sys_svr/src/drv_svr.c index 2bbaa751a..bdbfffdfe 100644 --- a/mkrtos_user/lib/sys_svr/src/drv_svr.c +++ b/mkrtos_user/lib/sys_svr/src/drv_svr.c @@ -7,7 +7,7 @@ #include /*int mr_dev_open(const char *name, uint32_t oflags);*/ -RPC_GENERATION_OP2(drv_t, DRV_OPEN, open, +RPC_GENERATION_OP2(drv_t, FS_PROT, DRV_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, name, rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, oflags) { @@ -15,21 +15,21 @@ RPC_GENERATION_OP2(drv_t, DRV_OPEN, open, return dev_open(name->data, oflags->data); } -RPC_GENERATION_DISPATCH2(drv_t, DRV_OPEN, open, +RPC_GENERATION_DISPATCH2(drv_t, FS_PROT, DRV_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, name, rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, oflags) /*int mr_dev_close(int desc);*/ -RPC_GENERATION_OP1(drv_t, DRV_CLOSE, close, +RPC_GENERATION_OP1(drv_t, FS_PROT, DRV_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc) { return dev_close(desc->data); } -RPC_GENERATION_DISPATCH1(drv_t, DRV_CLOSE, close, +RPC_GENERATION_DISPATCH1(drv_t, FS_PROT, DRV_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc) /*ssize_t mr_dev_read(int desc, void *buf, size_t size);*/ -RPC_GENERATION_OP3(drv_t, DRV_READ, read, +RPC_GENERATION_OP3(drv_t, FS_PROT, DRV_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) @@ -37,13 +37,13 @@ RPC_GENERATION_OP3(drv_t, DRV_READ, read, return dev_read(desc->data, data->data, size->data); } -RPC_GENERATION_DISPATCH3(drv_t, DRV_READ, read, +RPC_GENERATION_DISPATCH3(drv_t, FS_PROT, DRV_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) /*ssize_t mr_dev_write(int desc, const void *buf, size_t size);*/ -RPC_GENERATION_OP3(drv_t, DRV_WRITE, write, +RPC_GENERATION_OP3(drv_t, FS_PROT, DRV_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) @@ -51,13 +51,13 @@ RPC_GENERATION_OP3(drv_t, DRV_WRITE, write, return dev_write(desc->data, data->data, size->data); } -RPC_GENERATION_DISPATCH3(drv_t, DRV_WRITE, write, +RPC_GENERATION_DISPATCH3(drv_t, FS_PROT, DRV_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) /*int mr_dev_ioctl(int desc, int cmd, void *args);*/ -RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl, +RPC_GENERATION_OP3(drv_t, FS_PROT, DRV_IOCTL, ioctl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) @@ -65,13 +65,13 @@ RPC_GENERATION_OP3(drv_t, DRV_IOCTL, ioctl, return dev_ioctl(desc->data, (int)(data->data), (void *)(size->data)); } -RPC_GENERATION_DISPATCH3(drv_t, DRV_IOCTL, ioctl, +RPC_GENERATION_DISPATCH3(drv_t, FS_PROT, DRV_IOCTL, ioctl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) /*dispatch*/ -RPC_DISPATCH5(drv_t, typeof(DRV_OPEN), DRV_OPEN, open, DRV_CLOSE, close, DRV_READ, read, DRV_WRITE, write, DRV_IOCTL, ioctl) +RPC_DISPATCH5(drv_t, FS_PROT, typeof(DRV_OPEN), DRV_OPEN, open, DRV_CLOSE, close, DRV_READ, read, DRV_WRITE, write, DRV_IOCTL, ioctl) void drv_init(drv_t *drv) { diff --git a/mkrtos_user/lib/sys_svr/src/fs_cli.c b/mkrtos_user/lib/sys_svr/src/fs_cli.c index 853bb4ded..d0e6c3994 100644 --- a/mkrtos_user/lib/sys_svr/src/fs_cli.c +++ b/mkrtos_user/lib/sys_svr/src/fs_cli.c @@ -10,23 +10,23 @@ #include #include -RPC_GENERATION_CALL3(fs_t, FS_OPEN, open, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode) -RPC_GENERATION_CALL3(fs_t, FS_READ, read, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) -RPC_GENERATION_CALL3(fs_t, FS_WRITE, write, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) -RPC_GENERATION_CALL1(fs_t, FS_CLOSE, close, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) -RPC_GENERATION_CALL3(fs_t, FS_LSEEK, lseek, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_LSEEK, lseek, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence) diff --git a/mkrtos_user/lib/sys_svr/src/fs_svr.c b/mkrtos_user/lib/sys_svr/src/fs_svr.c index ed30835b0..2bb0f6df5 100644 --- a/mkrtos_user/lib/sys_svr/src/fs_svr.c +++ b/mkrtos_user/lib/sys_svr/src/fs_svr.c @@ -6,7 +6,7 @@ #include /*open*/ -RPC_GENERATION_OP3(fs_t, FS_OPEN, open, +RPC_GENERATION_OP3(fs_t, FS_PROT, FS_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode) @@ -16,12 +16,12 @@ RPC_GENERATION_OP3(fs_t, FS_OPEN, open, return ret; } -RPC_GENERATION_DISPATCH3(fs_t, FS_OPEN, open, +RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode) /*read*/ -RPC_GENERATION_OP3(fs_t, FS_READ, read, +RPC_GENERATION_OP3(fs_t, FS_PROT, FS_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) @@ -35,13 +35,13 @@ RPC_GENERATION_OP3(fs_t, FS_READ, read, return ret; } -RPC_GENERATION_DISPATCH3(fs_t, FS_READ, read, +RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) /*write*/ -RPC_GENERATION_OP3(fs_t, FS_WRITE, write, +RPC_GENERATION_OP3(fs_t, FS_PROT, FS_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) @@ -50,24 +50,24 @@ RPC_GENERATION_OP3(fs_t, FS_WRITE, write, return ret; } -RPC_GENERATION_DISPATCH3(fs_t, FS_WRITE, write, +RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) /*close*/ -RPC_GENERATION_OP1(fs_t, FS_CLOSE, close, +RPC_GENERATION_OP1(fs_t, FS_PROT, FS_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) { fs_svr_close(fd->data); return 0; } -RPC_GENERATION_DISPATCH1(fs_t, FS_CLOSE, close, +RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) /*lseek*/ -RPC_GENERATION_OP3(fs_t, FS_LSEEK, lseek, +RPC_GENERATION_OP3(fs_t, FS_PROT, FS_LSEEK, lseek, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence) @@ -76,13 +76,13 @@ RPC_GENERATION_OP3(fs_t, FS_LSEEK, lseek, return ret; } -RPC_GENERATION_DISPATCH3(fs_t, FS_LSEEK, lseek, +RPC_GENERATION_DISPATCH3(fs_t, FS_PROT, FS_LSEEK, lseek, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence) /*ftruncate*/ -RPC_GENERATION_OP2(fs_t, FS_FTRUNCATE, ftruncate, +RPC_GENERATION_OP2(fs_t, FS_PROT, FS_FTRUNCATE, ftruncate, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs) { @@ -90,54 +90,54 @@ RPC_GENERATION_OP2(fs_t, FS_FTRUNCATE, ftruncate, return ret; } -RPC_GENERATION_DISPATCH2(fs_t, FS_FTRUNCATE, ftruncate, +RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_FTRUNCATE, ftruncate, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs) /*fsync*/ -RPC_GENERATION_OP1(fs_t, FS_SYNC, fsync, +RPC_GENERATION_OP1(fs_t, FS_PROT, FS_SYNC, fsync, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) { fs_svr_sync(fd->data); return 0; } -RPC_GENERATION_DISPATCH1(fs_t, FS_SYNC, fsync, +RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_SYNC, fsync, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) /*readdir*/ -RPC_GENERATION_OP2(fs_t, FS_READDIR, readdir, +RPC_GENERATION_OP2(fs_t, FS_PROT, FS_READDIR, readdir, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_dirent_t_t, rpc_dirent_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, dir) { return fs_svr_readdir(fd->data, &dir->data); } -RPC_GENERATION_DISPATCH2(fs_t, FS_READDIR, readdir, +RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_READDIR, readdir, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_dirent_t_t, rpc_dirent_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, dir) /*mkdir*/ -RPC_GENERATION_OP1(fs_t, FS_MKDIR, mkdir, +RPC_GENERATION_OP1(fs_t, FS_PROT, FS_MKDIR, mkdir, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path) { path->data[path->len - 1] = 0; return fs_svr_mkdir(path->data); } -RPC_GENERATION_DISPATCH1(fs_t, FS_MKDIR, mkdir, +RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_MKDIR, mkdir, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path) /*unlink*/ -RPC_GENERATION_OP1(fs_t, FS_UNLINK, unlink, +RPC_GENERATION_OP1(fs_t, FS_PROT, FS_UNLINK, unlink, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path) { path->data[path->len - 1] = 0; return fs_svr_unlink(path->data); } -RPC_GENERATION_DISPATCH1(fs_t, FS_UNLINK, unlink, +RPC_GENERATION_DISPATCH1(fs_t, FS_PROT, FS_UNLINK, unlink, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path) /*rename*/ -RPC_GENERATION_OP2(fs_t, FS_RENAME, rename, +RPC_GENERATION_OP2(fs_t, FS_PROT, FS_RENAME, rename, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, oldpath, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, newpath) { @@ -146,26 +146,26 @@ RPC_GENERATION_OP2(fs_t, FS_RENAME, rename, return fs_svr_renmae((char *)(oldpath->data), (char *)(newpath->data)); } -RPC_GENERATION_DISPATCH2(fs_t, FS_RENAME, rename, +RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_RENAME, rename, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, oldpath, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, newpath) /*fstat*/ -RPC_GENERATION_OP2(fs_t, FS_STAT, fstat, +RPC_GENERATION_OP2(fs_t, FS_PROT, FS_STAT, fstat, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_stat_t_t, rpc_stat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, stat) { return fs_svr_fstat(fd->data, &stat->data); } -RPC_GENERATION_DISPATCH2(fs_t, FS_STAT, fstat, +RPC_GENERATION_DISPATCH2(fs_t, FS_PROT, FS_STAT, fstat, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_stat_t_t, rpc_stat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, stat) /*dispatch*/ -RPC_DISPATCH12(fs_t, typeof(FS_OPEN), FS_OPEN, open, FS_READ, read, - FS_WRITE, write, FS_CLOSE, close, FS_LSEEK, lseek, FS_FTRUNCATE, ftruncate, - FS_SYNC, fsync, FS_READDIR, readdir, FS_MKDIR, mkdir, FS_UNLINK, unlink, FS_RENAME, rename, FS_STAT, fstat) +RPC_DISPATCH12(fs_t, FS_PROT, typeof(FS_OPEN), FS_OPEN, open, FS_READ, read, + FS_WRITE, write, FS_CLOSE, close, FS_LSEEK, lseek, FS_FTRUNCATE, ftruncate, + FS_SYNC, fsync, FS_READDIR, readdir, FS_MKDIR, mkdir, FS_UNLINK, unlink, FS_RENAME, rename, FS_STAT, fstat) void fs_init(fs_t *fs) { diff --git a/mkrtos_user/lib/sys_svr/src/ns_cli.c b/mkrtos_user/lib/sys_svr/src/ns_cli.c index 3b40d0406..86d86850f 100644 --- a/mkrtos_user/lib/sys_svr/src/ns_cli.c +++ b/mkrtos_user/lib/sys_svr/src/ns_cli.c @@ -68,120 +68,11 @@ static bool_t reg_hd(const char *path, obj_handler_t hd, int split_inx) return FALSE; } -// RPC_GENERATION_CALL2(ns_t, NS_REGISTER_OP, register, -// rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, -// rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd) -msg_tag_t ns_t_register_call(obj_handler_t hd, rpc_ref_array_uint32_t_uint8_t_32_t *var0, rpc_obj_handler_t_t *var1) -{ - void *buf; - ipc_msg_t *msg_ipc; - thread_msg_buf_get(2, (umword_t *)(&buf), ((void *)0)); - msg_ipc = (ipc_msg_t *)buf; - int off = 0; - int off_buf = 0; - int ret = -1; - size_t op_val = ((uint16_t)0); - rpc_memcpy(msg_ipc->msg_buf, &op_val, sizeof(op_val)); - off += rpc_align(sizeof(op_val), __alignof(((uint16_t)0))); - do - { - if (1 == 1) - { - if (1 == 1 || 1 == 4) - { - int ret = rpc_cli_msg_to_buf_rpc_ref_array_uint32_t_uint8_t_32_t(var0, (uint8_t *)((uint8_t *)msg_ipc->msg_buf), off); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off = ret; - } - } - } while (0); - do - { - if (1 == 2) - { - if (1 == 1 || 1 == 4) - { - int ret = rpc_cli_msg_to_buf_rpc_ref_array_uint32_t_uint8_t_32_t(var0, (uint8_t *)((uint8_t *)msg_ipc->map_buf), off_buf); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off_buf = ret; - } - } - } while (0); - do - { - if (2 == 1) - { - if (1 == 1 || 1 == 4) - { - int ret = rpc_cli_msg_to_buf_rpc_obj_handler_t_t(var1, (uint8_t *)((uint8_t *)msg_ipc->msg_buf), off); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off = ret; - } - } - } while (0); - do - { - if (2 == 2) - { - if (1 == 1 || 1 == 4) - { - int ret = rpc_cli_msg_to_buf_rpc_obj_handler_t_t(var1, (uint8_t *)((uint8_t *)msg_ipc->map_buf), off_buf); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off_buf = ret; - } - } - } while (0); - msg_tag_t tag = thread_ipc_call(((msg_tag_t){.flags = (0), .msg_buf_len = ((((off) / ((sizeof(void *)))) + (((off) % ((sizeof(void *)))) ? 1 : 0))), .map_buf_len = ((((off_buf) / ((sizeof(void *)))) + (((off_buf) % ((sizeof(void *)))) ? 1 : 0))), .prot = (0)}), hd, ipc_timeout_create2(0, 0)); - if (((int16_t)((tag).prot)) < 0) - { - return tag; - } - off = 0; - do - { - if (1 == 1) - { - if (1 == 2 || 1 == 4) - { - int ret = rpc_cli_buf_to_msg_rpc_ref_array_uint32_t_uint8_t_32_t(var0, (uint8_t *)((uint8_t *)msg_ipc->msg_buf), off, tag.msg_buf_len * (sizeof(void *))); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off = ret; - } - } - } while (0); - do - { - if (2 == 1) - { - if (1 == 2 || 1 == 4) - { - int ret = rpc_cli_buf_to_msg_rpc_obj_handler_t_t(var1, (uint8_t *)((uint8_t *)msg_ipc->msg_buf), off, tag.msg_buf_len * (sizeof(void *))); - if (ret < 0) - { - return ((msg_tag_t){.flags = (0), .msg_buf_len = (0), .map_buf_len = (0), .prot = (ret)}); - } - off = ret; - } - } - } while (0); - return tag; -} -RPC_GENERATION_CALL2(ns_t, NS_QUERY_OP, query, +RPC_GENERATION_CALL2(ns_t, NS_PROT, NS_REGISTER_OP, register, + rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, + rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd) + +RPC_GENERATION_CALL2(ns_t, NS_PROT, NS_QUERY_OP, query, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) diff --git a/mkrtos_user/lib/sys_svr/src/ns_svr.c b/mkrtos_user/lib/sys_svr/src/ns_svr.c index 076187ecc..0be034149 100644 --- a/mkrtos_user/lib/sys_svr/src/ns_svr.c +++ b/mkrtos_user/lib/sys_svr/src/ns_svr.c @@ -7,7 +7,7 @@ #include "u_hd_man.h" #include -RPC_GENERATION_OP2(ns_t, NS_REGISTER_OP, register, +RPC_GENERATION_OP2(ns_t, NS_PROT, NS_REGISTER_OP, register, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd) { @@ -24,11 +24,11 @@ RPC_GENERATION_OP2(ns_t, NS_REGISTER_OP, register, } return ret; } -RPC_GENERATION_DISPATCH2(ns_t, NS_REGISTER_OP, register, +RPC_GENERATION_DISPATCH2(ns_t, NS_PROT, NS_REGISTER_OP, register, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd) -RPC_GENERATION_OP2(ns_t, NS_QUERY_OP, query, +RPC_GENERATION_OP2(ns_t, NS_PROT, NS_QUERY_OP, query, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) { @@ -46,10 +46,10 @@ RPC_GENERATION_OP2(ns_t, NS_QUERY_OP, query, return ret; } -RPC_GENERATION_DISPATCH2(ns_t, NS_QUERY_OP, query, +RPC_GENERATION_DISPATCH2(ns_t, NS_PROT, NS_QUERY_OP, query, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) -RPC_DISPATCH2(ns_t, typeof(NS_REGISTER_OP), NS_REGISTER_OP, register, NS_QUERY_OP, query) +RPC_DISPATCH2(ns_t, NS_PROT, typeof(NS_REGISTER_OP), NS_REGISTER_OP, register, NS_QUERY_OP, query) void ns_init(ns_t *ns) { diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc.h b/mkrtos_user/lib/sys_util/inc/u_rpc.h index bb7da90ba..51b378f73 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc.h @@ -182,7 +182,7 @@ RPC_TYPE_DEF_ALL(int) //!< 定义所有的 RPC_TYPE_DEF_ALL(uint32_t) //!< 定义所有的 RPC_TYPE_DEF_ALL(size_t) //!< 定义所有的 RPC_TYPE_DEF_ALL(umword_t) //!< 定义所有的 -RPC_TYPE_DEF_ALL(mword_t) //!< 定义所有的 +RPC_TYPE_DEF_ALL(mword_t) //!< 定义所有的 RPC_TYPE_DEF_ALL(dirent_t) //!< 目录类型 RPC_TYPE_DEF_ALL(stat_t) @@ -566,7 +566,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t) } \ } while (0) -#define RPC_DISPATCH1(struct_type, op_type, func0_op, func0_name) \ +#define RPC_DISPATCH1(struct_type, prot, op_type, func0_op, func0_name) \ msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ { \ msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ @@ -584,7 +584,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t) return tag; \ } -#define RPC_DISPATCH2(struct_type, op_type, func0_op, func0_name, func1_op, func1_name) \ +#define RPC_DISPATCH2(struct_type, prot, op_type, func0_op, func0_name, func1_op, func1_name) \ msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ { \ msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ @@ -607,68 +607,68 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t) return tag; \ } -#define RPC_DISPATCH3(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name) \ - msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ - { \ - msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ - size_t op_val; \ - \ - op_val = *((op_type *)(ipc_msg->msg_buf)); \ - switch (op_val) \ - { \ - case func0_op: \ - { \ - tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - case func1_op: \ - { \ - tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - case func2_op: \ - { \ - tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - } \ - return tag; \ +#define RPC_DISPATCH3(struct_type, prot, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name) \ + msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ + { \ + msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ + size_t op_val; \ + \ + op_val = *((op_type *)(ipc_msg->msg_buf)); \ + switch (op_val) \ + { \ + case func0_op: \ + { \ + tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + case func1_op: \ + { \ + tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + case func2_op: \ + { \ + tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + } \ + return tag; \ } -#define RPC_DISPATCH4(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name, func3_op, func3_name) \ - msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ - { \ - msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ - size_t op_val; \ - \ - op_val = *((op_type *)(ipc_msg->msg_buf)); \ - switch (op_val) \ - { \ - case func0_op: \ - { \ - tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - case func1_op: \ - { \ - tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - case func2_op: \ - { \ - tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - case func3_op: \ - { \ - tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ - } \ - break; \ - } \ - return tag; \ +#define RPC_DISPATCH4(struct_type, prot, op_type, func0_op, func0_name, func1_op, func1_name, func2_op, func2_name, func3_op, func3_name) \ + msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ + { \ + msg_tag_t tag = msg_tag_init4(0, 0, 0, -EPROTO); \ + size_t op_val; \ + \ + op_val = *((op_type *)(ipc_msg->msg_buf)); \ + switch (op_val) \ + { \ + case func0_op: \ + { \ + tag = struct_type##_##func0_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + case func1_op: \ + { \ + tag = struct_type##_##func1_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + case func2_op: \ + { \ + tag = struct_type##_##func2_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + case func3_op: \ + { \ + tag = struct_type##_##func3_name##_dispatch((struct_type *)obj, in_tag, ipc_msg); \ + } \ + break; \ + } \ + return tag; \ } -#define RPC_DISPATCH5(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \ +#define RPC_DISPATCH5(struct_type, prot, op_type, func0_op, func0_name, func1_op, func1_name, \ func2_op, func2_name, func3_op, func3_name, \ func4_op, func4_name) \ msg_tag_t rpc_##struct_type##_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) \ @@ -707,7 +707,7 @@ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t) } \ return tag; \ } -#define RPC_DISPATCH12(struct_type, op_type, func0_op, func0_name, func1_op, func1_name, \ +#define RPC_DISPATCH12(struct_type, prot, op_type, func0_op, func0_name, func1_op, func1_name, \ func2_op, func2_name, func3_op, func3_name, \ func4_op, func4_name, func5_op, func5_name, func6_op, func6_name, \ func7_op, func7_name, func8_op, func8_name, func9_op, func9_name, \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_1.h b/mkrtos_user/lib/sys_util/inc/u_rpc_1.h index 01c5178e7..b2177c4f0 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_1.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_1.h @@ -11,7 +11,7 @@ * @brief 该宏用于生成一个客户端的调用函数(传递一个参数) * */ -#define RPC_GENERATION_CALL1(struct_type, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ +#define RPC_GENERATION_CALL1(struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0) \ { \ void *buf; \ @@ -31,7 +31,7 @@ RPC_CLI_MSG_TO_BUF_IN(rpc_type0, cli_type0, var0, dir0, (uint8_t *)msg_ipc->msg_buf, off); \ PRC_CLI_FILL_MAP_BUF(rpc_type0, cli_type0, var0, dir0, (uint8_t *)msg_ipc->map_buf, off_map); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_map, WORD_BYTES), 0), msg_ipc);*/ \ - msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_map, WORD_BYTES), 0), hd, \ + msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_map, WORD_BYTES), prot), hd, \ ipc_timeout_create2(0, 0)); \ \ if (msg_tag_get_val(tag) < 0) \ @@ -46,7 +46,7 @@ * @brief 该宏用于生成服务端的分发函数(一个参数) * */ -#define RPC_GENERATION_DISPATCH1(struct_type, op, func_name, \ +#define RPC_GENERATION_DISPATCH1(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0) \ msg_tag_t struct_type##_##func_name##_dispatch(struct_type *obj, msg_tag_t tag, ipc_msg_t *ipc_msg) \ { \ @@ -80,5 +80,5 @@ * @brief 该宏用于生成一个服务端的实现(一个参数) * */ -#define RPC_GENERATION_OP1(struct_type, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ +#define RPC_GENERATION_OP1(struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ short struct_type##_##func_name##_op(struct_type *obj, svr_type0 *name0) diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_2.h b/mkrtos_user/lib/sys_util/inc/u_rpc_2.h index ec6cc7bc1..193369b06 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_2.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_2.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL2(struct_type, op, func_name, \ +#define RPC_GENERATION_CALL2(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1) \ msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0, cli_type1 *var1) \ @@ -32,7 +32,7 @@ RPC_CLI_MSG_TO_BUF_IN(rpc_type1, cli_type1, var1, dir1, (uint8_t *)msg_ipc->msg_buf, off); \ PRC_CLI_FILL_MAP_BUF(rpc_type1, cli_type1, var1, dir1, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ - msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), hd, \ + msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ ipc_timeout_create2(0, 0)); \ \ if (msg_tag_get_val(tag) < 0) \ @@ -45,7 +45,7 @@ return tag; \ } -#define RPC_GENERATION_DISPATCH2(struct_type, op, func_name, \ +#define RPC_GENERATION_DISPATCH2(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1) \ msg_tag_t struct_type##_##func_name##_dispatch(struct_type *obj, msg_tag_t tag, ipc_msg_t *ipc_msg) \ @@ -86,7 +86,7 @@ return msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_map, WORD_BYTES), ret_val); \ } -#define RPC_GENERATION_OP2(struct_type, op, func_name, \ +#define RPC_GENERATION_OP2(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1) \ short struct_type##_##func_name##_op(struct_type *obj, svr_type0 *name0, svr_type1 *name1) diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_3.h b/mkrtos_user/lib/sys_util/inc/u_rpc_3.h index 66bdbb7b8..fe22f463a 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_3.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_3.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL3(struct_type, op, func_name, \ +#define RPC_GENERATION_CALL3(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2) \ @@ -35,7 +35,7 @@ RPC_CLI_MSG_TO_BUF_IN(rpc_type2, cli_type2, var2, dir2, (uint8_t *)msg_ipc->msg_buf, off); \ PRC_CLI_FILL_MAP_BUF(rpc_type2, cli_type2, var2, dir2, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ - msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), hd, \ + msg_tag_t tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ ipc_timeout_create2(0, 0)); \ \ if (msg_tag_get_val(tag) < 0) \ @@ -49,7 +49,7 @@ return tag; \ } -#define RPC_GENERATION_DISPATCH3(struct_type, op, func_name, \ +#define RPC_GENERATION_DISPATCH3(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2) \ @@ -96,7 +96,7 @@ return msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_map, WORD_BYTES), ret_val); \ } -#define RPC_GENERATION_OP3(struct_type, op, func_name, \ +#define RPC_GENERATION_OP3(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2) \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h b/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h index 8f5559000..00c74321e 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h @@ -3,6 +3,7 @@ #include "u_types.h" #include "u_prot.h" #include "u_thread.h" +#include struct rpc_svr_obj; typedef msg_tag_t (*rpc_dispatch_func)(struct rpc_svr_obj *obj, msg_tag_t tag, ipc_msg_t *msg); @@ -19,5 +20,19 @@ static inline int rpc_svr_obj_init(rpc_svr_obj_t *obj, rpc_dispatch_func dis, mw obj->prot = prot; } +#define META_PROT_NR 4 +typedef struct meta +{ + rpc_svr_obj_t svr; + rpc_svr_obj_t *svr_list[META_PROT_NR]; + umword_t svr_list_prot[META_PROT_NR]; + pthread_spinlock_t lock; +} meta_t; + +int rpc_meta_init(obj_handler_t th, obj_handler_t *ret_ipc_hd); +void meta_unreg_svr_obj_raw(meta_t *meta, umword_t prot); +void meta_unreg_svr_obj(umword_t prot); +int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot); +int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot); int rpc_creaite_bind_ipc(obj_handler_t th, void *obj, obj_handler_t *ipc_hd); void rpc_loop(void); diff --git a/mkrtos_user/lib/sys_util/src/u_rpc_svr.c b/mkrtos_user/lib/sys_util/src/u_rpc_svr.c index 97129b0c7..7d332c2d0 100644 --- a/mkrtos_user/lib/sys_util/src/u_rpc_svr.c +++ b/mkrtos_user/lib/sys_util/src/u_rpc_svr.c @@ -4,10 +4,99 @@ #include "u_hd_man.h" #include "u_thread.h" #include "u_rpc_svr.h" +#include "rpc_prot.h" #include #include #include +static meta_t meta_obj; +static msg_tag_t rpc_meta_t_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg); + +static rpc_svr_obj_t *meta_svr_find(meta_t *meta, umword_t prot) +{ + pthread_spin_lock(&meta->lock); + for (int i = 0; i < META_PROT_NR; i++) + { + if (meta->svr_list[i]) + { + if (meta->svr_list_prot[i] == prot) + { + pthread_spin_unlock(&meta->lock); + return meta->svr_list[i]; + } + } + } + pthread_spin_unlock(&meta->lock); +} +void meta_unreg_svr_obj_raw(meta_t *meta, umword_t prot) +{ + pthread_spin_lock(&meta->lock); + for (int i = 0; i < META_PROT_NR; i++) + { + if (meta->svr_list[i] && meta->svr_list_prot[i] == prot) + { + meta->svr_list[i] = NULL; + meta->svr_list_prot[i] = 0; + break; + } + } + pthread_spin_unlock(&meta->lock); +} +void meta_unreg_svr_obj(umword_t prot) +{ + meta_unreg_svr_obj_raw(&meta_obj, prot); +} +int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot) +{ + int i = 0; + pthread_spin_lock(&meta->lock); + for (i = 0; i < META_PROT_NR; i++) + { + if (meta->svr_list[i] == NULL) + { + meta->svr_list_prot[i] = prot; + meta->svr_list[i] = svr_obj; + break; + } + } + pthread_spin_unlock(&meta->lock); + return i < META_PROT_NR; +} +int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot) +{ + return meta_reg_svr_obj_raw(&meta_obj, svr_obj, prot); +} +AUTO_CALL(101) +static void meta_obj_init(void) +{ + rpc_svr_obj_init(&meta_obj.svr, rpc_meta_t_dispatch, META_PROT); +} +static msg_tag_t rpc_meta_t_dispatch(struct rpc_svr_obj *obj, msg_tag_t in_tag, ipc_msg_t *ipc_msg) +{ + meta_t *meta = (meta_t *)obj; + + if (msg_tag_get_prot(in_tag) == META_PROT) + { + return msg_tag_init4(0, 0, 0, -EPROTO); + } + else + { + msg_tag_t msg; + rpc_svr_obj_t *svr_obj = meta_svr_find(meta, msg_tag_get_prot(in_tag)); + + if (svr_obj == NULL) + { + return msg_tag_init4(0, 0, 0, -EPROTO); + } + if (svr_obj->dispatch == NULL) + { + return msg_tag_init4(0, 0, 0, -EPROTO); + } + msg = svr_obj->dispatch(svr_obj, in_tag, ipc_msg); + return msg; + } +} + /** * @brief 绑定IPC * @@ -42,6 +131,10 @@ int rpc_creaite_bind_ipc(obj_handler_t th, void *obj, obj_handler_t *ret_ipc_hd) *ret_ipc_hd = ipc_hd; return 0; } +int rpc_meta_init(obj_handler_t th, obj_handler_t *ret_ipc_hd) +{ + return rpc_creaite_bind_ipc(th, &meta_obj.svr, ret_ipc_hd); +} /** * @brief RPC循环处理消息 * diff --git a/mkrtos_user/server/init/src/init.cfg b/mkrtos_user/server/init/src/init.cfg index f04d9b82a..bb8ed67eb 100644 --- a/mkrtos_user/server/init/src/init.cfg +++ b/mkrtos_user/server/init/src/init.cfg @@ -2,3 +2,4 @@ mr_drv hello +# rtthread_drv diff --git a/mkrtos_user/server/init/src/main.c b/mkrtos_user/server/init/src/main.c index 41de92792..0da670bae 100644 --- a/mkrtos_user/server/init/src/main.c +++ b/mkrtos_user/server/init/src/main.c @@ -10,6 +10,7 @@ #include "u_hd_man.h" #include "u_irq_sender.h" #include "u_app_loader.h" +#include "u_rpc_svr.h" #include "test/test.h" #include "u_rpc_svr.h" @@ -19,10 +20,11 @@ #include "parse_cfg.h" #include #include -extern void futex_init(void); -int main(int argc, char *args[]) + +#define DEFAULT_INIT_CFG "init.cfg" + +static void test(void) { - ulog_write_str(LOG_PROT, "init..\n"); #if 0 ulog_test(); factory_test(); @@ -41,41 +43,20 @@ int main(int argc, char *args[]) pthread_cond_lock_test(); pthread_lock_test(); #endif - uenv_t env = *u_get_global_env(); - env.ns_hd = namespace_init(); +} +int main(int argc, char *args[]) +{ int ret; + uenv_t *env; - ret = parse_cfg("init.cfg", &env); + ulog_write_str(LOG_PROT, "init..\n"); + test(); + env = u_get_global_env(); + rpc_meta_init(THREAD_MAIN, &env->ns_hd); + namespace_init(); + + ret = parse_cfg(DEFAULT_INIT_CFG, env); printf("run app num is %d.\n", ret); - // ret = app_load("mr_drv", &env); - // if (ret < 0) - // { - // printf("%s load fail, 0x%x\n", "mr_drv", ret); - // } - // ret = app_load("rtthread_drv", &env); - // if (ret < 0) - // { - // printf("%s load fail, 0x%x\n", "mr_drv", ret); - // } - // ret = app_load("hello", &env); - // if (ret < 0) - // { - // printf("%s load fail, 0x%x\n", "hello", ret); - // } - // ret = app_load("app", &env); - // if (ret < 0) - // { - // printf("app load fail, 0x%x\n", ret); - // // ulog_write_str(LOG_PROT, "app load fail.\n"); - // } - - // ret = app_load("fatfs", &env); - // if (ret < 0) - // { - // printf("app load fail, 0x%x\n", ret); - // } - // u_sleep_ms(500); - namespace_pre_alloc_map_fd(); namespace_loop(); return 0; diff --git a/mkrtos_user/server/init/src/namespace.c b/mkrtos_user/server/init/src/namespace.c index 3f07b7461..06c83b8e2 100644 --- a/mkrtos_user/server/init/src/namespace.c +++ b/mkrtos_user/server/init/src/namespace.c @@ -9,18 +9,13 @@ #include "ns_types.h" #include "ns_svr.h" #include "namespace.h" - +#include "u_rpc_svr.h" static ns_t ns; -static obj_handler_t ipc_hd; -obj_handler_t namespace_init(void) +void namespace_init(void) { - int ret; - ns_init(&ns); + meta_reg_svr_obj(&ns.svr, NS_PROT); printf("ns svr init...\n"); - ret = rpc_creaite_bind_ipc(THREAD_MAIN, &ns, &ipc_hd); - assert(ret >= 0); - return ipc_hd; } static int namespace_alloc(const char *path, obj_handler_t hd) diff --git a/mkrtos_user/server/init/src/namespace.h b/mkrtos_user/server/init/src/namespace.h index 2828b395b..af3686ebd 100644 --- a/mkrtos_user/server/init/src/namespace.h +++ b/mkrtos_user/server/init/src/namespace.h @@ -2,9 +2,8 @@ #include "u_types.h" #include "u_prot.h" -obj_handler_t namespace_init(void); +void namespace_init(void); int namespace_register(const char *path, obj_handler_t hd); int namespace_query(const char *path, obj_handler_t *hd); -// msg_tag_t ns_dispatch(ipc_msg_t *msg); int namespace_pre_alloc_map_fd(void); void namespace_loop(void);