summaryrefslogtreecommitdiff
path: root/noncore/multimedia/camera/zcameraio.cpp
Unidiff
Diffstat (limited to 'noncore/multimedia/camera/zcameraio.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/camera/zcameraio.cpp58
1 files changed, 34 insertions, 24 deletions
diff --git a/noncore/multimedia/camera/zcameraio.cpp b/noncore/multimedia/camera/zcameraio.cpp
index 7343dca..56b2e13 100644
--- a/noncore/multimedia/camera/zcameraio.cpp
+++ b/noncore/multimedia/camera/zcameraio.cpp
@@ -25,7 +25,10 @@
25 25
26#include <qimage.h> 26#include <qimage.h>
27#include <qdatetime.h>
27 28
28#include <opie2/odebug.h> 29#include <opie2/odebug.h>
29 30
31#define SHARPZDC "/dev/sharp_zdc"
32
30ZCameraIO* ZCameraIO::_instance = 0; 33ZCameraIO* ZCameraIO::_instance = 0;
31 34
@@ -44,5 +47,5 @@ ZCameraIO::ZCameraIO()
44 :_height( 0 ), _width( 0 ), _zoom( 0 ), _rot( 0 ), _readlen( 0 ) 47 :_height( 0 ), _width( 0 ), _zoom( 0 ), _rot( 0 ), _readlen( 0 )
45{ 48{
46 _driver = ::open( "/dev/sharp_zdc", O_RDWR ); 49 _driver = ::open( SHARPZDC, O_RDWR );
47 if ( _driver == -1 ) 50 if ( _driver == -1 )
48 oerr << "Can't open camera driver: " << strerror(errno) << oendl; 51 oerr << "Can't open camera driver: " << strerror(errno) << oendl;
@@ -66,5 +69,8 @@ ZCameraIO::~ZCameraIO()
66{ 69{
67 if ( _driver != -1 ) 70 if ( _driver != -1 )
71 {
72 setReadMode( 0 );
68 ::close( _driver ); 73 ::close( _driver );
74 }
69} 75}
70 76
@@ -108,5 +114,5 @@ bool ZCameraIO::setCaptureFrame( int width, int height, int zoom, bool rot )
108 { 114 {
109 _width = width; 115 _width = width;
110 _height = _height; 116 _height = height;
111 _zoom = zoom; 117 _zoom = zoom;
112 _rot = rot; 118 _rot = rot;
@@ -120,5 +126,5 @@ bool ZCameraIO::setCaptureFrame( int width, int height, int zoom, bool rot )
120void ZCameraIO::setReadMode( int mode ) 126void ZCameraIO::setReadMode( int mode )
121{ 127{
122 char b[4]; 128 char b[10];
123 sprintf( b, "M=%d", mode ); 129 sprintf( b, "M=%d", mode );
124 write( b, mode <= 9 ? 3 : 4 ); 130 write( b, mode <= 9 ? 3 : 4 );
@@ -137,6 +143,18 @@ void ZCameraIO::clearShutterLatch()
137bool ZCameraIO::read( char* b, int len ) 143bool ZCameraIO::read( char* b, int len )
138{ 144{
145 #ifndef NO_TIMING
146 QTime t;
147 t.start();
148 #endif
139 int rlen = ::read( _driver, b, len ); 149 int rlen = ::read( _driver, b, len );
140 odebug << "read " << rlen << " from driver." << oendl; 150 #ifndef NO_TIMING
151 int time = t.elapsed();
152 #else
153 int time = -1;
154 #endif
155 if ( rlen )
156 odebug << "read " << rlen << " ('" << b[0] << b[1] << b[2] << b[3] << "') [" << time << " ms] from driver." << oendl;
157 else
158 odebug << "read nothing from driver." << oendl;
141 return rlen == len; 159 return rlen == len;
142} 160}
@@ -156,25 +174,10 @@ bool ZCameraIO::write( char* buf, int len )
156bool ZCameraIO::snapshot( QImage* image ) 174bool ZCameraIO::snapshot( QImage* image )
157{ 175{
158 /* 176 setReadMode( IMAGE | XFLIP | YFLIP );
159
160 char buf[76800]; 177 char buf[76800];
161 178 char* bp = buf;
162 write( _driver, "M=13", 4 );
163 write( _driver, "R=240,160,256,480", 17 );
164 write( _driver, "M=12", 4 );
165
166 int result = read( _driver, &buf, sizeof buf );
167
168 return result == sizeof buf;
169
170 */
171
172 unsigned char buf[76800];
173 unsigned char* bp = buf;
174 unsigned char* p; 179 unsigned char* p;
175 180
176 int fd = open( "/tmp/cam", O_RDONLY ); 181 read( bp, _readlen );
177 if ( ::read( fd, buf, sizeof buf ) != sizeof buf )
178 owarn << "Couldn't read image from /dev/sharp_zdc" << oendl;
179 182
180 image->create( 240, 160, 16 ); 183 image->create( 240, 160, 16 );
@@ -196,9 +199,16 @@ bool ZCameraIO::snapshot( QImage* image )
196} 199}
197 200
198bool ZCameraIO::snapshot( uchar* buf ) 201bool ZCameraIO::snapshot( unsigned char* buf )
199{ 202{
203 setReadMode( IMAGE | XFLIP | YFLIP );
204
205 read( (char*) buf, _readlen );
206
207 /* //TESTCODE
200 int fd = open( "/tmp/cam", O_RDONLY ); 208 int fd = open( "/tmp/cam", O_RDONLY );
201 if ( ::read( fd, buf, 76800 ) != 76800 ) 209 if ( ::read( fd, (char*) buf, 76800 ) != 76800 )
202 owarn << "Couldn't read image from /dev/sharp_zdc" << oendl; 210 owarn << "Couldn't read image from /dev/sharp_zdc" << oendl;
211 // TESTCODE */
212
203 213
204 return true; 214 return true;