27 #include <opencv2/imgproc/imgproc.hpp>  
   30 using namespace oculus_dk2;
 
   32 static const vrpn_uint16 OCULUS_VENDOR = 0x2833;
 
   33 static const vrpn_uint16 DK2_PRODUCT = 0x0021;
 
   35 Oculus_DK2_HID::Oculus_DK2_HID(
double keepAliveSeconds)
 
   37           m_filter = new vrpn_HidProductAcceptor(OCULUS_VENDOR, DK2_PRODUCT)) {
 
   39     m_keepAliveSeconds = keepAliveSeconds;
 
   44     vrpn_gettimeofday(&m_lastKeepAlive, NULL);
 
   47 Oculus_DK2_HID::~Oculus_DK2_HID() {
 
   49     writeLEDControl(
false);
 
   55 std::vector<OCULUS_IMU_REPORT> Oculus_DK2_HID::poll() {
 
   59     vrpn_gettimeofday(&now, NULL);
 
   60     if (vrpn_TimevalDurationSeconds(now, m_lastKeepAlive) >=
 
   63         m_lastKeepAlive = now;
 
   77 void Oculus_DK2_HID::writeLEDControl(
 
   78     bool enable, vrpn_uint16 exposureLength, vrpn_uint16 frameInterval,
 
   79     vrpn_uint16 vSyncOffset, vrpn_uint8 dutyCycle, vrpn_uint8 pattern,
 
   80     bool autoIncrement, 
bool useCarrier, 
bool syncInput, 
bool vSyncLock,
 
   81     bool customPattern, vrpn_uint16 commandId) {
 
   83     vrpn_uint8 pktBuffer[13];
 
   86     vrpn_uint8 *bufptr = pktBuffer;
 
   87     vrpn_int32 buflen = 
sizeof(pktBuffer);
 
   88     vrpn_buffer_to_little_endian(&bufptr, &buflen, vrpn_uint8(0x0cU));
 
   89     vrpn_buffer_to_little_endian(&bufptr, &buflen, commandId);
 
   90     vrpn_buffer_to_little_endian(&bufptr, &buflen, pattern);
 
   91     vrpn_uint8 flags = 0x00U;
 
  110     vrpn_buffer_to_little_endian(&bufptr, &buflen, flags);
 
  111     vrpn_buffer_to_little_endian(&bufptr, &buflen,
 
  113     vrpn_buffer_to_little_endian(&bufptr, &buflen, exposureLength);
 
  114     vrpn_buffer_to_little_endian(&bufptr, &buflen, frameInterval);
 
  115     vrpn_buffer_to_little_endian(&bufptr, &buflen, vSyncOffset);
 
  116     vrpn_buffer_to_little_endian(&bufptr, &buflen, dutyCycle);
 
  119     send_feature_report(
sizeof(pktBuffer), pktBuffer);
 
  124 void Oculus_DK2_HID::writeKeepAlive(
bool keepLEDs, vrpn_uint16 interval,
 
  125                                     vrpn_uint16 commandId) {
 
  127     vrpn_uint8 pktBuffer[6];
 
  130     vrpn_uint8 *bufptr = pktBuffer;
 
  131     vrpn_int32 buflen = 
sizeof(pktBuffer);
 
  132     vrpn_buffer_to_little_endian(&bufptr, &buflen, vrpn_uint8(0x11U));
 
  133     vrpn_buffer_to_little_endian(&bufptr, &buflen, commandId);
 
  134     vrpn_uint8 flags = keepLEDs ? 0x0bU : 0x01U;
 
  135     vrpn_buffer_to_little_endian(&bufptr, &buflen, flags);
 
  136     vrpn_buffer_to_little_endian(&bufptr, &buflen, interval);
 
  139     send_feature_report(
sizeof(pktBuffer), pktBuffer);
 
  142 void Oculus_DK2_HID::on_data_received(
size_t bytes, vrpn_uint8 *buffer) {
 
  150 cv::Mat osvr::oculus_dk2::unscramble_image(
const cv::Mat &image) {
 
  216     cv::cvtColor(image, yuvImage, cv::COLOR_BGR2YCrCb);
 
  229     cv::Mat outImage(yuvImage.rows, yuvImage.cols * 2, CV_8UC1, 
cv::Scalar(0));
 
  230     for (
int r = 0; r < yuvImage.rows; r++) {
 
  231         for (
int c = 0; c < yuvImage.cols; c++) {
 
  232             outImage.at<
unsigned char>(r, c * 2) =
 
  233                 yuvImage.at<cv::Vec3b>(r, c)[0];
 
  234             outImage.at<
unsigned char>(r, c * 2 + 1) =
 
  235                 yuvImage.at<cv::Vec3b>(r, c)[0];
 
Header file describing interface for an Oculus DK2 device. 
double Scalar
Common scalar type.