#include "dri.h"
CDevice::CDevice()
{
m_inend_msg=1;
m_outend_msg=129;
m_outend_data=130;
m_interface=0;
m_nret=-1;
m_width=752;
m_high=480;
m_pid = 0x1001;
m_vid = 0x1949;
libusb_init(NULL);
m_phd = libusb_open_device_with_vid_pid(NULL, m_vid, m_pid);
assert(m_phd != NULL);
m_data = new unsigned char[262144+98166];
m_pbmp = new unsigned char[14+40+(262144+98816)*3];
m_pRgbArr = new unsigned char*[m_width*sizeof(unsigned char*)];
for(int j=0; j!= m_high+2; j++)
{
m_pRgbArr[j] = ( unsigned char*)malloc(3*(m_width+2));
memset(m_pRgbArr[j],0,3*(m_width+2));
}
}
CDevice::~CDevice()
{
m_inend_msg=0;
m_outend_msg=0;
m_outend_data=0;
m_interface=0;
m_nret=0;
m_width=0;
m_high=0;
libusb_release_interface(m_phd, m_interface);
libusb_close(m_phd);
libusb_exit(NULL);
free(m_data) ;
free(m_pbmp);
for( int j=0; j!= m_high+2; j++)
{
free( m_pRgbArr[j]);
}
free(m_pRgbArr);
}
CDevice::CDevice(CDevice&)
{
}
void CDevice::startdevice()
{
int nret;
int writesize;
unsigned char initdata[4];
unsigned char r_initdata[5];
nret = libusb_claim_interface(m_phd, m_interface);
//init data
initdata[0] = (char)0x15;
initdata[1] = (char)0x0f;
initdata[2] = (char)0x10;
initdata[3] = '\0';
memset(r_initdata, 0, 5);
if(m_phd == NULL)
fprintf(stderr," no usb device handle\n");
//start usb data transmit
nret = libusb_bulk_transfer(m_phd, m_inend_msg,
initdata, 3, &writesize, 0 );
assert(nret==0);
printf("%d:data has been transmitted\n", writesize);
nret = libusb_bulk_transfer(m_phd, m_outend_msg,
r_initdata, 4, &writesize, 0);
assert(nret == 0);
printf("%d : byte has been transmitted\n", writesize);
for(nret=0; nret!=4; nret++)
{
printf("%d\n", r_initdata[nret]);
}
initdata[2] = (char)0x11;
nret = libusb_bulk_transfer(m_phd, m_inend_msg, initdata, 3, &writesize, 0);
assert(nret == 0);
printf(" %d has been transmitted\n", writesize);
memset(r_initdata, 0, 5);
nret = libusb_bulk_transfer(m_phd, m_outend_msg, r_initdata, 4, &writesize, 0);
assert(nret == 0);
printf("%d has been transmitten\n", writesize);
for(nret=0; nret!=4; nret++)
{
printf("%d\n", r_initdata[nret]);
}
initdata[2] = (char)0x12;
nret = libusb_bulk_transfer(m_phd, m_inend_msg, initdata, 3, &writesize, 0);
assert(nret == 0);
printf(" %d has been transmitted\n", writesize);
memset(r_initdata, 0, 5);
nret = libusb_bulk_transfer(m_phd, m_outend_msg, r_initdata, 4, &writesize, 0);
assert(nret == 0);
printf("%d has been transmitten\n", writesize);
for(nret=0; nret!=4; nret++)
{
printf("%d\n", r_initdata[nret]);
}
initdata[2] = (char)0x13;
nret = libusb_bulk_transfer(m_phd, m_inend_msg, initdata, 3, &writesize, 0);
assert(nret == 0);
printf(" %d has been transmitted\n", writesize);
memset(r_initdata, 0, 5);
nret = libusb_bulk_transfer(m_phd, m_outend_msg, r_initdata, 4, &writesize, 0);
assert(nret == 0);
printf("%d has been transmitten\n", writesize);
for(nret=0; nret!=4; nret++)
{
printf("%d\n", r_initdata[nret]);
}
cout << "device has started=========================================\n";
}
void CDevice::initdevice()
{
int writesize;
int nret;
unsigned char r_data[8];
unsigned char w_data[8];
memset(r_data, 0, 8);
memset(w_data, 0, 8);
//start data transferi 1out
w_data[0] = (char)0x14;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
libusb_bulk_transfer(m_phd, 129, r_data, 2, &writesize, 0);
for(nret=0; nret!=2; nret++)
{
// cout << r_data[nret] << endl;
printf("%x\n", r_data[nret]);
}
// 7out
memset(w_data, 0, 8);
w_data[0] = (char)0x13;
w_data[1] = (char)0xa;
w_data[2] = (char)0x80;
libusb_bulk_transfer(m_phd, 1, w_data, 7, &writesize, 0);
//7out
memset(w_data, 0, 8);
w_data[0] = (char)0x13;
w_data[1] = (char)0xa;
w_data[2] = (char)0xc;
w_data[3] = (char)0x2;
w_data[4] = (char)0xf0;
w_data[5] = (char)0x1;
w_data[6] = (char)0xe0;
libusb_bulk_transfer(m_phd, 1, w_data, 7, &writesize, 0);
//7 out
memset(w_data, 0, 8);
w_data[0] = (char)0x13;
w_data[1] = (char)0xa;
w_data[2] = (char)0x8;
libusb_bulk_transfer(m_phd, 1, w_data, 7, &writesize, 0);
//3 out
memset(w_data, 0, 8);
w_data[0] = 0x15;
w_data[1] = 0xf;
w_data[2] = 0x10;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
// 4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//3 out
memset(w_data, 0, 8);
w_data[0] = (char)0x15;
w_data[1] = (char)0xf;
w_data[2] = (char)0x11;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
//4 in
memset(r_data, 0, 8);
libusb_bulk_transfer(m_phd , 129, r_data, 4 ,&writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
// 3 0ut
w_data[2] = (char)0x12;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0 );
//4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret =0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//3 out
w_data[3] = (char)0x13;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
// 4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//1 out
memset(w_data, 0, 3);
w_data[0] = (char)0x12;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
//1 out
w_data[0] = (char)0x10;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
//3 out
w_data[0] = (char)0x15;
w_data[1] = (char)0xf;
w_data[2] = (char)0x10;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
//4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n",r_data[nret]);
}
//3 out
w_data[2] = (char)0x11;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
//4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//3 out
w_data[2] = (char)0x12;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
//4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//3 out
w_data[2] = (char)0x13;
libusb_bulk_transfer(m_phd, 1, w_data, 3, &writesize, 0);
//4 in
memset(r_data, 0, 4);
libusb_bulk_transfer(m_phd, 129, r_data, 4, &writesize, 0);
for(nret=0; nret!=4; nret++)
{
printf("%x\n", r_data[nret]);
}
//out
memset(w_data, 0, 4);
w_data[0] = (char)0x12;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
w_data[0] = (char)0x10;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
cout << "device initialization finish =====================\n" << endl;
}
void CDevice::closedevice()
{
libusb_release_interface(m_phd, m_interface);
}
void CDevice::setresolution()
{
int writesize;
int nret;
unsigned char r_data[8];
unsigned char w_data[8];
memset(r_data, 0, 8);
memset(w_data, 0, 8);
//start data transferi 1out
w_data[0] = (char)0x12;
libusb_bulk_transfer(m_phd, 1, w_data, 1, &writesize, 0);
// 7out
memset(w_data, 0, 8);
基于LibUsb的linux相机驱动 鄙人毕设
4星 · 超过85%的资源 需积分: 46 133 浏览量
2011-07-16
09:10:46
上传
评论 4
收藏 4KB RAR 举报
下资源要分
- 粉丝: 1
- 资源: 1
最新资源
- 老飞飞搭建基础通用数据库V19数据库.rar
- jquery.js
- 机械设计多工位ACF贴胶带&预压设备sw18可编辑非常好的设计图纸100%好用.zip
- 基于Pytorch复现Point-Transformer,用于ShapeNet数据集点云分割
- 【医学影像分析】2D超声图像的分割检测(Ultrasound Nerve Segmentation - Kaggle数据集)
- 嘎嘎香的五款神仙谷歌插件
- .arch书源导入教程.mp4
- 贪心算法介绍及代码示例讲解
- CR13SP35MSI64 Crystal 水晶报表运行组件最后版本64位
- 图像分类数据集:玉米叶是否感染分类数据集(2分类,包含训练集、验证集)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页