IOManager.cpp

00001 /*
00002 Copyright 2007, 2008, 2009, 2010, 2011 Instituto de Sistemas e Robotica, Instituto Superior Tecnico
00003 
00004 This file is part of MeRMaID.
00005 
00006 MeRMaID is free software: you can redistribute it and/or modify
00007 it under the terms of the GNU Lesser General Public License as published by
00008 the Free Software Foundation, either version 3 of the License, or
00009 (at your option) any later version.
00010 
00011 MeRMaID is distributed in the hope that it will be useful,
00012 but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 GNU Lesser General Public License for more details.
00015 
00016 You should have received a copy of the GNU Lesser General Public License
00017 along with MeRMaID.  If not, see <http://www.gnu.org/licenses/>.
00018 */
00019 
00020 
00021 
00022 #include "config.h"
00023 
00024 #include "IOManager.hpp"
00025 #include "IOThread.hpp"
00026 #include <fcntl.h>
00027 #include <Exception.hpp>
00028 #include <cassert>
00029 
00030 using namespace mermaid::support::io;
00031 using mermaid::support::errorhandling::Exception;
00032 
00033 shared_ptr<IOManager> IOManager::instance_ (shared_ptr<IOManager> (new IOManager()));
00034 
00035 IOManager::IOManager() : ioThread_ (new IOThread()) { }
00036 
00037 IOManager::~IOManager() { }
00038 
00039 shared_ptr<IOManager> IOManager::getInstance()
00040 {
00041   return instance_;
00042 }
00043 
00044 shared_ptr<DeviceHandle> IOManager::createDevice (std::string filename, shared_ptr<ActiveObject> owner, shared_ptr<DeviceConfigurator> deviceConfigurator, int expectedDataSize)
00045 {
00046 
00047   int fileDescriptor = open (filename.c_str(), O_RDWR);
00048   if (fileDescriptor == -1) {
00049     throw Exception ("IOManager::createDevice:  Error opening device: " + filename);
00050   }
00051   
00052   shared_ptr<Device> device (new Device (expectedDataSize, fileDescriptor, owner, deviceConfigurator));
00053   
00054   deviceConfigurator->configureDevice (fileDescriptor);
00055   
00056   shared_ptr<DeviceHandle> deviceHandle (new DeviceHandle (device));
00057   deviceHandleMap_[device] = deviceHandle;
00058   
00059   return deviceHandle;
00060 }
00061 
00062 void IOManager::enableDeviceRead (shared_ptr<Device> device, shared_ptr<StreamOperationHandlerMethodBase> streamOperationHandlerRead)
00063 {
00064   device->enableRead (streamOperationHandlerRead);
00065 }
00066 
00067 void IOManager::enableDeviceWrite (shared_ptr<Device> device)
00068 {
00069   device->enableWrite();
00070 }
00071 
00072 shared_ptr<IOThread> IOManager::getIOThread() const
00073 {
00074   return ioThread_;
00075 }
00076 
00077 void IOManager::closeDevice (shared_ptr<Device> device)
00078 {
00079   assert (deviceHandleMap_.find (device) != deviceHandleMap_.end());
00080   deviceHandleMap_.erase (device);
00081   device->close();
00082 }
Generated on Fri Mar 4 22:14:58 2011 for MeRMaID::support by  doxygen 1.6.3