DeviceHandle.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "config.h"
00023
00024 #include <algorithm>
00025 #include <cassert>
00026 #include <Task.hpp>
00027 #include "DeviceHandle.hpp"
00028 #include "IOManager.hpp"
00029
00030 using namespace mermaid::support::io;
00031
00032 using mermaid::support::activeobject::Task;
00033
00034 DeviceHandle::~DeviceHandle()
00035 {
00036 if (closed_ == false) {
00037 close();
00038 closed_ = true;
00039 }
00040 }
00041
00042 DeviceHandle::DeviceHandle (shared_ptr<Device> device) : device_ (device), closed_ (false)
00043 {
00044
00045 }
00046
00047 void DeviceHandle::enableRead (shared_ptr<StreamOperationHandlerMethodBase> streamOperationHandlerRead)
00048 {
00049 IOManager::getInstance()->enableDeviceRead (device_, streamOperationHandlerRead);
00050 }
00051
00052 void DeviceHandle::write (size_t bytesToWrite, const char* data, shared_ptr<StreamOperationHandlerMethodBase> streamOperationHandlerWrite)
00053 {
00054
00055 char* copyOfData = new char[bytesToWrite];
00056 std::copy (data, data + bytesToWrite, copyOfData);
00057
00058 device_->write (bytesToWrite, copyOfData, streamOperationHandlerWrite);
00059 }
00060
00061 void DeviceHandle::close()
00062 {
00063 IOManager::getInstance()->closeDevice (device_);
00064 closed_ = true;
00065 }
00066
00067 void DeviceHandle::configureDevice (shared_ptr<DeviceConfigurator> deviceConfigurator)
00068 {
00069 device_->configureDevice (deviceConfigurator);
00070 }