summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/camera/camera.cc
diff options
context:
space:
mode:
Diffstat (limited to '2003/i/buzz/src/camera/camera.cc')
-rw-r--r--2003/i/buzz/src/camera/camera.cc41
1 files changed, 35 insertions, 6 deletions
diff --git a/2003/i/buzz/src/camera/camera.cc b/2003/i/buzz/src/camera/camera.cc
index e9a7f60..27132f9 100644
--- a/2003/i/buzz/src/camera/camera.cc
+++ b/2003/i/buzz/src/camera/camera.cc
@@ -5,6 +5,7 @@
#include "camera.h"
#include "erreur/erreur.h"
#include "kernel/pbus.h"
+#include "config/config.h"
#include <fcntl.h>
#include <unistd.h>
@@ -17,6 +18,9 @@
// Constructeur.
Camera::Camera ()
{
+ // Taille par défaut.
+ m_w = 352; m_h = 288;
+ m_cut = 0;
// Ouvre le périphérique.
m_fd = open (CAM_FILE, O_RDONLY);
if (m_fd == -1)
@@ -24,13 +28,33 @@ Camera::Camera ()
" camera.\n");
// Paramètre la camera.
sccb_io param;
- ifstream rc ("rc/camera");
+ Config rc ("rc/camera");
int addr, data;
while (!rc.eof ())
{
- rc >> hex >> addr >> hex >> data;
- if (rc.good ())
+ if (rc.isId ("width"))
{
+ rc.getId ();
+ m_w = rc.getNum ();
+ cout << "camera width " << m_w << endl;
+ }
+ else if (rc.isId ("height"))
+ {
+ rc.getId ();
+ m_h = rc.getNum ();
+ cout << "camera height " << m_h << endl;
+ }
+ else if (rc.isId ("cut"))
+ {
+ rc.getId ();
+ m_cut = rc.getNum ();
+ cout << "camera cut " << m_cut << endl;
+ }
+ else if (rc.isId ("setup"))
+ {
+ rc.getId ();
+ addr = rc.getNum ();
+ data = rc.getNum ();
param.addr = addr; param.data = data;
cout << "camera sccbwrite 0x" << hex << addr << " 0x" << data <<
endl;
@@ -50,7 +74,8 @@ Camera::Camera ()
}
cout << endl << dec;
// Paramètre la taille de frame.
- m_frameSize = m_w * m_h * 3;
+ ioctl (m_fd, CAM_SETHCOUNT, &m_w);
+ m_frameSize = m_w * m_h + m_cut;
ioctl (m_fd, CAM_SETFRAMESIZE, &m_frameSize);
}
@@ -62,11 +87,15 @@ Camera::~Camera ()
}
// Lit une image.
-void
+int
Camera::read (unsigned char *image) const
{
int r;
// Lit les données sur la camera.
- r = ::read (m_fd, image, m_frameSize);
+ if (m_cut)
+ r = ::read (m_fd, image, m_cut);
+ if (!m_cut || r)
+ r = ::read (m_fd, image, m_frameSize - m_cut);
cout << "camera read " << r << endl;
+ return r;
}