diff --git a/components/drivers/src/portal.c b/components/drivers/src/portal.c index 82d9d4e802486a3e0a58019b60eb2fafd23e0f1b..779812e9ca46fca2c5dc0e1a2a29ab9e752fe2a7 100644 --- a/components/drivers/src/portal.c +++ b/components/drivers/src/portal.c @@ -53,6 +53,9 @@ static rt_err_t _portal_open(rt_device_t dev, rt_uint16_t oflag) RT_ASSERT(dev); + if (!oflag) + return -RT_ERROR; + portal = (struct rt_portal_device*)dev; if (oflag & RT_DEVICE_OFLAG_RDONLY) @@ -113,7 +116,8 @@ static rt_err_t _portal_rx_indicate(rt_device_t dev, rt_size_t size) pipe = (struct rt_pipe_device*)dev; if (pipe->read_portal->parent.rx_indicate) - return pipe->read_portal->parent.rx_indicate(dev, size); + return pipe->read_portal->parent.rx_indicate( + (rt_device_t)pipe->read_portal, size); return -RT_ENOSYS; } @@ -127,7 +131,8 @@ static rt_err_t _portal_tx_complete(rt_device_t dev, void *buf) pipe = (struct rt_pipe_device*)dev; if (pipe->write_portal->parent.tx_complete) - return pipe->write_portal->parent.tx_complete(dev, buf); + return pipe->write_portal->parent.tx_complete( + (rt_device_t)pipe->write_portal, buf); return -RT_ENOSYS; }