00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <interfaces/SkillerInterface.h>
00025
00026 #include <core/exceptions/software.h>
00027
00028 #include <cstring>
00029 #include <cstdlib>
00030
00031 namespace fawkes {
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 SkillerInterface::SkillerInterface() : Interface()
00048 {
00049 data_size = sizeof(SkillerInterface_data_t);
00050 data_ptr = malloc(data_size);
00051 data = (SkillerInterface_data_t *)data_ptr;
00052 memset(data_ptr, 0, data_size);
00053 add_fieldinfo(IFT_STRING, "skill_string", 1024, data->skill_string);
00054 add_fieldinfo(IFT_STRING, "error", 128, data->error);
00055 add_fieldinfo(IFT_UINT, "exclusive_controller", 1, &data->exclusive_controller);
00056 add_fieldinfo(IFT_BOOL, "continuous", 1, &data->continuous);
00057 add_messageinfo("ExecSkillMessage");
00058 add_messageinfo("ExecSkillContinuousMessage");
00059 add_messageinfo("RestartInterpreterMessage");
00060 add_messageinfo("StopExecMessage");
00061 add_messageinfo("AcquireControlMessage");
00062 add_messageinfo("ReleaseControlMessage");
00063 unsigned char tmp_hash[] = {0x61, 0x7c, 0x70, 0xc4, 0x68, 0x8b, 0x8b, 0x69, 0x87, 0xc1, 0xd1, 0xe6, 0xed, 0x34, 0xb5, 0x5};
00064 set_hash(tmp_hash);
00065 }
00066
00067
00068 SkillerInterface::~SkillerInterface()
00069 {
00070 free(data_ptr);
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080 char *
00081 SkillerInterface::skill_string() const
00082 {
00083 return data->skill_string;
00084 }
00085
00086
00087
00088
00089
00090 size_t
00091 SkillerInterface::maxlenof_skill_string() const
00092 {
00093 return 1024;
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103 void
00104 SkillerInterface::set_skill_string(const char * new_skill_string)
00105 {
00106 strncpy(data->skill_string, new_skill_string, sizeof(data->skill_string));
00107 }
00108
00109
00110
00111
00112
00113
00114
00115 char *
00116 SkillerInterface::error() const
00117 {
00118 return data->error;
00119 }
00120
00121
00122
00123
00124
00125 size_t
00126 SkillerInterface::maxlenof_error() const
00127 {
00128 return 128;
00129 }
00130
00131
00132
00133
00134
00135
00136
00137 void
00138 SkillerInterface::set_error(const char * new_error)
00139 {
00140 strncpy(data->error, new_error, sizeof(data->error));
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 unsigned int
00152 SkillerInterface::exclusive_controller() const
00153 {
00154 return data->exclusive_controller;
00155 }
00156
00157
00158
00159
00160
00161 size_t
00162 SkillerInterface::maxlenof_exclusive_controller() const
00163 {
00164 return 1;
00165 }
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175 void
00176 SkillerInterface::set_exclusive_controller(const unsigned int new_exclusive_controller)
00177 {
00178 data->exclusive_controller = new_exclusive_controller;
00179 }
00180
00181
00182
00183
00184
00185
00186
00187 SkillerInterface::SkillStatusEnum
00188 SkillerInterface::status() const
00189 {
00190 return data->status;
00191 }
00192
00193
00194
00195
00196
00197 size_t
00198 SkillerInterface::maxlenof_status() const
00199 {
00200 return 1;
00201 }
00202
00203
00204
00205
00206
00207
00208
00209 void
00210 SkillerInterface::set_status(const SkillStatusEnum new_status)
00211 {
00212 data->status = new_status;
00213 }
00214
00215
00216
00217
00218
00219
00220
00221
00222 bool
00223 SkillerInterface::is_continuous() const
00224 {
00225 return data->continuous;
00226 }
00227
00228
00229
00230
00231
00232 size_t
00233 SkillerInterface::maxlenof_continuous() const
00234 {
00235 return 1;
00236 }
00237
00238
00239
00240
00241
00242
00243
00244
00245 void
00246 SkillerInterface::set_continuous(const bool new_continuous)
00247 {
00248 data->continuous = new_continuous;
00249 }
00250
00251
00252 Message *
00253 SkillerInterface::create_message(const char *type) const
00254 {
00255 if ( strncmp("ExecSkillMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00256 return new ExecSkillMessage();
00257 } else if ( strncmp("ExecSkillContinuousMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00258 return new ExecSkillContinuousMessage();
00259 } else if ( strncmp("RestartInterpreterMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00260 return new RestartInterpreterMessage();
00261 } else if ( strncmp("StopExecMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00262 return new StopExecMessage();
00263 } else if ( strncmp("AcquireControlMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00264 return new AcquireControlMessage();
00265 } else if ( strncmp("ReleaseControlMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
00266 return new ReleaseControlMessage();
00267 } else {
00268 throw UnknownTypeException("The given type '%s' does not match any known "
00269 "message type for this interface type.", type);
00270 }
00271 }
00272
00273
00274
00275
00276
00277 void
00278 SkillerInterface::copy_values(const Interface *other)
00279 {
00280 const SkillerInterface *oi = dynamic_cast<const SkillerInterface *>(other);
00281 if (oi == NULL) {
00282 throw TypeMismatchException("Can only copy values from interface of same type (%s vs. %s)",
00283 type(), other->type());
00284 }
00285 memcpy(data, oi->data, sizeof(SkillerInterface_data_t));
00286 }
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299 SkillerInterface::ExecSkillMessage::ExecSkillMessage(const char * ini_skill_string) : Message("ExecSkillMessage")
00300 {
00301 data_size = sizeof(ExecSkillMessage_data_t);
00302 data_ptr = malloc(data_size);
00303 memset(data_ptr, 0, data_size);
00304 data = (ExecSkillMessage_data_t *)data_ptr;
00305 strncpy(data->skill_string, ini_skill_string, 1024);
00306 add_fieldinfo(IFT_STRING, "skill_string", 1024, data->skill_string);
00307 }
00308
00309 SkillerInterface::ExecSkillMessage::ExecSkillMessage() : Message("ExecSkillMessage")
00310 {
00311 data_size = sizeof(ExecSkillMessage_data_t);
00312 data_ptr = malloc(data_size);
00313 memset(data_ptr, 0, data_size);
00314 data = (ExecSkillMessage_data_t *)data_ptr;
00315 add_fieldinfo(IFT_STRING, "skill_string", 1024, data->skill_string);
00316 }
00317
00318
00319 SkillerInterface::ExecSkillMessage::~ExecSkillMessage()
00320 {
00321 free(data_ptr);
00322 }
00323
00324
00325
00326
00327 SkillerInterface::ExecSkillMessage::ExecSkillMessage(const ExecSkillMessage *m) : Message("ExecSkillMessage")
00328 {
00329 data_size = m->data_size;
00330 data_ptr = malloc(data_size);
00331 memcpy(data_ptr, m->data_ptr, data_size);
00332 data = (ExecSkillMessage_data_t *)data_ptr;
00333 }
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343 char *
00344 SkillerInterface::ExecSkillMessage::skill_string() const
00345 {
00346 return data->skill_string;
00347 }
00348
00349
00350
00351
00352
00353 size_t
00354 SkillerInterface::ExecSkillMessage::maxlenof_skill_string() const
00355 {
00356 return 1024;
00357 }
00358
00359
00360
00361
00362
00363
00364
00365
00366 void
00367 SkillerInterface::ExecSkillMessage::set_skill_string(const char * new_skill_string)
00368 {
00369 strncpy(data->skill_string, new_skill_string, sizeof(data->skill_string));
00370 }
00371
00372
00373
00374
00375
00376
00377 Message *
00378 SkillerInterface::ExecSkillMessage::clone() const
00379 {
00380 return new SkillerInterface::ExecSkillMessage(this);
00381 }
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392 SkillerInterface::ExecSkillContinuousMessage::ExecSkillContinuousMessage(const char * ini_skill_string) : Message("ExecSkillContinuousMessage")
00393 {
00394 data_size = sizeof(ExecSkillContinuousMessage_data_t);
00395 data_ptr = malloc(data_size);
00396 memset(data_ptr, 0, data_size);
00397 data = (ExecSkillContinuousMessage_data_t *)data_ptr;
00398 strncpy(data->skill_string, ini_skill_string, 1024);
00399 add_fieldinfo(IFT_STRING, "skill_string", 1024, data->skill_string);
00400 }
00401
00402 SkillerInterface::ExecSkillContinuousMessage::ExecSkillContinuousMessage() : Message("ExecSkillContinuousMessage")
00403 {
00404 data_size = sizeof(ExecSkillContinuousMessage_data_t);
00405 data_ptr = malloc(data_size);
00406 memset(data_ptr, 0, data_size);
00407 data = (ExecSkillContinuousMessage_data_t *)data_ptr;
00408 add_fieldinfo(IFT_STRING, "skill_string", 1024, data->skill_string);
00409 }
00410
00411
00412 SkillerInterface::ExecSkillContinuousMessage::~ExecSkillContinuousMessage()
00413 {
00414 free(data_ptr);
00415 }
00416
00417
00418
00419
00420 SkillerInterface::ExecSkillContinuousMessage::ExecSkillContinuousMessage(const ExecSkillContinuousMessage *m) : Message("ExecSkillContinuousMessage")
00421 {
00422 data_size = m->data_size;
00423 data_ptr = malloc(data_size);
00424 memcpy(data_ptr, m->data_ptr, data_size);
00425 data = (ExecSkillContinuousMessage_data_t *)data_ptr;
00426 }
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436 char *
00437 SkillerInterface::ExecSkillContinuousMessage::skill_string() const
00438 {
00439 return data->skill_string;
00440 }
00441
00442
00443
00444
00445
00446 size_t
00447 SkillerInterface::ExecSkillContinuousMessage::maxlenof_skill_string() const
00448 {
00449 return 1024;
00450 }
00451
00452
00453
00454
00455
00456
00457
00458
00459 void
00460 SkillerInterface::ExecSkillContinuousMessage::set_skill_string(const char * new_skill_string)
00461 {
00462 strncpy(data->skill_string, new_skill_string, sizeof(data->skill_string));
00463 }
00464
00465
00466
00467
00468
00469
00470 Message *
00471 SkillerInterface::ExecSkillContinuousMessage::clone() const
00472 {
00473 return new SkillerInterface::ExecSkillContinuousMessage(this);
00474 }
00475
00476
00477
00478
00479
00480
00481
00482
00483 SkillerInterface::RestartInterpreterMessage::RestartInterpreterMessage() : Message("RestartInterpreterMessage")
00484 {
00485 data_size = 0;
00486 data_ptr = NULL;
00487 }
00488
00489
00490 SkillerInterface::RestartInterpreterMessage::~RestartInterpreterMessage()
00491 {
00492 }
00493
00494
00495
00496
00497 SkillerInterface::RestartInterpreterMessage::RestartInterpreterMessage(const RestartInterpreterMessage *m) : Message("RestartInterpreterMessage")
00498 {
00499 data_size = 0;
00500 data_ptr = NULL;
00501 }
00502
00503
00504
00505
00506
00507
00508
00509 Message *
00510 SkillerInterface::RestartInterpreterMessage::clone() const
00511 {
00512 return new SkillerInterface::RestartInterpreterMessage(this);
00513 }
00514
00515
00516
00517
00518
00519
00520
00521
00522 SkillerInterface::StopExecMessage::StopExecMessage() : Message("StopExecMessage")
00523 {
00524 data_size = 0;
00525 data_ptr = NULL;
00526 }
00527
00528
00529 SkillerInterface::StopExecMessage::~StopExecMessage()
00530 {
00531 }
00532
00533
00534
00535
00536 SkillerInterface::StopExecMessage::StopExecMessage(const StopExecMessage *m) : Message("StopExecMessage")
00537 {
00538 data_size = 0;
00539 data_ptr = NULL;
00540 }
00541
00542
00543
00544
00545
00546
00547
00548 Message *
00549 SkillerInterface::StopExecMessage::clone() const
00550 {
00551 return new SkillerInterface::StopExecMessage(this);
00552 }
00553
00554
00555
00556
00557
00558
00559
00560
00561 SkillerInterface::AcquireControlMessage::AcquireControlMessage() : Message("AcquireControlMessage")
00562 {
00563 data_size = 0;
00564 data_ptr = NULL;
00565 }
00566
00567
00568 SkillerInterface::AcquireControlMessage::~AcquireControlMessage()
00569 {
00570 }
00571
00572
00573
00574
00575 SkillerInterface::AcquireControlMessage::AcquireControlMessage(const AcquireControlMessage *m) : Message("AcquireControlMessage")
00576 {
00577 data_size = 0;
00578 data_ptr = NULL;
00579 }
00580
00581
00582
00583
00584
00585
00586
00587 Message *
00588 SkillerInterface::AcquireControlMessage::clone() const
00589 {
00590 return new SkillerInterface::AcquireControlMessage(this);
00591 }
00592
00593
00594
00595
00596
00597
00598
00599
00600 SkillerInterface::ReleaseControlMessage::ReleaseControlMessage() : Message("ReleaseControlMessage")
00601 {
00602 data_size = 0;
00603 data_ptr = NULL;
00604 }
00605
00606
00607 SkillerInterface::ReleaseControlMessage::~ReleaseControlMessage()
00608 {
00609 }
00610
00611
00612
00613
00614 SkillerInterface::ReleaseControlMessage::ReleaseControlMessage(const ReleaseControlMessage *m) : Message("ReleaseControlMessage")
00615 {
00616 data_size = 0;
00617 data_ptr = NULL;
00618 }
00619
00620
00621
00622
00623
00624
00625
00626 Message *
00627 SkillerInterface::ReleaseControlMessage::clone() const
00628 {
00629 return new SkillerInterface::ReleaseControlMessage(this);
00630 }
00631
00632
00633
00634 bool
00635 SkillerInterface::message_valid(const Message *message) const
00636 {
00637 const ExecSkillMessage *m0 = dynamic_cast<const ExecSkillMessage *>(message);
00638 if ( m0 != NULL ) {
00639 return true;
00640 }
00641 const ExecSkillContinuousMessage *m1 = dynamic_cast<const ExecSkillContinuousMessage *>(message);
00642 if ( m1 != NULL ) {
00643 return true;
00644 }
00645 const RestartInterpreterMessage *m2 = dynamic_cast<const RestartInterpreterMessage *>(message);
00646 if ( m2 != NULL ) {
00647 return true;
00648 }
00649 const StopExecMessage *m3 = dynamic_cast<const StopExecMessage *>(message);
00650 if ( m3 != NULL ) {
00651 return true;
00652 }
00653 const AcquireControlMessage *m4 = dynamic_cast<const AcquireControlMessage *>(message);
00654 if ( m4 != NULL ) {
00655 return true;
00656 }
00657 const ReleaseControlMessage *m5 = dynamic_cast<const ReleaseControlMessage *>(message);
00658 if ( m5 != NULL ) {
00659 return true;
00660 }
00661 return false;
00662 }
00663
00664
00665 EXPORT_INTERFACE(SkillerInterface)
00666
00667
00668
00669 }