⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.cpp

📁 在linux系统下
💻 CPP
字号:
#include "USB.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
#include <linux/videodev.h>

#include <jpeglib.h>
#include <memory.h>

#include <bits/pthreadtypes.h>
#include <unistd.h>
#include <string.h>
#include <qimage.h>
Highlight::USB::USB(char* name):devName(name)
{
	vd.frame = 0;
	vd.map = 0;
	curWidth = DEFAULT_WIDTH;
	curHeight = DEFAULT_HEIGHT;
	n = 1;
	isOpen = false;
	isShow = true;
//	currentGrap = 0;
//	currentDisplay = 1;
//	isFirstGrap = true;
}
bool Highlight::USB::openDevice()
{    
#ifdef MYDEBUGE
		Log.DoLog("openDevice start!\n");
#endif
    if ((vd.fd = open(devName, O_RDWR)) < 0) 
	{
		return  false;  
	}
#ifdef MYDEBUGE
		Log.DoLog("openDevice end!\n");
#endif
	isOpen = true;
	return true; 
}
bool Highlight::USB::getPicture()
{
	if (ioctl(vd.fd, VIDIOCGPICT, &vd.picture) < 0)
	{
		return  false;
	}
	vd.picture.depth = 32;
	vd.picture.palette = VIDEO_PALETTE_RGB32;
	if(ioctl(vd.fd, VIDIOCSPICT, &vd.picture))
	{
		return false;
	}
	return true; 
}
bool Highlight::USB::getCapability()
{

	if (ioctl(vd.fd, VIDIOCGCAP, &(vd.capability)) < 0) 
	{  
		return  false;
	}
	return true; 
}
bool Highlight::USB::initDevice()
{
	Log.DoLog("initDevice start\n");
	if(!getCapability())
	{
		return false;
	}

	if(!getPicture())
	{
		return false;
	}
	Log.DoLog("initDevice end\n");
	//playMode(false);
	curWidth = DEFAULT_WIDTH;
	curHeight = DEFAULT_HEIGHT;
	changeResolution();
	return true;
}
/*
bool Highlight::USB::getMemory( int width,int height)
{

	if(vd.map)
	{
		free(vd.map);
	}
	vd.map = (unsigned char *)malloc(width*height*4);
	if(!vd.map)
	{
		return false;cermonitor.rb
(spark.rb) sparkRegisterCustomRender InternalSoccerRender
(FontServer) ERROR: font file 'VeraMono.ttf' not found
(spark.rb) sparkRegisterCustomInput InternalSoccerInput
(InternalSoccerRender) Unable to get font VeraMono.ttf 16
(ScriptServer) Running internalsoccerbindings.rb
(soccerbindings.rb) setting up bindings
(ScriptServer) updating cached script variables
(ScriptServer) updating cached script variables
(ScriptServer) updating cached script variables
(SimulationServer) entering runloop
(SimulationServer) running in single thread
(NetControl) 'AgentControl' setting up a server on TCP
	}
	return true;
}*/
bool Highlight::USB::readData()
{
	
	ioctl(vd.fd, VIDIOCMCAPTURE, &vd.mmap);
	ioctl(vd.fd, VIDIOCSYNC, 0);
	returnBuf = (unsigned char*)vd.map;
	return true;
}
void Highlight::USB::closeDevice()
{
	munmap(vd.map,curWidth*curHeight*4*n);
	if( close(vd.fd) < 0)
	{
		exit(EXIT_FAILURE);
	}
#ifdef MYDEBUGE
	Log.DoLog("close success");
#endif
	isOpen = false;
	return;
}
unsigned char* Highlight::USB::getBuffer()
{
	#ifdef MYDEBUGE
	//Log.DoLog("currentGrap is %d\n", currentGrap);
	#endif
	//return (unsigned char*)vd.map + vd.mbuf.offsets[currentDisplay];
	return returnBuf;
}

void Highlight::USB::setPicture(video_picture &newPic)
{
#ifdef MYDEBUGE
	Log.DoLog("THe hue is %d\n",newPic.hue);
	Log.DoLog("THe hue is %d\n",newPic.contrast);
	Log.DoLog("THe hue is %d\n",newPic.brightness);
#endif
	ioctl(vd.fd, VIDIOCSPICT, &newPic);
}

void Highlight::USB::setCapability(video_capture &newPic)
{
	ioctl(vd.fd, VIDIOCSCAPTURE, &newPic);
}
void Highlight::USB::setContrast(int contrast)
{
	vd.picture.contrast = contrast;

	setPicture(vd.picture);
}
int Highlight::USB::getContrast()
{
	return vd.picture.contrast;
}
void Highlight::USB::setBrightness(int brightness)
{
	vd.picture.brightness = brightness;
	setPicture(vd.picture);
}
int Highlight::USB::getBrightness()
{
	return vd.picture.brightness;
}
void Highlight::USB::setHue(int hue)
{
	vd.picture.hue = hue;

	setPicture(vd.picture);
}
int Highlight::USB::getHue()
{
	return vd.picture.hue;
}
void Highlight::USB::playMode(bool isHigh)
{

	munmap(vd.map, curWidth * curHeight * 4 * n);
	if(isHigh)
	{
		getCapability();
		curWidth = vd.capability.maxwidth;
		curHeight = vd.capability.maxheight;
		changeResolution();
#ifdef MYDEBUGE
	Log.DoLog("the isHigh is %d\n",isHigh);
	Log.DoLog("the maxwidth is %d the maxheight is %d\n",vd.capability.maxwidth,vd.capability.maxheight);
#endif
	}
	else
	{
		curWidth = DEFAULT_WIDTH;
		curHeight = DEFAULT_HEIGHT;
		changeResolution();
#ifdef MYDEBUGE
	Log.DoLog("the isHigh is %d\n",isHigh);
	Log.DoLog("the maxwidth is %d the maxheight is %d\n",vd.capability.minwidth,vd.capability.minheight);
#endif
	}
}

void Highlight::USB::setMmap()
{
	vd.mmap.frame = 0;
	vd.mmap.width = curWidth;
	vd.mmap.height = curHeight;
	vd.mmap.format = VIDEO_PALETTE_RGB32;	
	vd.map = mmap(0, curWidth*curHeight*4*n, PROT_READ|PROT_WRITE, MAP_SHARED, vd.fd, 0);
}
void Highlight::USB::setCapture()
{
	vd.capture.width = curWidth;
	vd.capture.height = curHeight;
	Log.DoLog("the capture W is %d the capture H is %d\n",curWidth,curHeight);
	ioctl(vd.fd, VIDIOCSCAPTURE, &vd.capture);
}

void Highlight::USB::changeResolution()
{
	setCapture();
	setMmap();
}

bool Highlight::USB::isopen()
{
	return isOpen;
}
bool Highlight::USB::isshow()
{
	return isShow;
}






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -