// camera.cc // buzz - Programme du robot Efrei Robotique I1-I2 2003 // Copyright (C) 2003 Nicolas Schodet // #include "camera.h" #include "erreur/erreur.h" #include "kernel/pbus.h" #include #include #include // Debug. #include // #include #define CAM_FILE "/dev/robotcam" // Constructeur. Camera::Camera () { // Ouvre le périphérique. m_fd = open (CAM_FILE, O_RDONLY); if (m_fd == -1) throw ErreurFatale ("Impossible d'ouvrir le périphérique de la" " camera.\n"); // Paramètre la camera. sccb_io param; ifstream rc ("rc/camera"); int addr, data; while (!rc.eof ()) { rc >> hex >> addr >> hex >> data; if (rc.good ()) { param.addr = addr; param.data = data; cout << "camera sccbwrite 0x" << hex << addr << " 0x" << data << endl; ioctl (m_fd, CAM_SCCBWRITE, ¶m); } } // Affiche les paramètres. cout << hex << "camera sccbdump"; for (addr = 0; addr < 0x50; ++addr) { if (!(addr % 16)) cout << endl; param.addr = addr; ioctl (m_fd, CAM_SCCBREAD, ¶m); data = param.data; cout << setw (2) << setfill ('0') << data << ' '; } cout << endl << dec; // Paramètre la taille de frame. m_frameSize = m_w * m_h * 3; ioctl (m_fd, CAM_SETFRAMESIZE, &m_frameSize); } // Destructeur. Camera::~Camera () { // Ferme le périphérique de camera. close (m_fd); } // Lit une image. void Camera::read (unsigned char *image) const { int r; // Lit les données sur la camera. r = ::read (m_fd, image, m_frameSize); cout << "camera read " << r << endl; }