Exemplo n.º 1
0
    bool
    VideoCapture::frameCapture(void)
    {
#if defined(DUNE_SYS_HAS_LIBV4L2_H)
      fd_set fds;
      timeval tv;
      int rv = 0;

      do
      {
        FD_ZERO(&fds);
        FD_SET(m_fd, &fds);
        tv.tv_sec = 1;
        tv.tv_usec = 0;
        rv = select(m_fd + 1, &fds, NULL, NULL, &tv);
      }
      while ((rv == -1 && (errno = EINTR)));

      doIoctl(m_fd, VIDIOC_QBUF, m_bfr);
      std::memset(m_bfr, 0, sizeof(v4l2_buffer));
      m_bfr->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      m_bfr->memory = V4L2_MEMORY_MMAP;
      doIoctl(m_fd, VIDIOC_DQBUF, m_bfr);
      return true;
#else
      return false;
#endif
    }
Exemplo n.º 2
0
    void
    VideoCapture::start(void)
    {
#if defined(DUNE_SYS_HAS_LIBV4L2_H)
      v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      doIoctl(m_fd, VIDIOC_STREAMON, &type);

      // Read one frame to allow for captureFrame() to enqueue/deque
      // buffers in one run.
      std::memset(m_bfr, 0, sizeof(v4l2_buffer));
      m_bfr->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      m_bfr->memory = V4L2_MEMORY_MMAP;
      doIoctl(m_fd, VIDIOC_DQBUF, m_bfr);
#endif
    }
Exemplo n.º 3
0
    void
    VideoCapture::setStandard(VideoCapture::Standard standard)
    {
      (void)standard;

#if defined(DUNE_SYS_HAS_LIBV4L2_H)
      v4l2_std_id id = 0;
      switch (standard)
      {
        case STANDARD_PAL:
          id = V4L2_STD_PAL;
          break;
        case STANDARD_NTSC:
          id = V4L2_STD_NTSC;
          break;
      }

      if (id & (1ULL << 63))
      {
        struct v4l2_standard vs;

        vs.index = id & 0xffff;
        if (testIoctl(m_fd, VIDIOC_ENUMSTD, &vs) >= 0)
          id = vs.id;
      }

      doIoctl(m_fd, VIDIOC_S_STD, &id);
#endif
    }
Exemplo n.º 4
0
//const int TMrfTal_RB::doReadout(TMrfData& data, const u_int32_t& wordcount, u_int8_t* const startaddress)
int TMrfTal_RBUDP::doReadout(const u_int32_t& wordcount, u_int8_t* const startaddress) const
{
    if (deviceIsOpen()) {
        udpRequest req;
        req.dataFlag = udpDataFlag::bulkRead;
        req.registerAddress = rb_address::ident;
        req.memoryAddress = (char*)startaddress;
        req.wordcount = wordcount;

        // deal with the UDP request
        doIoctl(req.dataFlag, &req);

        if ( !lastActionSuccessful() ) {
            rb_errcode |= rb_error::doreadout_failed;
            return -1;
        }

        // If the DAQ buffer is empty, 0xeeeeeeee is returned. Check for that...
        if ( *(u_int32_t*)(req.memoryAddress) == 0xeeeeeeee && req.wordcount == 1 )
            req.wordcount = 0;

        return req.wordcount;
    } else {
        rb_errcode |= rb_error::device_not_open;
        return -2;
    }
}
Exemplo n.º 5
0
//const int TMrfTal_RB::doReadout(TMrfData& data, const u_int32_t& wordcount, u_int8_t* const startaddress)
int TMrfTal_RBBase::doReadout(const u_int32_t& wordcount, u_int8_t* const startaddress) const
{
	if (deviceIsOpen()) {
		sis1100_vme_block_req req;
		req.size=4;
		req.fifo=1;
		req.num=wordcount;
		req.am=-1;
		req.addr=rb_address::ident;
		req.data = startaddress;
		req.error=0;
		doIoctl(SIS3100_VME_BLOCK_READ, &req);
		if (!(lastActionSuccessful())) {
			rb_errcode |= rb_error::doreadout_failed;
			return -1;
		}
		switch (req.error) {
		case sis_magic::nomoredata:	/* normal case, more data requested than available */
			rb_errcode = 0;
			break;
		case sis_magic::success:	/* not enough data requested */
			rb_errcode |= rb_error::more_data_available;
			break;
		default:
			rb_errcode |= rb_error::doreadout_failed;
			std::cerr << "Block Read FAIL: " << std::hex << req.error << std::dec << std::endl;
			return -1;

		}
		return req.num;
	} else {
		rb_errcode |= rb_error::device_not_open;
		return -2;
	}
}
Exemplo n.º 6
0
    void
    VideoCapture::stop(void)
    {
#if defined(DUNE_SYS_HAS_LIBV4L2_H)
      v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      doIoctl(m_fd, VIDIOC_STREAMOFF, &type);
#endif
    }
Exemplo n.º 7
0
int TMrfTal_RBBase::initReadout() const
{
	if (deviceIsOpen()) {
		int len[2]={1, 1};
		doIoctl(SIS1100_MINDMALEN, len);
		if (lastActionSuccessful()) {
			rb_errcode = 0;
			return 0;
		} else {
			rb_errcode |= rb_error::initreadout_failed;
			return -1;
		}
	} else {
		rb_errcode |= rb_error::device_not_open;
		return -2;
	}
}
static jbyteArray NetworkInterface_getHardwareAddressImpl(JNIEnv* env, jclass, jstring name) {
    ifreq ifr;
    if (!doIoctl(env, name, SIOCGIFHWADDR, ifr)) {
        return NULL;
    }
    jbyte bytes[IFHWADDRLEN];
    bool isEmpty = true;
    for (int i = 0; i < IFHWADDRLEN; ++i) {
        bytes[i] = ifr.ifr_hwaddr.sa_data[i];
        if (bytes[i] != 0) {
            isEmpty = false;
        }
    }
    if (isEmpty) {
        return NULL;
    }
    jbyteArray result = env->NewByteArray(IFHWADDRLEN);
    env->SetByteArrayRegion(result, 0, IFHWADDRLEN, bytes);
    return result;
}
Exemplo n.º 9
0
    VideoCapture::VideoCapture(const std::string& dev, uint32_t w, uint32_t h)
    {
      // Video 4 Linux library implementation.
#if defined(DUNE_SYS_HAS_LIBV4L2_H)
      m_fd = v4l2_open(dev.c_str(), O_RDWR | O_NONBLOCK, 0);
      if (m_fd < 0)
        throw Error(errno, String::str("failed to open device '%s'", dev.c_str()));

      // Initialize V4L2 format.
      m_fmt = new v4l2_format;
      std::memset(m_fmt, 0, sizeof(v4l2_format));
      m_fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      m_fmt->fmt.pix.width = w;
      m_fmt->fmt.pix.height = h;
      m_fmt->fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24;
      m_fmt->fmt.pix.field = V4L2_FIELD_INTERLACED;
      doIoctl(m_fd, VIDIOC_S_FMT, m_fmt);

      if (m_fmt->fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24)
        throw std::runtime_error("pixel format RGB24 is not supported by device");

      // Initialize V4L2 request buffers.
      m_bfr_req = new v4l2_requestbuffers;
      std::memset(m_bfr_req, 0, sizeof(v4l2_requestbuffers));
      m_bfr_req->count = 2;
      m_bfr_req->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
      m_bfr_req->memory = V4L2_MEMORY_MMAP;
      doIoctl(m_fd, VIDIOC_REQBUFS, m_bfr_req);

      m_bfr = new v4l2_buffer;
      m_bfrs = (Buffer*)calloc(m_bfr_req->count, sizeof(Buffer));

      for (unsigned i = 0; i < m_bfr_req->count; ++i)
      {
        std::memset(m_bfr, 0, sizeof(v4l2_buffer));
        m_bfr->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        m_bfr->memory = V4L2_MEMORY_MMAP;
        m_bfr->index = i;
        doIoctl(m_fd, VIDIOC_QUERYBUF, m_bfr);

        m_bfrs[i].length = m_bfr->length;
        m_bfrs[i].start = v4l2_mmap(0, m_bfr->length,
                                    PROT_READ | PROT_WRITE, MAP_SHARED,
                                    m_fd, m_bfr->m.offset);

        if (MAP_FAILED == m_bfrs[i].start)
        {
          perror("mmap");
          exit(EXIT_FAILURE);
        }

        std::memset(m_bfr, 0, sizeof(v4l2_buffer));
        m_bfr->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        m_bfr->memory = V4L2_MEMORY_MMAP;
        m_bfr->index = i;
        doIoctl(m_fd, VIDIOC_QBUF, m_bfr);
      }

#else
      (void)dev;
      (void)h;
      (void)w;

      throw std::runtime_error("VideoCapture is not yet implemented in this system.");
#endif
    }
Exemplo n.º 10
0
Arquivo: switest.c Projeto: nandhp/arm
int main()
{
    doMalloc();
    doIoctl();
    return 0;
}
static jint NetworkInterface_getMTUImpl(JNIEnv* env, jclass, jstring name) {
    ifreq ifr;
    doIoctl(env, name, SIOCGIFMTU, ifr); // May throw.
    return ifr.ifr_mtu;
}
static jboolean hasFlag(JNIEnv* env, jstring name, int flag) {
    ifreq ifr;
    doIoctl(env, name, SIOCGIFFLAGS, ifr); // May throw.
    return (ifr.ifr_flags & flag) != 0;
}