uORB move to standalone CDev

- uORB topics should not be Devices with bus, address, device id
This commit is contained in:
Daniel Agar
2018-08-27 13:14:15 -04:00
parent a2f4757e31
commit dbf2d25e2f
9 changed files with 49 additions and 68 deletions
@@ -43,14 +43,12 @@
#include <px4_time.h>
#include "vcdevtest_example.h"
#include <drivers/drv_device.h>
#include <drivers/device/device.h>
#include <lib/cdev/CDev.hpp>
#include <unistd.h>
#include <stdio.h>
px4::AppState VCDevExample::appState;
using namespace device;
#define TESTDEV "/dev/vdevtest"
static bool g_exit = false;
@@ -99,27 +97,27 @@ public:
size_t _read_offset;
};
class VCDevNode : public CDev
class VCDevNode : public cdev::CDev
{
public:
VCDevNode() :
CDev("vcdevtest", TESTDEV),
CDev(TESTDEV),
_is_open_for_write(false),
_write_offset(0) {}
~VCDevNode() = default;
virtual int open(device::file_t *handlep);
virtual int close(device::file_t *handlep);
virtual ssize_t write(device::file_t *handlep, const char *buffer, size_t buflen);
virtual ssize_t read(device::file_t *handlep, char *buffer, size_t buflen);
virtual int open(cdev::file_t *handlep);
virtual int close(cdev::file_t *handlep);
virtual ssize_t write(cdev::file_t *handlep, const char *buffer, size_t buflen);
virtual ssize_t read(cdev::file_t *handlep, char *buffer, size_t buflen);
private:
bool _is_open_for_write;
size_t _write_offset;
char _buf[1000];
};
int VCDevNode::open(device::file_t *handlep)
int VCDevNode::open(cdev::file_t *handlep)
{
// Only allow one writer
if (_is_open_for_write && (handlep->flags & PX4_F_WRONLY)) {
@@ -142,7 +140,7 @@ int VCDevNode::open(device::file_t *handlep)
return 0;
}
int VCDevNode::close(device::file_t *handlep)
int VCDevNode::close(cdev::file_t *handlep)
{
delete (PrivData *)handlep->priv;
handlep->priv = nullptr;
@@ -156,7 +154,7 @@ int VCDevNode::close(device::file_t *handlep)
return 0;
}
ssize_t VCDevNode::write(device::file_t *handlep, const char *buffer, size_t buflen)
ssize_t VCDevNode::write(cdev::file_t *handlep, const char *buffer, size_t buflen)
{
for (size_t i = 0; i < buflen && _write_offset < 1000; i++) {
_buf[_write_offset] = buffer[i];
@@ -169,7 +167,7 @@ ssize_t VCDevNode::write(device::file_t *handlep, const char *buffer, size_t buf
return buflen;
}
ssize_t VCDevNode::read(device::file_t *handlep, char *buffer, size_t buflen)
ssize_t VCDevNode::read(cdev::file_t *handlep, char *buffer, size_t buflen)
{
PrivData *p = (PrivData *)handlep->priv;
ssize_t chars_read = 0;
@@ -289,17 +287,7 @@ int VCDevExample::main()
return -px4_errno;
}
void *p = nullptr;
int ret = px4_ioctl(fd, DIOC_GETPRIV, (unsigned long)&p);
if (ret < 0) {
PX4_INFO("ioctl DIOC_GETPRIV failed %d %d", ret, px4_errno);
return -px4_errno;
}
PX4_INFO("priv data = %p %s", p, p == (void *)_node ? "PASS" : "FAIL");
ret = test_pub_block(fd, 1);
int ret = test_pub_block(fd, 1);
if (ret < 0) {
return ret;