3
\brief ���j�^�Ή��� URG ����
5
\author Satofumi KAMIMURA
7
$Id: mUrgDevice.cpp 1841 2010-06-06 12:01:11Z satofumi $
10
#include "mUrgDevice.h"
11
#include "RangeSensorParameter.h"
12
#include "UrgServer.h"
13
#include "SerialDevice.h"
14
#include "TcpipSocket.h"
15
#include "MonitorEventScheduler.h"
16
#include "MonitorDataHandler.h"
17
#include "LogNameHolder.h"
18
#include "DeviceIpManager.h"
19
#include "mConnection.h"
27
class UrgDeviceForRecord : public UrgDevice
30
MonitorModeManager::MonitorMode mode_;
31
MonitorDataHandler* handler_;
34
UrgDeviceForRecord(void) : handler_(NULL)
39
~UrgDeviceForRecord(void)
45
void captureReceived(void)
47
// �_�~�[�f�[�^���L�^���A�擾�^�C�~���O��������
48
if ((mode_ == MonitorModeManager::Record) ||
49
(mode_ == MonitorModeManager::Play)) {
51
handler_->fetch(dummy);
58
struct mUrgDevice::pImpl
60
MonitorModeManager::MonitorMode mode_;
61
UrgDeviceForRecord* urg_;
62
Connection* monitor_con_;
63
Connection* device_con_;
64
MonitorDataHandler* handler_;
68
: urg_(NULL), monitor_con_(NULL), device_con_(NULL), handler_(NULL)
87
void initializeConnection(int argc, char *argv[])
89
MonitorModeManager::object()->setMode(argc, argv);
90
mode_ = MonitorModeManager::object()->mode();
93
// mConnection �p�̃��O�Ǘ�
94
if (mode_ != MonitorModeManager::Simulation) {
95
device_con_ = new SerialDevice;
97
device_con_ = new TcpipSocket;
99
monitor_con_ = new mConnection(device_con_);
100
urg_->setConnection(monitor_con_);
102
// mUrgDevice �p�̃��O�Ǘ�
103
string log_name = LogNameHolder::object()->name("mUrgDevice");
104
handler_ = new MonitorDataHandler(log_name, mode_);
106
// �f�[�^�擾�X���b�h�p�̃��O�Ǘ�
107
log_name = LogNameHolder::object()->name("mUrgDevice_thread");
108
urg_->handler_ = new MonitorDataHandler(log_name, mode_);
113
mUrgDevice::mUrgDevice(int argc, char *argv[]) : pimpl(new pImpl)
115
pimpl->urg_ = new UrgDeviceForRecord;
116
pimpl->initializeConnection(argc, argv);
120
mUrgDevice::~mUrgDevice(void)
125
const char* mUrgDevice::what(void) const
127
return pimpl->urg_->what();
131
bool mUrgDevice::connect(const char* device, long baudrate)
133
MonitorModeManager::MonitorMode Simulation = MonitorModeManager::Simulation;
134
if (MonitorModeManager::object()->mode() == Simulation) {
135
// device ���� IP �|�[�g�擾���A�T�[�o���N������
136
long port = DeviceIpManager::object()->createIpPort(device);
138
// IP �|�[�g���擾�ς݂łȂ��ꍇ�̂݁A�T�[�o���N������
139
// !!! URG �̌^�A�V���A�� ID �̏����A�����Ŕ��f������ׂ�
140
UrgServer* urg_server = new UrgServer;
141
if (! urg_server->activate(port)) {
142
// �T�[�o���N���ł��Ȃ���A�ڑ��𒆒f����
145
MonitorEventScheduler::object()->registerDeviceServer(urg_server);
148
return pimpl->urg_->connect(device, baudrate);
152
void mUrgDevice::setConnection(Connection* con)
154
delete pimpl->monitor_con_;
155
pimpl->monitor_con_ = new mConnection(con);
156
pimpl->urg_->setConnection(pimpl->monitor_con_);
160
Connection* mUrgDevice::connection(void)
162
return pimpl->urg_->connection();
166
void mUrgDevice::disconnect(void)
168
pimpl->urg_->disconnect();
172
bool mUrgDevice::isConnected(void) const
174
return pimpl->urg_->isConnected();
178
long mUrgDevice::minDistance(void) const
180
return pimpl->urg_->minDistance();
184
long mUrgDevice::maxDistance(void) const
186
return pimpl->urg_->maxDistance();
190
int mUrgDevice::maxScanLines(void) const
192
return pimpl->urg_->maxScanLines();
196
void mUrgDevice::setRetryTimes(size_t times)
198
return pimpl->urg_->setRetryTimes(times);
202
int mUrgDevice::scanMsec(void) const
204
return pimpl->urg_->scanMsec();
208
void mUrgDevice::setCaptureMode(RangeCaptureMode mode)
210
pimpl->urg_->setCaptureMode(mode);
214
RangeCaptureMode mUrgDevice::captureMode(void)
216
return pimpl->urg_->captureMode();
220
void mUrgDevice::setCaptureRange(int begin_index, int end_index)
222
pimpl->urg_->setCaptureRange(begin_index, end_index);
226
void mUrgDevice::setCaptureFrameInterval(size_t interval)
228
pimpl->urg_->setCaptureFrameInterval(interval);
232
void mUrgDevice::setCaptureTimes(size_t times)
234
pimpl->urg_->setCaptureTimes(times);
238
size_t mUrgDevice::remainCaptureTimes(void)
240
return pimpl->urg_->remainCaptureTimes();
244
void mUrgDevice::setCaptureSkipLines(size_t skip_lines)
246
pimpl->urg_->setCaptureSkipLines(skip_lines);
250
int mUrgDevice::capture(vector<long>& data, long* timestamp)
252
// �_�~�[�f�[�^���L�^���A�擾�^�C�~���O��������
253
if ((pimpl->mode_ == MonitorModeManager::Record) ||
254
(pimpl->mode_ == MonitorModeManager::Play)) {
256
pimpl->handler_->fetch(dummy);
258
return pimpl->urg_->capture(data, timestamp);
262
int mUrgDevice::captureWithIntensity(vector<long>& data,
263
vector<long>& intensity_data,
266
// �_�~�[�f�[�^���L�^���A�擾�^�C�~���O��������
267
if ((pimpl->mode_ == MonitorModeManager::Record) ||
268
(pimpl->mode_ == MonitorModeManager::Play)) {
270
pimpl->handler_->fetch(dummy);
272
return pimpl->urg_->captureWithIntensity(data, intensity_data, timestamp);
276
void mUrgDevice::stop(void)
282
bool mUrgDevice::setTimestamp(int ticks, int* response_msec,
283
int* force_delay_msec)
285
if ((pimpl->mode_ == MonitorModeManager::Record) ||
286
(pimpl->mode_ == MonitorModeManager::Play)) {
287
pimpl->handler_->fetch(ticks);
290
int recorded = (force_delay_msec) ? *force_delay_msec : 0;
291
if (pimpl->mode_ == MonitorModeManager::Play) {
292
pimpl->handler_->fetch(recorded);
296
bool ret = pimpl->urg_->setTimestamp(ticks, &delay_msec, &recorded);
298
*response_msec = delay_msec;
300
if (pimpl->mode_ == MonitorModeManager::Record) {
301
pimpl->handler_->fetch(delay_msec);
307
bool mUrgDevice::setLaserOutput(bool on)
309
return pimpl->urg_->setLaserOutput(on);
313
double mUrgDevice::index2rad(const int index) const
315
return pimpl->urg_->index2rad(index);
319
int mUrgDevice::rad2index(const double radian) const
321
return pimpl->urg_->rad2index(radian);
325
void mUrgDevice::setParameter(const RangeSensorParameter& parameter)
327
pimpl->urg_->setParameter(parameter);
331
RangeSensorParameter mUrgDevice::parameter(void) const
333
return pimpl->urg_->parameter();
337
bool mUrgDevice::versionLines(vector<string>& lines)
339
return pimpl->urg_->versionLines(lines);
343
bool mUrgDevice::loadParameter(void)
345
return pimpl->urg_->loadParameter();
349
void mUrgDevice::reboot(void)
351
pimpl->urg_->reboot();