2 * Copyright (c) 2013 TOYOTA MOTOR CORPORATION.
6 * Licensed under the Apache License, Version 2.0 (the License){}
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
24 #include "CicoEvent.h"
25 #include "CicoEventInfo.h"
26 #include "CicoStateAction.h"
27 #include "CicoStateCore.h"
28 #include "CicoState.h"
29 #include "CicoHistoryState.h"
30 #include "CicoFinalState.h"
31 #include "CicoStateMachine.h"
32 #include "CicoStateMachineCreator.h"
33 #include "ico_StateMachine_CWrapper.h"
34 #include "CicoStateInternal.h"
37 * stateMachine C Wrapper functions
40 static std::vector<CicoStateCore*> stateObjects;
41 static std::vector<CicoEventInfo*> evInfObjects;
42 static std::vector<void*> callbackFnc;
44 StateMachineCWrapperErr_E sttmerr;
49 * @ Definitions used in the function ico_sttm_addTransitionGCI ,
50 * @ ico_sttm_addTransitionGCD , ico_sttm_addTransitionGCS
51 * @ ico_sttm_addGCI , ico_sttm_addGCD , ico_sttm_addGCS
53 const char* GCOpKind[] = {
55 DEFJGCE_EQ, // "=" Guard condition is equal to
56 DEFJGCE_NE, // "!=" Guard condition is not equal to
57 DEFJGCE_LT, // "<" Guard condition is less than
58 DEFJGCE_LE, // "<=" Guard condition is less than or equal
59 DEFJGCE_GT, // ">" Guard condition is greater than
60 DEFJGCE_GE, // ">=" Guard condition is greater than or equal
61 DEFJGCE_IN, // "in" Guard condition is the state of the state-object
62 DEFJGCE_NOT, // "not" Guard condition is the state of the state-object
67 * @ c-wrapper local ID to CicoStateCore pointer
68 * @param id c-wrapper local ID
69 * @return not 0:get success
72 CicoStateCore* getID2ObjSTT(int id)
74 int sz = stateObjects.size();
75 if ((1 > id) || (id > sz)) {
76 return (CicoStateCore*)0;
78 return stateObjects[(id-1)];
83 * @brief getID2ObjSTTX
84 * @ c-wrapper local ID to CicoStateCore pointer
85 * @param id c-wrapper local ID
86 * @return not 0:get success
89 extern "C" void* getID2ObjSTTX(int id)
91 return (void*)getID2ObjSTT(id);
96 * @ CicoStateCore pointer to c-wrapper local ID
98 * @return not 0:get success(c-wrapper local ID)
101 int getObjSTT2ID(const CicoStateCore* stt)
104 int sz = stateObjects.size();
105 for (int i=0; i<sz; i++) {
106 if (stt == stateObjects[i]) {
108 break; // break of for i<sz
116 * @ c-wrapper local ID to CicoEventInfo pointer
117 * @param id c-wrapper local ID
118 * @return not 0:CicoEventInfo pointer
121 CicoEventInfo* getID2ObjEV(int id)
123 int sz = evInfObjects.size();
124 if ((1 > id) || (id > sz)) {
125 return (CicoEventInfo*)0;
127 return evInfObjects[(id-1)];
131 * @brief supplementName
134 * @return supplement name
136 const char* supplementName(const char* name)
138 static const char* emptychar = "";
139 if ((char*)0 == name) {
145 /* Registration system */
147 * @brief Create an stateMachine-object and state-object with the specified file
148 * @param file faile path pseudo-json
149 * @return not 0:stateMachine-object Id no.(c-wrapper local ID)
152 extern "C" int ico_sttm_createStateMachineFile(const char* file)
154 sttmerr = STTMNOERROR;
155 CicoStateMachineCreator csmc;
156 CicoStateMachine* csm = csmc.createFile(file);
157 if ((CicoStateMachine*)0 == csm) {
158 sttmerr = STTMCREATEERR;
159 _DBG("ico_sttm_createStateMachineFile %s", csmc.getError().c_str());
162 csm->getObjects(stateObjects);
164 int sz = stateObjects.size();
165 for (int i = 0; i < sz; i++) {
166 if (stateObjects[i] == csm) { // match object pointer
167 r = i+1; // get return value
168 break; // break of for i<sz
176 * @brief Create an stateMachine-object and state-object with the specified text
177 * @param buff text pseudo-json
178 * @return not 0:stateMachine-object ID no.(c-wrapper local ID)
181 extern "C" int ico_sttm_createStateMachineText(const char* buff)
183 sttmerr = STTMNOERROR;
184 CicoStateMachineCreator csmc;
185 CicoStateMachine* csm = csmc.create(buff);
186 if ((CicoStateMachine*)0 == csm) {
187 sttmerr = STTMCREATEERR;
188 _DBG("ico_sttm_createStateMachineText %s", csmc.getError().c_str());
191 csm->getObjects(stateObjects); // get all state-objects
193 int sz = stateObjects.size(); //
194 for (int i = 0; i < sz; i++) { //
195 if (stateObjects[i] == csm) { // match object pointer
196 r = i+1; // get return value
197 break; // break of for i<sz
204 * @brief Create stateMachine-object
205 * @param name stateMachine-object name (Option)
206 * @param value stateMachine-object ID no.
207 * @return not 0:stateMachine-object ID no.(c-wrapper local ID)
210 extern "C" int ico_sttm_createStateMachine(const char* name, int value)
212 sttmerr = STTMNOERROR;
213 CicoStateMachine* csm;
214 const char* sname = supplementName(name);
215 csm = new CicoStateMachine(sname, value);
216 if ((CicoStateMachine*)0 == csm) {
217 sttmerr = STTMNEWERR;
218 _ERR("ico_sttm_createStateMachine \"%s\", %d", sname, value);
221 stateObjects.push_back(csm);
222 return stateObjects.size();
226 * @brief Create state-object
227 * @param parent parent ID no.(c-wrapper local ID)
228 * @param name state-object name (Option)
229 * @param value state-object ID no.
230 * @return not 0:state-object ID no.(c-wrapper local ID)
233 extern "C" int ico_sttm_createState(int parent, const char* name, int value)
235 sttmerr = STTMNOERROR;
236 const char* sname = supplementName(name);
237 CicoStateCore* cscParent = getID2ObjSTT(parent); // ID to state-object
238 if ((CicoStateCore*)0 == cscParent) {
239 sttmerr = STTMNOTFIND;
240 _DBG("ico_sttm_createState >>%d<<, \"%s\", %d", parent, sname,value);
243 CicoState* cs = (CicoState*)0;
244 if (cscParent->isStateMachine()) {
245 cs = new CicoState(sname, value, (CicoStateMachine*)cscParent);
247 else if (cscParent->isState()) {
248 cs = new CicoState(sname, value, (CicoState*)cscParent);
250 if ((CicoState*)0 == cs) {
251 sttmerr = STTMNEWERR;
252 _ERR("ico_sttm_createState %d(%s:%d:%d), \"%s\", %d",
253 parent, cscParent->getName().c_str(), cscParent->getValue(),
254 (int)cscParent->getType(), sname, value);
257 stateObjects.push_back(cs);
258 return stateObjects.size();
262 * @brief Create historyState-object
263 * @param parent parent ID no.(c-wrapper local ID)
264 * @param name historyState-object name (Option)
265 * @param value historyState-object ID no.
266 * @return not 0:historyState-object ID no.(c-wrapper local ID)
269 extern "C" int ico_sttm_createHState(int parent, const char* name, int value,
272 sttmerr = STTMNOERROR;
273 const char* sname = supplementName(name);
274 CicoStateCore* cscParent = getID2ObjSTT(parent); // ID to state-object
275 if ((CicoStateCore*)0 == cscParent) {
276 sttmerr = STTMNOTFIND;
277 _DBG("ico_sttm_createHState >>%d<<, \"%s\", %d, %d", parent, sname, value, (int)typ);
280 CicoHistoryState* chs = (CicoHistoryState*)0;
281 if (cscParent->isStateMachine()) {
282 chs = new CicoHistoryState(sname, value, (CicoStateMachine*)cscParent);
284 else if (cscParent->isState()) {
285 chs = new CicoHistoryState(sname, value, (CicoState*)cscParent);
287 if ((CicoHistoryState*)0 == chs) {
288 sttmerr = STTMNEWERR;
289 _ERR("ico_sttm_createHState >>%d(%s:%d:%d)<<, \"%s\", %d, %d",
290 parent, cscParent->getName().c_str(), cscParent->getValue(),
291 (int)cscParent->getType(), sname, value, (int)typ);
294 if (E_SHALLOW == typ) {
295 chs->setHistoryType(CicoHistoryState::Shallow);
297 else if (E_DEEP == typ) {
298 chs->setHistoryType(CicoHistoryState::Deep);
301 sttmerr = STTMPARAMERR;
302 _DBG("ico_sttm_createHState %d(%s:%d:%d), \"%s\", %d,>>%d<<",
303 parent, cscParent->getName().c_str(), cscParent->getValue(),
304 (int)cscParent->getType(), sname, value, (int)typ);
308 stateObjects.push_back((CicoStateCore*)chs);
309 return stateObjects.size();
313 * @brief Create finalState-object
314 * @param parent parent ID no.(c-wrapper local ID)
315 * @param name finalState-object name (Option)
316 * @param value finalState-object ID no.
317 * @return not 0:finalState-object ID no.(c-wrapper local ID)
320 extern "C" int ico_sttm_createFState(int parent, const char* name, int value)
322 sttmerr = STTMNOERROR;
323 const char* sname = supplementName(name);
324 CicoStateCore* cscParent = getID2ObjSTT(parent); // ID to state-object
325 if ((CicoStateCore*)0 == cscParent) {
326 sttmerr = STTMNOTFIND;
327 _DBG("ico_sttm_createFState >>%d<<, \"%s\", %d", parent, sname, value);
330 CicoFinalState* cfs = (CicoFinalState*)0;
331 if (cscParent->isStateMachine()) {
332 cfs = new CicoFinalState(sname, value, (CicoStateMachine*)cscParent);
334 else if (cscParent->isState()) {
335 cfs = new CicoFinalState(sname, value, (CicoState*)cscParent);
337 if ((CicoFinalState*)0 == cfs) {
338 sttmerr = STTMNEWERR;
339 _ERR("ico_sttm_createFState >>%d(%s:%d:%d)<<, \"%s\", %d",
340 parent, cscParent->getName().c_str(), cscParent->getValue(),
341 (int)cscParent->getType(), sname, value);
344 stateObjects.push_back((CicoStateCore*)cfs);
345 return stateObjects.size();
349 * @brief Registration of transition events
350 * @param sCWId ID no. to be registered(c-wrapper local ID)
351 * @param trCWId of transition destination(c-wrapper local ID)
352 * @param evi Registration event
353 * @param fname function name of the caller
354 * @return not 0:ID no. of the event to register(c-wrapper local ID)
357 int ico_sttm_addTransitionX(int sCWId, int trCWId, CicoEventInfo& evi,
360 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
361 if ((CicoStateCore*)0 == cscTarget) {
362 sttmerr = STTMNOTFIND;
363 _DBG("%s >>%d<<, \"%s\", %d, ..., %d",
364 fname, sCWId, evi.getName().c_str(), (int)evi.getEV(),
368 CicoStateCore* cscTrans = getID2ObjSTT(trCWId); // ID to state-object
369 if ((CicoStateCore*)0 == cscTrans) {
370 sttmerr = STTMNOTFIND;
371 _DBG("%s %d, \"%s\", %d, ...,>>%d<<",
372 fname, sCWId, evi.getName().c_str(), (int)evi.getEV(),
376 if (false == cscTarget->isState()) {
377 sttmerr = STTMTYPEMISMATCH;
378 _DBG("%s >>%d(%s:%d:%d)<<, \"%s\", %d, ..., %d",
379 fname, sCWId, cscTarget->getName().c_str(),
380 cscTarget->getValue(), (int)cscTarget->getType(),
381 evi.getName().c_str(), (int)evi.getEV(), trCWId);
384 CicoState* csTgt = (CicoState*)cscTarget;
385 if (true == cscTrans->isState()) {
386 csTgt->addTransition(evi, (CicoState*)cscTrans);
388 else if (true == cscTrans->isFinalState()) {
389 csTgt->addTransition(evi, (CicoFinalState*)cscTrans);
391 else if (true == cscTrans->isHistoryState()) {
392 csTgt->addTransition(evi, (CicoHistoryState*)cscTrans);
395 sttmerr = STTMTYPEMISMATCH;
396 _DBG("%s %d, \"%s\", %d, ...,>>%d(%s:%d:%d)<<",
397 fname, sCWId, evi.getName().c_str(), (int)evi.getEV(),
398 trCWId, cscTarget->getName().c_str(),
399 cscTarget->getValue(), (int)cscTarget->getType());
402 const CicoEventInfo* t = csTgt->getEventInfo(evi.getName(), evi.getEV());
403 evInfObjects.push_back((CicoEventInfo*)t);
404 return evInfObjects.size();
408 * @brief Registration of transition events
409 * @param sCWId ID no. to be registered(c-wrapper local ID)
410 * @param name event name
411 * @param ev event no.(Use the 1000-65535)
412 * @param trCWId of transition destination(c-wrapper local ID)
413 * @return not 0:ID no. of the event to register(c-wrapper local ID)
416 extern "C" int ico_sttm_addTransition(int sCWId,
417 const char* evname, unsigned short ev,
420 sttmerr = STTMNOERROR;
421 const char* sname = supplementName(evname);
422 CicoEventInfo evi(sname, ev);
423 int r = ico_sttm_addTransitionX(sCWId, trCWId, evi, "ico_sttm_addTransition");
429 * @brief Registration of transition events
430 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
431 * @param value value is state-object identification number
432 * @param name state-object Identification name
433 * @param evname event name
434 * @param ev event no.(Use the 1000-65535)
435 * @param trVal state-object identification value destination
436 * @param namTrns state-object Identification name destination
437 * @return not 0:ID no. of the event to register(c-wrapper local ID)
440 extern "C" int ico_sttm_addTransition_V_(int smCWId, int value,
441 const char* evname, unsigned short ev,
444 sttmerr = STTMNOERROR;
445 int id = ico_sttm_retrieveSVal(smCWId, value);
447 sttmerr = STTMNOTFIND;
448 _DBG("ico_sttm_addTransition_VV >>%d<<,>>%d<<, %s,%d, %d", smCWId,
449 value, evname, ev, trCWId);
452 return ico_sttm_addTransition(id, evname, ev, trCWId);
455 extern "C" int ico_sttm_addTransition_VV(int smCWId, int value,
456 const char* evname, unsigned short ev,
459 sttmerr = STTMNOERROR;
460 int idT = ico_sttm_retrieveSVal(smCWId, trVal);
462 sttmerr = STTMNOTFIND;
463 _DBG("ico_sttm_addTransition_VV >>%d<<, %d, %s,%d,>>%d<<", smCWId,
464 value, evname, ev, trVal);
467 return ico_sttm_addTransition_V_(smCWId, value, evname, ev, idT);
470 extern "C" int ico_sttm_addTransitionVVV(int smVal, int value,
471 const char* evname, unsigned short ev,
474 sttmerr = STTMNOERROR;
475 int id = ico_sttm_retrieveMVal(smVal);
477 sttmerr = STTMNOTFIND;
478 _DBG("ico_sttm_addTransitionVVV >>%d<<, %d, %s,%d, %d", smVal,
479 value, evname, ev, trVal);
482 return ico_sttm_addTransition_VV(id, value, evname, ev, trVal);
485 extern "C" int ico_sttm_addTransition_N_(int smCWId, const char* name,
486 const char* evname, unsigned short ev,
489 sttmerr = STTMNOERROR;
490 int id = ico_sttm_retrivevSName(smCWId, name);
492 sttmerr = STTMNOTFIND;
493 _DBG("ico_sttm_addTransitionVVV >>%d<<,>>%s<<, %s,%d,%d", smCWId,
494 name, evname, ev, trCWId);
497 return ico_sttm_addTransition(id, evname, ev, trCWId);
501 extern "C" int ico_sttm_addTransition_NN(int smCWId, const char* name,
502 const char* evname, unsigned short ev,
505 sttmerr = STTMNOERROR;
506 int idT = ico_sttm_retrivevSName(smCWId, trNm);
508 sttmerr = STTMNOTFIND;
509 _DBG("ico_sttm_addTransitionVVV >>%d<<, %s, %s,%d,>>%s<<", smCWId,
510 name, evname, ev, trNm);
513 return ico_sttm_addTransition_N_(smCWId, name, evname, ev, idT);
516 extern "C" int ico_sttm_addTransitionNNN(const char* smNm, const char* name,
517 const char* evname, unsigned short ev,
520 int id = ico_sttm_retrieveMName(smNm);
522 sttmerr = STTMNOTFIND;
523 _DBG("ico_sttm_addTransitionNNN >>%s<<, %s, %s, %d, %s", smNm,
524 name, evname, ev, trNm);
527 return ico_sttm_addTransition_NN(id, name, evname, ev, trNm);
531 * @brief Registration of transition events
532 * @param sCWId ID no. to be registered(c-wrapper local ID)
533 * @param name event name
534 * @param ev event no.(Use the 1000-65535)
535 * @param gce operator of guard condition
536 * @param gcv Comparison value of guard condition
537 * @param trCWId destination(c-wrapper local ID)
538 * @return not 0:ID no. of the event to register(c-wrapper local event-ID)
541 extern "C" int ico_sttm_addTransitionGCI(int sCWId,
542 const char* evname, unsigned short ev,
543 GC_OP_KIND_E gce, int gcv, int trCWId)
545 sttmerr = STTMNOERROR;
546 const char* sname = supplementName(evname);
547 CicoEventInfo evi(sname, ev, GCOpKind[gce], gcv);
548 int r = ico_sttm_addTransitionX(sCWId, trCWId, evi, "ico_sttm_addTransitionGCI");
552 extern "C" int ico_sttm_addTransitionGCD(int sCWId,
553 const char* evname, unsigned short ev,
554 GC_OP_KIND_E gce, double gcv,
557 sttmerr = STTMNOERROR;
558 const char* sname = supplementName(evname);
559 CicoEventInfo evi(sname, ev, GCOpKind[gce], gcv);
560 int r = ico_sttm_addTransitionX(sCWId, trCWId, evi, "ico_sttm_addTransitionGCD");
564 extern "C" int ico_sttm_addTransitionGCS(int sCWId,
565 const char* evname, unsigned short ev,
566 GC_OP_KIND_E gce, const char* gcv,
569 sttmerr = STTMNOERROR;
570 const char* sname = supplementName(evname);
571 CicoEventInfo evi(sname, ev, GCOpKind[gce], gcv);
572 int r = ico_sttm_addTransitionX(sCWId, trCWId, evi, "ico_sttm_addTransitionGCS");
578 * @brief Registration of transition events
579 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
580 * @param value value is state-object identification number
581 * @param evname event name
582 * @param ev event no.(Use the 1000-65535)
583 * @param gce operator of guard condition
584 * @param gcv Comparison value of guard condition
585 * @param trCWId destination(c-wrapper local ID)
586 * @return not 0:ID no. of the event to register(c-wrapper local event-ID)
589 extern "C" int ico_sttm_addTransGCI_V_(int smCWId, int value,
590 const char* evname, unsigned short ev,
591 GC_OP_KIND_E gce, int gcv,
595 sttmerr = STTMNOERROR;
596 int id = ico_sttm_retrieveSVal(smCWId, value);
598 sttmerr = STTMNOTFIND;
599 _ERR("ico_sttm_addTransGCI_V_ >>%d<<,>>%d<<, %s, %d, %d, %d, %d",
600 smCWId, value, evname, ev, (int)gce, gcv, trCWId);
603 return ico_sttm_addTransitionGCI(id, evname, ev, gce, gcv, trCWId);
606 extern "C" int ico_sttm_addTransGCD_V_(int smCWId, int value,
607 const char* evname, unsigned short ev,
608 GC_OP_KIND_E gce, double gcv,
611 sttmerr = STTMNOERROR;
612 int id = ico_sttm_retrieveSVal(smCWId, value);
614 sttmerr = STTMNOTFIND;
615 _ERR("ico_sttm_addTransGCD_V_ >>%d<<,>>%d<<, %s, %d, %d, %f, %d",
616 smCWId, value, evname, ev, (int)gce, gcv, trCWId);
619 return ico_sttm_addTransitionGCD(id, evname, ev, gce, gcv, trCWId);
622 extern "C" int ico_sttm_addTransGCS_V_(int smCWId, int value,
623 const char* evname, unsigned short ev,
624 GC_OP_KIND_E gce, const char* gcv,
627 sttmerr = STTMNOERROR;
628 int id = ico_sttm_retrieveSVal(smCWId, value);
630 sttmerr = STTMNOTFIND;
631 _ERR("ico_sttm_addTransGCD_V_ >>%d<<,>>%d<<, %s, %d, %d, %s, %d",
632 smCWId, value, evname, ev, (int)gce, gcv, trCWId);
635 return ico_sttm_addTransitionGCS(id, evname, ev, gce, gcv, trCWId);
639 * @brief Registration of transition events
640 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
641 * @param value value is state-object identification number
642 * @param evname event name
643 * @param ev event no.(Use the 1000-65535)
644 * @param gce operator of guard condition
645 * @param gcv Comparison value of guard condition
646 * @param trVl value is state-object identification number transition, destination
647 * @return not 0:ID no. of the event to register(c-wrapper local event-ID)
650 extern "C" int ico_sttm_addTransGCI_VV(int smCWId, int value,
651 const char* evname, unsigned short ev,
652 GC_OP_KIND_E gce, int gcv,
655 sttmerr = STTMNOERROR;
656 int idT = ico_sttm_retrieveSVal(smCWId, trVl);
658 sttmerr = STTMNOTFIND;
659 _ERR("ico_sttm_addTransGCI_VV >>%d<<, %d, %s, %d, %d, %d,>>%d<<",
660 smCWId, value, evname, ev, (int)gce, gcv, trVl);
663 return ico_sttm_addTransGCI_V_(smCWId, value, evname, ev, gce, gcv, idT);
666 extern "C" int ico_sttm_addTransGCD_VV(int smCWId, int value,
667 const char* evname, unsigned short ev,
668 GC_OP_KIND_E gce, double gcv,
671 sttmerr = STTMNOERROR;
672 int idT = ico_sttm_retrieveSVal(smCWId, trVl);
674 sttmerr = STTMNOTFIND;
675 _ERR("ico_sttm_addTransGCD_VV >>%d<<, %d, %s, %d, %d, %f,>>%d<<",
676 smCWId, value, evname, ev, (int)gce, gcv, trVl);
679 return ico_sttm_addTransGCD_V_(smCWId, value, evname, ev, gce, gcv, idT);
682 extern "C" int ico_sttm_addTransGCS_VV(int smCWId, int value,
683 const char* evname, unsigned short ev,
684 GC_OP_KIND_E gce, const char* gcv,
687 sttmerr = STTMNOERROR;
688 int idT = ico_sttm_retrieveSVal(smCWId, trVl);
690 sttmerr = STTMNOTFIND;
691 _ERR("ico_sttm_addTransGCS_VV >>%d<<, %d, %s, %d, %d, %s,>>%d<<",
692 smCWId, value, evname, ev, (int)gce, gcv, trVl);
695 return ico_sttm_addTransGCS_V_(smCWId, value, evname, ev, gce, gcv, idT);
700 extern "C" int ico_sttm_addTransGCIVVV(int smVal, int value,
701 const char* evname, unsigned short ev,
702 GC_OP_KIND_E gce, int gcv,
705 sttmerr = STTMNOERROR;
706 int id = ico_sttm_retrieveMVal(smVal);
708 sttmerr = STTMNOTFIND;
709 _DBG("ico_sttm_addTransGCIVVV >>%d<<, %d, %s, %d, %d, %d, %d", smVal,
710 value, evname, ev, gce, gcv, trVl);
713 return ico_sttm_addTransGCI_VV(id, value, evname, ev, gce, gcv, trVl);
716 extern "C" int ico_sttm_addTransGCDVVV(int smVal, int value,
717 const char* evname, unsigned short ev,
718 GC_OP_KIND_E gce, double gcv,
721 sttmerr = STTMNOERROR;
722 int id = ico_sttm_retrieveMVal(smVal);
724 sttmerr = STTMNOTFIND;
725 _DBG("ico_sttm_addTransGCIVVV >>%d<<, %d, %s, %d, %d, %f, %d", smVal,
726 value, evname, ev, gce, gcv, trVl);
729 return ico_sttm_addTransGCD_VV(id, value, evname, ev, gce, gcv, trVl);
732 extern "C" int ico_sttm_addTransGCSVVV(int smVal, int value,
733 const char* evname, unsigned short ev,
734 GC_OP_KIND_E gce, const char* gcv,
737 sttmerr = STTMNOERROR;
738 int id = ico_sttm_retrieveMVal(smVal);
740 sttmerr = STTMNOTFIND;
741 _DBG("ico_sttm_addTransGCSVVV >>%d<<, %d, %s, %d, %d, %s, %d", smVal,
742 value, evname, ev, gce, gcv, trVl);
745 return ico_sttm_addTransGCS_VV(id, value, evname, ev, gce, gcv, trVl);
749 * @brief Registration of transition events
750 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
751 * @param name name is state-object Identification name
752 * @param evname event name
753 * @param ev event no.(Use the 1000-65535)
754 * @param gce operator of guard condition
755 * @param gcv Comparison value of guard condition
756 * @param transition destination(c-wrapper local ID)
757 * @return not 0:ID no. of the event to register(c-wrapper local event-ID)
760 extern "C" int ico_sttm_addTransGCI_N_(int smCWId, const char* name,
761 const char* evname, unsigned short ev,
762 GC_OP_KIND_E gce, int gcv,
765 sttmerr = STTMNOERROR;
766 int id = ico_sttm_retrivevSName(smCWId, name);
768 sttmerr = STTMNOTFIND;
769 _DBG("ico_sttm_addTransGCI_N_ >>%d<<, %s, %s, %d, %d, %d, %d", smCWId,
770 name, evname, ev, gce, gcv, trCWId);
773 return ico_sttm_addTransitionGCI(id, evname, ev, gce, gcv, trCWId);
776 extern "C" int ico_sttm_addTransGCD_N_(int smCWId, const char* name,
777 const char* evname, unsigned short ev,
778 GC_OP_KIND_E gce, double gcv,
781 sttmerr = STTMNOERROR;
782 int id = ico_sttm_retrivevSName(smCWId, name);
784 sttmerr = STTMNOTFIND;
785 _DBG("ico_sttm_addTransGCD_N_ >>%d<<, %s, %s, %d, %d, %f, %d", smCWId,
786 name, evname, ev, gce, gcv, trCWId);
789 return ico_sttm_addTransitionGCD(id, evname, ev, gce, gcv, trCWId);
792 extern "C" int ico_sttm_addTransGCS_N_(int smCWId, const char* name,
793 const char* evname, unsigned short ev,
794 GC_OP_KIND_E gce, const char* gcv,
797 sttmerr = STTMNOERROR;
798 int id = ico_sttm_retrivevSName(smCWId, name);
800 sttmerr = STTMNOTFIND;
801 _DBG("ico_sttm_addTransGCD_N_ >>%d<<, %s, %s, %d, %d, %s, %d", smCWId,
802 name, evname, ev, gce, gcv, trCWId);
805 return ico_sttm_addTransitionGCS(id, evname, ev, gce, gcv, trCWId);
809 * @brief Registration of transition events
810 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
811 * @param name name is state-object Identification name
812 * @param evname event name
813 * @param ev event no.(Use the 1000-65535)
814 * @param gce operator of guard condition
815 * @param gcv Comparison value of guard condition
816 * @param trNm name is state-object Identification name destination
817 * @return not 0:ID no. of the event to register(c-wrapper local event-ID)
820 extern "C" int ico_sttm_addTransGCI_NN(int smCWId, const char* name,
821 const char* evname, unsigned short ev,
822 GC_OP_KIND_E gce, int gcv,
825 sttmerr = STTMNOERROR;
826 int idT = ico_sttm_retrivevSName(smCWId, trNm);
828 sttmerr = STTMNOTFIND;
829 _DBG("ico_sttm_addTransGCI_NN >>%d<<, %s, %s, %d, %d, %d,>>%s<<", smCWId,
830 name, evname, ev, gce, gcv, trNm);
833 return ico_sttm_addTransGCI_N_(smCWId, name, evname, ev, gce, gcv, idT);
836 extern "C" int ico_sttm_addTransGCD_NN(int smCWId, const char* name,
837 const char* evname, unsigned short ev,
838 GC_OP_KIND_E gce, double gcv,
841 sttmerr = STTMNOERROR;
842 int idT = ico_sttm_retrivevSName(smCWId, trNm);
844 sttmerr = STTMNOTFIND;
845 _DBG("ico_sttm_addTransGCD_NN >>%d<<, %s, %s, %d, %d, %f,>>%s<<", smCWId,
846 name, evname, ev, gce, gcv, trNm);
849 return ico_sttm_addTransGCD_N_(smCWId, name, evname, ev, gce, gcv, idT);
852 extern "C" int ico_sttm_addTransGCS_NN(int smCWId, const char* name,
853 const char* evname, unsigned short ev,
854 GC_OP_KIND_E gce, const char* gcv,
857 sttmerr = STTMNOERROR;
858 int idT = ico_sttm_retrivevSName(smCWId, trNm);
860 sttmerr = STTMNOTFIND;
861 _DBG("ico_sttm_addTransGCS_NN >>%d<<, %s, %s, %d, %d, %s,>>%s<<", smCWId,
862 name, evname, ev, gce, gcv, trNm);
865 return ico_sttm_addTransGCS_N_(smCWId, name, evname, ev, gce, gcv, idT);
868 extern "C" int ico_sttm_addTransGCINNN(const char* smNm, const char* name,
869 const char* evname, unsigned short ev,
870 GC_OP_KIND_E gce, int gcv,
873 sttmerr = STTMNOERROR;
874 int id = ico_sttm_retrieveMName(smNm);
876 _DBG("ico_sttm_addTransGCINNN >>%s<<, %s, %s, %d, %d, %d, %s", smNm,
877 name, evname, ev, gce, gcv, trNm);
880 return ico_sttm_addTransGCI_NN(id, name, evname, ev, gce, gcv, trNm);
883 extern "C" int ico_sttm_addTransGCDNNN(const char* smNm, const char* name,
884 const char* evname, unsigned short ev,
885 GC_OP_KIND_E gce, double gcv,
888 sttmerr = STTMNOERROR;
889 int id = ico_sttm_retrieveMName(smNm);
891 _DBG("ico_sttm_addTransGCDNNN >>%s<<, %s, %s, %d, %d, %f, %s", smNm,
892 name, evname, ev, gce, gcv, trNm);
895 return ico_sttm_addTransGCD_NN(id, name, evname, ev, gce, gcv, trNm);
898 extern "C" int ico_sttm_addTransGCSNNN(const char* smNm, const char* name,
899 const char* evname, unsigned short ev,
900 GC_OP_KIND_E gce, const char* gcv,
903 sttmerr = STTMNOERROR;
904 int id = ico_sttm_retrieveMName(smNm);
906 _DBG("ico_sttm_addTransGCSNNN >>%s<<, %s, %s, %d, %d, %s, %s", smNm,
907 name, evname, ev, gce, gcv, trNm);
910 return ico_sttm_addTransGCS_NN(id, name, evname, ev, gce, gcv, trNm);
915 * @brief add guard condition
916 * @param evi register target
917 * @param j logical operator
918 * @param gce operator of guard condition
919 * @param gcv Comparison value of guard condition
920 * @return true:Success
921 * @ false:added failure
923 bool addGC(CicoEventInfo* evi, GC_JOIN_E j, GC_OP_KIND_E gce, int gcv)
926 return evi->addAndGurdCondition(GCOpKind[gce], gcv);
928 else if (E_GC_OR == j) {
929 return evi->addOrGurdCondition(GCOpKind[gce], gcv);
935 bool addGC(CicoEventInfo* evi, GC_JOIN_E j, GC_OP_KIND_E gce, double gcv)
938 return evi->addAndGurdCondition(GCOpKind[gce], gcv);
940 else if (E_GC_OR == j) {
941 return evi->addOrGurdCondition(GCOpKind[gce], gcv);
947 bool addGC(CicoEventInfo* evi, GC_JOIN_E j, GC_OP_KIND_E gce, const char* gcv)
950 return evi->addAndGurdCondition(GCOpKind[gce], gcv);
952 else if (E_GC_OR == j) {
953 return evi->addOrGurdCondition(GCOpKind[gce], gcv);
959 * @brief add guard condition
960 * @param evId ID no. to be registered(c-wrapper local event-ID)
961 * @param j logical operator
962 * @param gce operator of guard condition
963 * @param gcv Comparison value of guard condition
964 * @return not 0:Success
967 extern "C" int ico_sttm_addGCI(int evId, GC_JOIN_E j, GC_OP_KIND_E gce, int gcv)
969 sttmerr = STTMNOERROR;
970 CicoEventInfo* eviTarget = getID2ObjEV(evId);
971 if ((CicoEventInfo*)0 == eviTarget) {
972 sttmerr = STTMEVNOTFIND;
973 _DBG("ico_sttm_addGCI >>%d<<,%d, %d, %d",evId, (int)j, (int)gce, gcv);
976 if (false == addGC(eviTarget, j, gce, gcv)) {
977 sttmerr = STTMPARAMERR;
978 _DBG("ico_sttm_addGCI ,>>%d<<, %d, %d, %d",evId, (int)j, (int)gce, gcv);
983 extern "C" int ico_sttm_addGCD(int evId, GC_JOIN_E j, GC_OP_KIND_E gce, double gcv)
985 sttmerr = STTMNOERROR;
986 CicoEventInfo* eviTarget = getID2ObjEV(evId);
987 if ((CicoEventInfo*)0 == eviTarget) {
988 sttmerr = STTMEVNOTFIND;
989 _DBG("ico_sttm_addGCD >>%d<<,%d, %d, %f",evId, (int)j, (int)gce, gcv);
992 if (false == addGC(eviTarget, j, gce, gcv)) {
993 sttmerr = STTMPARAMERR;
994 _DBG("ico_sttm_addGCD %d,>>%d<<, %d, %f",evId, (int)j, (int)gce, gcv);
1000 extern "C" int ico_sttm_addGCS(int evId, GC_JOIN_E j, GC_OP_KIND_E gce,
1003 sttmerr = STTMNOERROR;
1004 if ((char*)0==gcv) {
1005 sttmerr = STTMEVNOTFIND;
1006 _DBG("ico_sttm_addGCS %d,%d, %d,>>nill<<",evId, (int)j, (int)gce);
1009 CicoEventInfo* eviTarget = getID2ObjEV(evId);
1010 if ((CicoEventInfo*)0 == eviTarget) {
1011 sttmerr = STTMNOTFIND;
1012 _DBG("ico_sttm_addGCS >>%d<<,%d, %d, \"%s\"",evId, (int)j, (int)gce,
1016 if (false == addGC(eviTarget, j, gce, gcv)) {
1017 sttmerr = STTMPARAMERR;
1018 _DBG("ico_sttm_addGCS %d,>>%d<<, %d, \"%s\"",evId, (int)j, (int)gce, gcv);
1025 * @brief ico_sttm_getStateMachineX
1026 * @param smCWId stateMachine-object ID
1027 * @param fname calling function Name
1028 * @return not 0:get success 0:get fail
1030 CicoStateMachine* ico_sttm_getStateMachineX(int smCWId, const char* fname)
1032 CicoStateCore* cscTarget = getID2ObjSTT(smCWId); // ID to state-object
1033 if ((CicoStateCore*)0 == cscTarget) {
1034 sttmerr = STTMNOTFIND;
1035 _DBG("%s >>%d<<",fname, smCWId);
1036 return (CicoStateMachine*)0;
1038 if (false == cscTarget->isStateMachine()) {
1039 sttmerr = STTMTYPEMISMATCH;
1040 _DBG("%s >>%d(%s:%d:%d)<<", fname, smCWId,
1041 cscTarget->getName().c_str(), cscTarget->getValue(),
1042 (int)cscTarget->getType());
1043 return (CicoStateMachine*)0;
1045 return (CicoStateMachine*)cscTarget;
1049 * @brief add guard condition
1050 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
1051 * @param evname event name
1052 * @param ev event no.(Use the 1000-65535)
1053 * @param j logical operator
1054 * @param gce operator of guard condition
1055 * @param gcv Comparison value of guard condition
1056 * @return not 0:Success
1060 CicoStateCore* getStateObject(int smCWId, int value, const char* fnc)
1062 CicoStateMachine* csm;
1063 csm = ico_sttm_getStateMachineX(smCWId, fnc);
1064 if ((CicoStateMachine*)0 == csm) {
1065 sttmerr = STTMNOTFIND;
1066 _DBG("%s>>%d<<, %d", fnc, smCWId, value);
1069 const CicoStateCore* csc = csm->getState(value);
1070 if ((CicoStateCore*)0 == csc) {
1071 sttmerr = STTMPARAMERR;
1072 _DBG("%s %d,>>%d<<", fnc, smCWId, value);
1075 return (CicoStateCore*)csc;
1079 CicoStateCore* getStateObject(int smCWId, const char* name, const char* fnc)
1081 CicoStateMachine* csm;
1082 csm = ico_sttm_getStateMachineX(smCWId, fnc);
1083 if ((CicoStateMachine*)0 == csm) {
1084 sttmerr = STTMNOTFIND;
1085 _DBG("%s>>%d<<, %s", fnc, smCWId, name);
1088 const CicoStateCore* csc = csm->getState(name);
1089 if ((CicoStateCore*)0 == csc) {
1090 sttmerr = STTMPARAMERR;
1091 _DBG("%s %d,>>%s<<", fnc, smCWId, name);
1094 return (CicoStateCore*)csc;
1098 CicoEventInfo* getEventInfoV(int smCWId, int value,
1099 const char* evname, unsigned short ev,
1103 csc = getStateObject(smCWId, value, fnc);
1104 if ((CicoStateCore*)0 == csc) {
1107 const CicoEventInfo* t = csc->getEventInfo(evname, ev);
1108 if ((CicoEventInfo*)0 == t) {
1109 sttmerr = STTMPARAMERR;
1110 _DBG("%s %d, %d,>>%s, %d<<", fnc, smCWId, value, evname, ev);
1113 return (CicoEventInfo*)t;
1117 CicoEventInfo* getEventInfoN(int smCWId, const char* name,
1118 const char* evname, unsigned short ev,
1122 csc = getStateObject(smCWId, name, fnc);
1123 if ((CicoStateCore*)0 == csc) {
1126 const CicoEventInfo* t = csc->getEventInfo(evname, ev);
1127 if ((CicoEventInfo*)0 == t) {
1128 sttmerr = STTMPARAMERR;
1129 _DBG("%s %d, %s,>>%s, %d<<", fnc, smCWId, name, evname, ev);
1132 return (CicoEventInfo*)t;
1137 * @brief add guard condition
1138 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
1139 * @param value value is state-object identification number
1140 * @param evname event name
1141 * @param ev event no.(Use the 1000-65535)
1142 * @param j logical operator
1143 * @param gce operator of guard condition
1144 * @param gcv Comparison value of guard condition
1145 * @return not 0:Success
1148 extern "C" int ico_sttm_addGCI_V(int smCWId, int value,
1149 const char* evname, unsigned short ev,
1150 GC_JOIN_E j, GC_OP_KIND_E gc, int gcv)
1152 sttmerr = STTMNOERROR;
1153 const char* fnc = "ico_sttm_addGCI_V";
1155 t = getEventInfoV(smCWId, value, evname, ev, fnc);
1156 if ((CicoEventInfo*)0 == t) {
1159 if (false == addGC(t, j, gc, gcv)) {
1160 sttmerr = STTMPARAMERR;
1161 _DBG("%s %d, %d, %s, %d, >> %d, %d, %d<<", fnc, smCWId, value,
1162 evname, ev, (int)j, (int)gc, gcv);
1169 extern "C" int ico_sttm_addGCD_V(int smCWId, int value,
1170 const char* evname, unsigned short ev,
1171 GC_JOIN_E j, GC_OP_KIND_E gc, double gcv)
1173 sttmerr = STTMNOERROR;
1174 const char* fnc = "ico_sttm_addGCD_V";
1176 t = getEventInfoV(smCWId, value, evname, ev, fnc);
1177 if ((CicoEventInfo*)0 == t) {
1180 if (false == addGC(t, j, gc, gcv)) {
1181 sttmerr = STTMPARAMERR;
1182 _DBG("%s %d, %d, %s, %d, >> %d, %d, %f<<", fnc, smCWId, value,
1183 evname, ev, (int)j, (int)gc, gcv);
1189 extern "C" int ico_sttm_addGCS_V(int smCWId, int value,
1190 const char* evname, unsigned short ev,
1191 GC_JOIN_E j, GC_OP_KIND_E gc, const char* gcv)
1193 sttmerr = STTMNOERROR;
1194 const char* fnc = "ico_sttm_addGCS_V";
1196 t = getEventInfoV(smCWId, value, evname, ev, fnc);
1197 if ((CicoEventInfo*)0 == t) {
1200 if (false == addGC(t, j, gc, gcv)) {
1201 sttmerr = STTMPARAMERR;
1202 _DBG("%s %d, %d, %s, %d, >> %d, %d, %s<<", fnc, smCWId, value,
1203 evname, ev, (int)j, (int)gc, gcv);
1210 * @brief add guard condition
1211 * @param smVal value is stateMachine-object identification number
1212 * @param value value is state-object identification number
1213 * @param evname event name
1214 * @param ev event no.(Use the 1000-65535)
1215 * @param j logical operator
1216 * @param gce operator of guard condition
1217 * @param gcv Comparison value of guard condition
1218 * @return not 0:Success
1221 extern "C" int ico_sttm_addGCIVV(int smVal, int value,
1222 const char* evname, unsigned short ev,
1223 GC_JOIN_E j, GC_OP_KIND_E gc, int gcv)
1225 sttmerr = STTMNOERROR;
1226 int id = ico_sttm_retrieveMVal(smVal);
1228 sttmerr = STTMNOTFIND;
1229 _DBG("ico_sttm_addGCIVV >>%d<<, %d, %s, %d, %d, %d, %d", smVal,
1230 value, evname, ev, j, gc, gcv);
1233 return ico_sttm_addGCI_V(id, value, evname, ev, j, gc, gcv);
1236 extern "C" int ico_sttm_addGCDVV(int smVal, int value,
1237 const char* evname, unsigned short ev,
1238 GC_JOIN_E j, GC_OP_KIND_E gc, double gcv)
1240 sttmerr = STTMNOERROR;
1241 int id = ico_sttm_retrieveMVal(smVal);
1243 sttmerr = STTMNOTFIND;
1244 _DBG("ico_sttm_addGCDVV >>%d<<, %d, %s, %d, %d, %d, %f", smVal,
1245 value, evname, ev, j, gc, gcv);
1248 return ico_sttm_addGCD_V(id, value, evname, ev, j, gc, gcv);
1251 extern "C" int ico_sttm_addGCSVV(int smVal, int value,
1252 const char* evname, unsigned short ev,
1253 GC_JOIN_E j, GC_OP_KIND_E gc, const char* gcv)
1255 sttmerr = STTMNOERROR;
1256 int id = ico_sttm_retrieveMVal(smVal);
1258 sttmerr = STTMNOTFIND;
1259 _DBG("ico_sttm_addGCSVV >>%d<<, %d, %s, %d, %d, %d, %s", smVal,
1260 value, evname, ev, j, gc, gcv);
1263 return ico_sttm_addGCS_V(id, value, evname, ev, j, gc, gcv);
1268 * @brief add guard condition
1269 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
1270 * @param name name is state-object Identification name
1271 * @param evname event name
1272 * @param ev event no.(Use the 1000-65535)
1273 * @param j logical operator
1274 * @param gce operator of guard condition
1275 * @param gcv Comparison value of guard condition
1276 * @return not 0:Success
1279 extern "C" int ico_sttm_addGCI_N(int smCWId, const char* name,
1280 const char* evname, unsigned short ev,
1281 GC_JOIN_E j, GC_OP_KIND_E gc, int gcv)
1283 sttmerr = STTMNOERROR;
1284 const char* fnc = "ico_sttm_addGCI_N";
1286 t = getEventInfoN(smCWId, name, evname, ev, fnc);
1287 if ((CicoEventInfo*)0 == t) {
1290 if (false == addGC(t, j, gc, gcv)) {
1291 sttmerr = STTMPARAMERR;
1292 _DBG("%s %d, %s, %s, %d, >> %d, %d, %d<<", fnc, smCWId, name,
1293 evname, ev, (int)j, (int)gc, gcv);
1299 extern "C" int ico_sttm_addGCD_N(int smCWId, const char* name,
1300 const char* evname, unsigned short ev,
1301 GC_JOIN_E j, GC_OP_KIND_E gc, double gcv)
1303 sttmerr = STTMNOERROR;
1304 const char* fnc = "ico_sttm_addGCD_N";
1306 t = getEventInfoN(smCWId, name, evname, ev, fnc);
1307 if ((CicoEventInfo*)0 == t) {
1310 if (false == addGC(t, j, gc, gcv)) {
1311 sttmerr = STTMPARAMERR;
1312 _DBG("%s %d, %s, %s, %d, >> %d, %d, %f<<", fnc, smCWId, name,
1313 evname, ev, (int)j, (int)gc, gcv);
1320 extern "C" int ico_sttm_addGCS_N(int smCWId, const char* name,
1321 const char* evname, unsigned short ev,
1322 GC_JOIN_E j, GC_OP_KIND_E gc, const char* gcv)
1324 sttmerr = STTMNOERROR;
1325 const char* fnc = "ico_sttm_addGCS_N";
1327 t = getEventInfoN(smCWId, name, evname, ev, fnc);
1328 if ((CicoEventInfo*)0 == t) {
1331 if (false == addGC(t, j, gc, gcv)) {
1332 sttmerr = STTMPARAMERR;
1333 _DBG("%s %d, %s, %s, %d, >> %d, %d, %s<<", fnc, smCWId, name,
1334 evname, ev, (int)j, (int)gc, gcv);
1341 * @brief add guard condition
1342 * @param smNm stateMachine-object Identification name
1343 * @param name name is state-object Identification name
1344 * @param evname event name
1345 * @param ev event no.(Use the 1000-65535)
1346 * @param j logical operator
1347 * @param gce operator of guard condition
1348 * @param gcv Comparison value of guard condition
1349 * @return not 0:Success
1352 extern "C" int ico_sttm_addGCINN(const char* smNm, const char* name,
1353 const char* evname, unsigned short ev,
1354 GC_JOIN_E j, GC_OP_KIND_E gc, int gcv)
1356 sttmerr = STTMNOERROR;
1357 int id = ico_sttm_retrieveMName(smNm);
1359 sttmerr = STTMNOTFIND;
1360 _DBG("ico_sttm_addGCINN >>%s<<, %s, %s, %d, %d, %d, %d", smNm,
1361 name, evname, ev, j, gc, gcv);
1364 return ico_sttm_addGCI_N(id, name, evname, ev, j, gc, gcv);
1367 extern "C" int ico_sttm_addGCDNN(const char* smNm, const char* name,
1368 const char* evname, unsigned short ev,
1369 GC_JOIN_E j, GC_OP_KIND_E gc, double gcv)
1371 sttmerr = STTMNOERROR;
1372 int id = ico_sttm_retrieveMName(smNm);
1374 sttmerr = STTMNOTFIND;
1375 _DBG("ico_sttm_addGCDNN >>%s<<, %s, %s, %d, %d, %d, %f", smNm,
1376 name, evname, ev, j, gc, gcv);
1379 return ico_sttm_addGCD_N(id, name, evname, ev, j, gc, gcv);
1382 extern "C" int ico_sttm_addGCSNN(const char* smNm, const char* name,
1383 const char* evname, unsigned short ev,
1384 GC_JOIN_E j, GC_OP_KIND_E gc, const char* gcv)
1386 sttmerr = STTMNOERROR;
1387 int id = ico_sttm_retrieveMName(smNm);
1389 sttmerr = STTMNOTFIND;
1390 _DBG("ico_sttm_addGCSNN >>%s<<, %s, %s, %d, %d, %d, %s", smNm,
1391 name, evname, ev, j, gc, gcv);
1394 return ico_sttm_addGCS_N(id, name, evname, ev, j, gc, gcv);
1398 * @brief callback call entryAction/exitAction/doAction
1399 * @param ev callback function parameter(trigger event)
1400 * @param sCWId callback function parameter
1401 * @param fnc callback function
1404 void callbackActionC(st_event* ev, int sCWId, void* vfnc)
1406 void (*fnc)(st_event*, int) = (void (*)(st_event*, int))vfnc;
1412 * @breif callback action for c++
1413 * @param ev trigger event
1414 * @param state-objects the action occurred
1416 void callbackActionCPP(const CicoEvent& ev, const CicoStateCore* stt, int vec)
1418 int sz = callbackFnc.size();
1419 if ((1 > vec) || (sz < vec)) {
1423 int sCWId = getObjSTT2ID(stt);
1424 if (0 == sCWId) { // state-objects outside the control
1429 stev.ev = ev.getEV();
1431 CicoEvent::E_TOV tov = ev.getVTG();
1432 if ( CicoEvent::EEvtGCInt == tov) {
1434 stev.u.i = ev.getGCVi();
1436 else if (CicoEvent::EEvtGCDouble == tov) {
1438 stev.u.d = ev.getGCVd();
1440 else if (CicoEvent::EEvtGCStr == tov) {
1442 stev.u.s = ev.getGCVs().c_str();
1447 stev.v = ev.getAdVal();
1449 callbackActionC(&stev, sCWId, callbackFnc[vec-1]);
1453 #ifndef CWAPPERCALLBACKACTION_H
1454 #define CWAPPERCALLBACKACTION_H
1456 * C Wrapper call back CicoStateAction
1458 class CicoCWrapperCallbackAction :public CicoStateAction
1461 CicoCWrapperCallbackAction();
1463 void onEnttry(const CicoEvent& ev, const CicoState* stt, int addval);
1464 void onEnttry(const CicoEvent& ev, const CicoFinalState* stt, int addval);
1465 void onEnttry(const CicoEvent& ev, const CicoHistoryState* stt,
1468 void onExit(const CicoEvent& ev, const CicoState* stt, int addval);
1469 void onExit(const CicoEvent& ev, const CicoHistoryState* stt, int addval);
1472 void onDo(const CicoEvent& ev, const CicoState* stt, int addval);
1474 #endif // CWAPPERCALLBACKACTION_H
1479 CicoCWrapperCallbackAction::CicoCWrapperCallbackAction()
1484 * @brief entry Action callback
1485 * @param ev trigger event data
1486 * @param stt entery state-object
1487 * @param addval Additional information
1489 void CicoCWrapperCallbackAction::onEnttry(const CicoEvent& ev,
1490 const CicoState* stt, int addval)
1492 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1495 void CicoCWrapperCallbackAction::onEnttry(const CicoEvent& ev,
1496 const CicoFinalState* stt, int addval)
1498 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1501 void CicoCWrapperCallbackAction::onEnttry(const CicoEvent& ev,
1502 const CicoHistoryState* stt, int addval)
1504 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1508 * @brief exit Action callback
1509 * @param ev trigger event data
1510 * @param stt exit state-object
1511 * @param addval Additional information
1513 void CicoCWrapperCallbackAction::onExit(const CicoEvent& ev,
1514 const CicoState* stt, int addval)
1516 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1519 void CicoCWrapperCallbackAction::onExit(const CicoEvent& ev,
1520 const CicoHistoryState* stt, int addval)
1522 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1526 * @brief do Action callback
1527 * @param ev trigger event data
1528 * @param stt active state-object
1529 * @param addval Additional information
1531 void CicoCWrapperCallbackAction::onDo(const CicoEvent& ev,
1532 const CicoState* stt, int addval)
1534 callbackActionCPP(ev, (CicoStateCore*)stt, addval);
1538 * Declaration of the class CicoCWrapperCallbackAction
1540 CicoCWrapperCallbackAction cWprActn;
1543 /* registration entry-Action,exit-Action,do-action callback */
1545 * @brief Callback registration
1546 * @param sCWId ID no. to be registered(c-wrapper local ID)
1547 * @param fanc callback function
1548 * @return not 0:Success
1551 extern "C" int ico_sttm_addEntryAction(int sCWId, void (*fnc)(st_event*, int))
1553 sttmerr = STTMNOERROR;
1554 CicoStateCore* csc = getID2ObjSTT(sCWId); // ID to state-object
1555 if ((CicoStateCore*)0 == csc) {
1556 sttmerr = STTMNOTFIND;
1557 _DBG("ico_sttm_addEntryAction >>%d<<, fnc", sCWId);
1561 sttmerr = STTMPARAMERR;
1562 _DBG("ico_sttm_addEntryAction %d,>>fnc(0x0)<<", sCWId);
1566 callbackFnc.push_back((void*)fnc);
1567 int addval = callbackFnc.size();
1569 if (true == csc->isState()) {
1570 CicoState* cs = (CicoState*)csc;
1571 cs->addEntryAction((CicoStateAction*)&cWprActn, addval);
1573 else if (true == csc->isFinalState()) {
1574 CicoFinalState* cfs = (CicoFinalState*)csc;
1575 cfs->addEntryAction((CicoStateAction*)&cWprActn, addval);
1577 else if (true == csc->isHistoryState()) {
1578 CicoHistoryState* chs = (CicoHistoryState*)csc;
1579 chs->addEntryAction((CicoStateAction*)&cWprActn, addval);
1582 sttmerr = STTMTYPEMISMATCH;
1583 _DBG("ico_sttm_addEntryAction >>%d(%s:%d:%d)<<,fnc", sCWId,
1584 csc->getName().c_str(), csc->getValue(), (int)csc->getType());
1591 extern "C" int ico_sttm_addExitAction(int sCWId, void (*fnc)(st_event*, int))
1593 sttmerr = STTMNOERROR;
1594 CicoStateCore* csc = getID2ObjSTT(sCWId); // ID to state-object
1595 if ((CicoStateCore*)0 == csc) {
1596 sttmerr = STTMNOTFIND;
1597 _DBG("ico_sttm_addExitAction >>%d<<, fnc", sCWId);
1601 sttmerr = STTMPARAMERR;
1602 _DBG("ico_sttm_addExitAction %d,>>fnc(0x0)<<", sCWId);
1606 callbackFnc.push_back((void*)fnc);
1607 int addval = callbackFnc.size();
1609 if (true == csc->isState()) {
1610 CicoState* cs = (CicoState*)csc;
1611 cs->addExitAction((CicoStateAction*)&cWprActn, addval);
1613 else if (true == csc->isHistoryState()) {
1614 CicoHistoryState* chs = (CicoHistoryState*)csc;
1615 chs->addExitAction((CicoStateAction*)&cWprActn, addval);
1618 sttmerr = STTMTYPEMISMATCH;
1619 _DBG("ico_sttm_addExitAction >>%d(%s:%d:%d)<<,fnc", sCWId,
1620 csc->getName().c_str(), csc->getValue(), (int)csc->getType());
1627 extern "C" int ico_sttm_addDoAction(int sCWId, void (*fnc)(st_event*, int))
1629 sttmerr = STTMNOERROR;
1630 CicoStateCore* csc = getID2ObjSTT(sCWId); // ID to state-object
1631 if ((CicoStateCore*)0 == csc) {
1632 sttmerr = STTMNOTFIND;
1633 _DBG("ico_sttm_addDoAction >>%d<<, fnc", sCWId);
1637 sttmerr = STTMPARAMERR;
1638 _DBG("ico_sttm_addDoAction %d,>>fnc(0x0)<<", sCWId);
1642 callbackFnc.push_back((void*)fnc);
1643 int addval = callbackFnc.size();
1645 if (true == csc->isState()) {
1646 CicoState* cs = (CicoState*)csc;
1647 cs->addDoAction((CicoStateAction*)&cWprActn, addval);
1650 sttmerr = STTMTYPEMISMATCH;
1651 _DBG("ico_sttm_addDoAction >>%d(%s:%d:%d)<<,fnc", sCWId,
1652 csc->getName().c_str(), csc->getValue(), (int)csc->getType());
1659 * @brief Callback registration
1660 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
1661 * @param value value is state-object identification number
1662 * @param fanc callback function
1663 * @return not 0:Success
1666 extern "C" int ico_sttm_addEntryAction_V(int smCWId, int value,
1667 void (*fnc)(st_event* ev, int sCWId))
1669 sttmerr = STTMNOERROR;
1670 int lid = ico_sttm_retrieveSVal(smCWId, value);
1672 sttmerr = STTMNOTFIND;
1673 _DBG("ico_sttm_addEntryAction_V >>%d<<,>>%d<<, .", smCWId, value);
1676 return ico_sttm_addEntryAction(lid, fnc);
1679 extern "C" int ico_sttm_addExitAction_V(int smCWId, int value,
1680 void (*fnc)(st_event* ev, int sCWId))
1682 sttmerr = STTMNOERROR;
1683 int lid = ico_sttm_retrieveSVal(smCWId, value);
1685 sttmerr = STTMNOTFIND;
1686 _DBG("ico_sttm_addExitAction_V >>%d<<,>>%d<<, .", smCWId, value);
1689 return ico_sttm_addExitAction(lid, fnc);
1692 extern "C" int ico_sttm_addDoAction_V(int smCWId, int value,
1693 void (*fnc)(st_event* ev, int sCWId))
1695 sttmerr = STTMNOERROR;
1696 int lid = ico_sttm_retrieveSVal(smCWId, value);
1698 sttmerr = STTMNOTFIND;
1699 _DBG("ico_sttm_addDoAction_V >>%d<<,>>%d<<, .", smCWId, value);
1702 return ico_sttm_addDoAction(lid, fnc);
1706 * @brief Callback registration
1707 * @param smVal value is stateMachine-object identification number
1708 * @param value value is state-object identification number
1709 * @param fanc callback function
1710 * @return not 0:Success
1713 extern "C" int ico_sttm_addEntryActionVV(int smVal, int value,
1714 void (*fnc)(st_event* ev, int sCWId))
1716 sttmerr = STTMNOERROR;
1717 int id = ico_sttm_retrieveMVal(smVal);
1719 sttmerr = STTMNOTFIND;
1720 _DBG("ico_sttm_addEntryActionVV >>%d<<, %d, .", smVal, value);
1723 return ico_sttm_addEntryAction_V(id, value, fnc);
1726 extern "C" int ico_sttm_addExitActionVV(int smVal, int value,
1727 void (*fnc)(st_event* ev, int sCWId))
1729 sttmerr = STTMNOERROR;
1730 int id = ico_sttm_retrieveMVal(smVal);
1732 sttmerr = STTMNOTFIND;
1733 _DBG("ico_sttm_addExitActionVV >>%d<<, %d, .", smVal, value);
1736 return ico_sttm_addExitAction_V(id, value, fnc);
1739 extern "C" int ico_sttm_addDoActionVV(int smVal, int value,
1740 void (*fnc)(st_event* ev, int sCWId))
1742 sttmerr = STTMNOERROR;
1743 int id = ico_sttm_retrieveMVal(smVal);
1745 sttmerr = STTMNOTFIND;
1746 _DBG("ico_sttm_addDoActionVV >>%d<<, %d, .", smVal, value);
1749 return ico_sttm_addDoAction_V(id, value, fnc);
1754 * @brief Callback registration
1755 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
1756 * @param name name is state-object Identification name
1757 * @param fanc callback function
1758 * @return not 0:Success
1761 extern "C" int ico_sttm_addEntryAction_N(int smCWId, const char* name,
1762 void (*fnc)(st_event* ev, int sCWId))
1764 int lid = ico_sttm_retrivevSName(smCWId, name);
1766 sttmerr = STTMNOTFIND;
1767 _DBG("ico_sttm_addEntryAction_N >>%d<<,>>%s<<, .", smCWId, name);
1770 return ico_sttm_addEntryAction(lid, fnc);
1773 extern "C" int ico_sttm_addExitAction_N(int smCWId, const char* name,
1774 void (*fnc)(st_event* ev, int sCWId))
1776 int lid = ico_sttm_retrivevSName(smCWId, name);
1778 sttmerr = STTMNOTFIND;
1779 _DBG("ico_sttm_addExitAction_N >>%d<<,>>%s<<, .", smCWId, name);
1782 return ico_sttm_addExitAction(lid, fnc);
1785 extern "C" int ico_sttm_addDoAction_N(int smCWId, const char* name,
1786 void (*fnc)(st_event* ev, int sCWId))
1788 int lid = ico_sttm_retrivevSName(smCWId, name);
1790 sttmerr = STTMNOTFIND;
1791 _DBG("ico_sttm_addDoAction_N >>%d<<,>>%s<<, .", smCWId, name);
1794 return ico_sttm_addDoAction(lid, fnc);
1798 * @brief Callback registration
1799 * @param smNm stateMachine-object Identification name
1800 * @param name name is state-object Identification name
1801 * @param fanc callback function
1802 * @return not 0:Success
1805 extern "C" int ico_sttm_addEntryActionNN(const char* smNm, const char* name,
1806 void (*fnc)(st_event* ev, int sCWId))
1808 sttmerr = STTMNOERROR;
1809 int id = ico_sttm_retrieveMName(smNm);
1811 sttmerr = STTMNOTFIND;
1812 _DBG("ico_sttm_addEntryActionNN >>%s<<, %s, .", smNm, name);
1815 return ico_sttm_addEntryAction_N(id, name, fnc);
1818 extern "C" int ico_sttm_addExitActionNN(const char* smNm, const char* name,
1819 void (*fnc)(st_event* ev, int sCWId))
1821 sttmerr = STTMNOERROR;
1822 int id = ico_sttm_retrieveMName(smNm);
1824 sttmerr = STTMNOTFIND;
1825 _DBG("ico_sttm_addExitActionNN >>%s<<, %s, .", smNm, name);
1828 return ico_sttm_addExitAction_N(id, name, fnc);
1831 extern "C" int ico_sttm_addDoActionNN(const char* smNm, const char* name,
1832 void (*fnc)(st_event* ev, int sCWId))
1834 sttmerr = STTMNOERROR;
1835 int id = ico_sttm_retrieveMName(smNm);
1837 sttmerr = STTMNOTFIND;
1838 _DBG("ico_sttm_addDoActionNN >>%s<<, %s, .", smNm, name);
1841 return ico_sttm_addDoAction_N(id, name, fnc);
1846 * @brief Registration at the time of termination detection transition destination
1847 * @param sCWId ID no. to be registered(c-wrapper local ID)
1848 * @param trCWId finish transition destination(c-wrapper local ID)
1849 * @return not 0:Success
1852 extern "C" int ico_sttm_setFinishTransition(int sCWId, int trCWId)
1854 sttmerr = STTMNOERROR;
1855 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
1856 if ((CicoStateCore*)0 == cscTarget) {
1857 sttmerr = STTMNOTFIND;
1858 _DBG("ico_sttm_setFinishTransition >>%d<<, %d", sCWId, trCWId);
1861 CicoStateCore* cscTrans = getID2ObjSTT(trCWId); // ID to state-object
1862 if ((CicoStateCore*)0 == cscTrans) {
1863 sttmerr = STTMNOTFIND;
1864 _DBG("ico_sttm_setFinishTransition %d,>>%d<<", sCWId, trCWId);
1867 if (false == cscTarget->isState()) {
1868 sttmerr = STTMTYPEMISMATCH;
1869 _DBG("ico_sttm_setFinishTransition >>%d(%s:%d:%d)<<, %d", sCWId,
1870 cscTarget->getName().c_str(), cscTarget->getValue(),
1871 (int)cscTarget->getType(), trCWId);
1874 CicoState* cs = (CicoState*) cscTarget;
1875 if (true == cscTrans->isState()) {
1876 cs->setFinishTransition((CicoState*)cscTrans);
1878 else if (true == cscTrans->isFinalState()) {
1879 cs->setFinishTransition((CicoFinalState*)cscTrans);
1881 else if (true == cscTrans->isHistoryState()) {
1882 cs->setFinishTransition((CicoHistoryState*)cscTrans);
1885 sttmerr = STTMTYPEMISMATCH;
1886 _DBG("ico_sttm_setFinishTransition %d,>>%d(%s:%d:%d)<<", sCWId,
1887 trCWId, cscTarget->getName().c_str(),
1888 cscTarget->getValue(), (int)cscTarget->getType());
1895 * @brief Registration at the time of termination detection transition destination
1896 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
1897 * @param smVal value is stateMachine-object identification number
1898 * @param value value is state-object identification number
1899 * @param trCWId finish transition destination(c-wrapper local ID)
1900 * @param trVl value is state-object identification number transition destination
1901 * @return not 0:Success
1904 extern "C" int ico_sttm_setFinishTransition_V_(int smCWId, int value,
1907 sttmerr = STTMNOERROR;
1908 int id = ico_sttm_retrieveSVal(smCWId, value);
1910 _DBG("ico_sttm_setFinishTransition_V_ >> %d, %d<<, %d",smCWId, value, trCWId);
1913 return ico_sttm_setFinishTransition(id, trCWId);
1916 extern "C" int ico_sttm_setFinishTransition_VV(int smCWId, int value,
1919 sttmerr = STTMNOERROR;
1920 int idT = ico_sttm_retrieveSVal(smCWId, trVl);
1922 sttmerr = STTMNOTFIND;
1923 _DBG("ico_sttm_setFinishTransition_VV >>%d<<, %d,>>%d<<",smCWId, value, trVl);
1926 return ico_sttm_setFinishTransition_V_(smCWId, value, idT);
1929 extern "C" int ico_sttm_setFinishTransitionVVV(int smVal, int value, int trVl)
1931 sttmerr = STTMNOERROR;
1932 int id = ico_sttm_retrieveMVal(smVal);
1934 sttmerr = STTMNOTFIND;
1935 _DBG("ico_sttm_setFinishTransitionVVV >>%d<<, %d, %d", smVal,
1939 return ico_sttm_setFinishTransition_VV(id, value, trVl);
1944 * @brief Registration at the time of termination detection transition destination
1945 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
1946 * @param name name is state-object Identification name
1947 * @param trCWId finish transition destination(c-wrapper local ID)
1948 * @return not 0:Success
1951 extern "C" int ico_sttm_setFinishTransition_N_(int smCWId, const char* name,
1954 sttmerr = STTMNOERROR;
1955 int id = ico_sttm_retrivevSName(smCWId, name);
1957 sttmerr = STTMNOTFIND;
1958 _DBG("ico_sttm_setFinishTransition_N_ >>%d, %s<<, %d",smCWId, name, trCWId);
1961 return ico_sttm_setFinishTransition(id, trCWId);
1964 extern "C" int ico_sttm_setFinishTransition_NN(int smCWId, const char* name,
1967 sttmerr = STTMNOERROR;
1968 int idT = ico_sttm_retrivevSName(smCWId, trNm);
1970 sttmerr = STTMNOTFIND;
1971 _DBG("ico_sttm_setFinishTransition_NN >>%d<<, %s,>>%s<<",smCWId,
1975 return ico_sttm_setFinishTransition_N_(smCWId, name, idT);
1978 extern "C" int ico_sttm_setFinishTransitionNNN(const char* smNm,
1982 sttmerr = STTMNOERROR;
1983 int id = ico_sttm_retrieveMName(smNm);
1985 sttmerr = STTMNOTFIND;
1986 _DBG("ico_sttm_setFinishTransitionNNN >>%s<<, %s, %s", smNm, name,
1990 return ico_sttm_setFinishTransition_NN(id, name, trNm);
1996 * @brief Registration of default history state-objectss
1997 * @param sCWId ID no. to be registered(c-wrapper local ID)
1998 * @param dfCWId default transition destination(c-wrapper local ID)
1999 * @return not 0:Success
2002 extern "C" int ico_sttm_addDefault(int sCWId, int dfCWId)
2004 sttmerr = STTMNOERROR;
2005 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
2006 if ((CicoStateCore*)0 == cscTarget) {
2007 sttmerr = STTMNOTFIND;
2008 _DBG("ico_sttm_addDefault >>%d<<, %d", sCWId, dfCWId);
2011 CicoStateCore* cscDef = getID2ObjSTT(dfCWId); // ID to state-object
2012 if ((CicoStateCore*)0 == cscDef) {
2013 sttmerr = STTMNOTFIND;
2014 _DBG("ico_sttm_addDefault %d,>>%d<<", sCWId, dfCWId);
2017 if (false == cscTarget->isHistoryState()) {
2018 sttmerr = STTMTYPEMISMATCH;
2019 _DBG("ico_sttm_addDefault >>%d(%s:%d:%d)<<, %d", sCWId,
2020 cscTarget->getName().c_str(), cscTarget->getValue(),
2021 (int)cscTarget->getType(), dfCWId);
2024 CicoHistoryState* chs = (CicoHistoryState*) cscTarget;
2025 if (true == cscDef->isState()) {
2026 chs->addDefaultState((CicoState*)cscDef);
2029 sttmerr = STTMTYPEMISMATCH;
2030 _DBG("ico_sttm_addDefault %d,>>%d(%s:%d:%d)<<", sCWId,
2031 dfCWId, cscTarget->getName().c_str(),
2032 cscTarget->getValue(), (int)cscTarget->getType());
2039 * @brief Registration of default history state-objectss
2040 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
2041 * @param value value is state-object identification number
2042 * @param dfCWId default transition destination(c-wrapper local ID)
2043 * @param dfVal value is state-object identification number
2044 * @return not 0:Success
2047 extern "C" int ico_sttm_addDefault_V_(int smCWId, int value, int dfCWId)
2049 sttmerr = STTMNOERROR;
2050 int id = ico_sttm_retrieveSVal(smCWId, value);
2052 sttmerr = STTMNOTFIND;
2053 _DBG("ico_sttm_addDefaultV >>%d, %d<<, %d", smCWId, value, dfCWId);
2056 return ico_sttm_addDefault(id, dfCWId);
2059 extern "C" int ico_sttm_addDefault_VV(int smCWId, int value, int dfVal)
2061 sttmerr = STTMNOERROR;
2062 int dfCWId = ico_sttm_retrieveSVal(smCWId, dfVal);
2064 sttmerr = STTMNOTFIND;
2065 _DBG("ico_sttm_addDefaultVV >>%d<<, %d,>>%d<<", smCWId, value, dfVal);
2068 return ico_sttm_addDefault_V_(smCWId, value, dfCWId);
2071 extern "C" int ico_sttm_addDefaultVVV(int smVal, int value, int dfVal)
2073 sttmerr = STTMNOERROR;
2074 int id = ico_sttm_retrieveMVal(smVal);
2076 sttmerr = STTMNOTFIND;
2077 _DBG("ico_sttm_addDefaultVVV >>%d<<, %d,>>%d<<", smVal, value,
2081 return ico_sttm_addDefault_VV(id, value, dfVal);
2085 * @brief Registration of default history state-objectss
2086 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
2087 * @param name name is state-object Identification name
2088 * @param dfCWId default transition destination(c-wrapper local ID)
2089 * @param dfNm name is state-object Identification name
2090 * @return not 0:Success
2093 extern "C" int ico_sttm_addDefault_N_(int smCWId, const char* name, int dfCWId)
2095 sttmerr = STTMNOERROR;
2096 int id = ico_sttm_retrivevSName(smCWId, name);
2098 sttmerr = STTMNOTFIND;
2099 _DBG("ico_sttm_addDefault_N_ >>%d, %s<<, %d",smCWId, name, dfCWId);
2102 return ico_sttm_addDefault(id, dfCWId);
2105 extern "C" int ico_sttm_addDefault_NN(int smCWId, const char* name, const char* dfNm)
2107 sttmerr = STTMNOERROR;
2108 int idD = ico_sttm_retrivevSName(smCWId, dfNm);
2110 sttmerr = STTMNOTFIND;
2111 _DBG("ico_sttm_addDefault_NN >>%d<<, %s,>>%s<<", smCWId, name, dfNm);
2114 return ico_sttm_addDefault_N_(smCWId, name, idD);
2117 extern "C" int ico_sttm_addDefaultNNN(const char* smNm, const char* name,
2120 sttmerr = STTMNOERROR;
2121 int id = ico_sttm_retrieveMName(smNm);
2123 sttmerr = STTMNOTFIND;
2124 _DBG("ico_sttm_addDefaultNNN >>%s<<, %s, %s", smNm, name, dfNm);
2127 return ico_sttm_addDefault_NN(id, name, dfNm);
2131 * @breif Registration of start position state-objects
2132 * @param ID stateMachine-object/state-object ID no.(c-wrapper local ID)
2133 * @param sCWId start position state-object ID no.(c-wrapper local ID)
2134 * @return not 0:Success
2137 extern "C" int ico_sttm_addStartPosition(int CWId, int sCWId)
2139 sttmerr = STTMNOERROR;
2140 CicoStateCore* cscTarget = getID2ObjSTT(CWId); // ID to state-object
2141 if ((CicoStateCore*)0 == cscTarget) {
2142 sttmerr = STTMNOTFIND;
2143 _DBG("ico_sttm_setStartPosition >>%d<<, %d", CWId, sCWId);
2146 CicoStateCore* cscIni = getID2ObjSTT(sCWId); // ID to state-object
2147 if ((CicoStateCore*)0 == cscIni) {
2148 sttmerr = STTMNOTFIND;
2149 _DBG("ico_sttm_setStartPosition %d,>>%d<<", CWId, sCWId);
2152 CicoState* cs = (CicoState*)0;
2153 CicoHistoryState* chs = (CicoHistoryState*)0;
2154 if (true == cscIni->isState()) {
2155 cs = (CicoState*)cscIni;
2157 else if (true == cscIni->isHistoryState()) {
2158 chs = (CicoHistoryState*)cscIni;
2161 sttmerr = STTMTYPEMISMATCH;
2162 _DBG("ico_sttm_setStartPosition %d,>>%d(%s:%d:%d)<<", CWId, sCWId,
2163 cscIni->getName().c_str(), cscIni->getValue(),
2164 (int)cscIni->getType());
2167 if (true == cscTarget->isStateMachine()) {
2168 CicoStateMachine* csm = (CicoStateMachine*)cscTarget;
2169 if ((CicoState*)0 != cs) {
2170 csm->addInitState(cs);
2173 csm->addInitState(chs);
2176 else if (true == cscTarget->isState()) {
2177 CicoState* csT = (CicoState*)cscTarget;
2178 if ((CicoState*)0 != cs) {
2179 csT->addInitState(cs);
2182 csT->addInitState(chs);
2186 sttmerr = STTMTYPEMISMATCH;
2187 _DBG("ico_sttm_setStartPosition >>%d(%s:%d:%d)<<, %d", CWId,
2188 cscTarget->getName().c_str(), cscTarget->getValue(),
2189 (int)cscTarget->getType(), sCWId);
2198 * @breif Registration of start position state-objects
2199 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
2200 * @param smVal value is stateMachine-object identification number
2201 * @param value value is state-object identification number
2202 * @param sCWId start position state-object ID no.(c-wrapper local ID)
2203 * @param value spVal is state-object identification number
2204 * @return not 0:Success
2207 extern "C" int ico_sttm_addStartPosition_V_(int smCWId, int value, int sCWId)
2209 sttmerr = STTMNOERROR;
2210 int id = ico_sttm_retrieveSVal(smCWId, value);
2212 sttmerr = STTMNOTFIND;
2213 _DBG("ico_sttm_addStartPosition_V_ >>%d, %d<<, %d",smCWId, value, sCWId);
2216 return ico_sttm_addStartPosition(id, sCWId);
2220 extern "C" int ico_sttm_addStartPosition_VV(int smCWId, const int value, int spVal)
2222 sttmerr = STTMNOERROR;
2223 int idSP = ico_sttm_retrieveSVal(smCWId, spVal);
2225 sttmerr = STTMNOTFIND;
2226 _DBG("ico_sttm_addStartPosition_VV >>%d<<, %d,>>%d<<",smCWId, value, spVal);
2229 return ico_sttm_addStartPosition_V_(smCWId, value, idSP);
2232 extern "C" int ico_sttm_addStartPositionVVV(int smVal, int value, int spVal)
2234 sttmerr = STTMNOERROR;
2235 int id = ico_sttm_retrieveMVal(smVal);
2237 sttmerr = STTMNOTFIND;
2238 _DBG("ico_sttm_addStartPositionVVV >>%d<<, %d, %d", smVal, value,
2242 return ico_sttm_addStartPosition_VV(id, value, spVal);
2245 extern "C" int ico_sttm_addStartPositionSMVV(int smVal, int spVal)
2247 sttmerr = STTMNOERROR;
2248 int id = ico_sttm_retrieveMVal(smVal);
2250 sttmerr = STTMNOTFIND;
2251 _DBG("ico_sttm_addStartPositionSMVV >>%d<<, %d", smVal, spVal);
2254 int idSP = ico_sttm_retrieveSVal(id, spVal);
2256 sttmerr = STTMNOTFIND;
2257 _DBG("ico_sttm_addStartPositionSMVV %d,>>%d<<",smVal, spVal);
2260 return ico_sttm_addStartPosition(id, idSP);
2265 * @breif Registration of start position state-objects
2266 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
2267 * @param name name is state-object Identification name
2268 * @param sCWId start position state-object ID no.(c-wrapper local ID)
2269 * @param name spNm is state-object Identification name
2270 * @return not 0:Success
2273 extern "C" int ico_sttm_addStartPosition_N_(int smCWId, const char* name, int sCWId)
2275 sttmerr = STTMNOERROR;
2276 int id = ico_sttm_retrivevSName(smCWId, name);
2278 sttmerr = STTMNOTFIND;
2279 _DBG("ico_sttm_addStartPosition_N_ >>%d, %s<<, %d",smCWId, name, sCWId);
2282 return ico_sttm_addStartPosition(id, sCWId);
2285 extern "C" int ico_sttm_addStartPosition_NN(int smCWId, const char* name,
2288 sttmerr = STTMNOERROR;
2289 int idSP = ico_sttm_retrivevSName(smCWId, spNm);
2291 sttmerr = STTMNOTFIND;
2292 _DBG("ico_sttm_addStartPosition_NN >>%d<<, %s,>>%s<<",smCWId, name,
2296 return ico_sttm_addStartPosition_N_(smCWId, name, idSP);
2299 extern "C" int ico_sttm_addStartPositionNNN(const char* smNm, const char* name,
2302 sttmerr = STTMNOERROR;
2303 int id = ico_sttm_retrieveMName(smNm);
2305 sttmerr = STTMNOTFIND;
2306 _DBG("ico_sttm_addStartPositionNNN >>%s<<, %s, %s", smNm, name,
2310 return ico_sttm_addStartPosition_NN(id, name, spNm);
2313 extern "C" int ico_sttm_addStartPositionSMNN(const char* smNm, const char* spNm)
2315 sttmerr = STTMNOERROR;
2316 int id = ico_sttm_retrieveMName(smNm);
2318 sttmerr = STTMNOTFIND;
2319 _DBG("ico_sttm_addStartPositionSMNN >>%s<<, %s", smNm, spNm);
2322 int idSP = ico_sttm_retrivevSName(id, spNm);
2324 sttmerr = STTMNOTFIND;
2325 _DBG("ico_sttm_addStartPositionSMNN %s,>>%s<<",smNm, spNm);
2328 return ico_sttm_addStartPosition(id, idSP);
2332 /* Operational system */
2334 * @breif start stateMachine
2335 * @param smCWId stateMachine-object ID no. to be registered(c-wrapper local ID)
2336 * @param smVal value is stateMachine-object identification number
2337 * @param smNm stateMachine-object Identification name
2338 * @return not 0:Success
2341 extern "C" int ico_sttm_start(int smCWId)
2343 sttmerr = STTMNOERROR;
2344 CicoStateMachine* csm = ico_sttm_getStateMachineX(smCWId, "ico_sttm_start");
2345 if ((CicoStateMachine*)0 == csm) {
2348 return csm->start()? smCWId:0;
2353 extern "C" int ico_sttm_startV(int smVal)
2355 sttmerr = STTMNOERROR;
2356 int id = ico_sttm_retrieveMVal(smVal);
2358 sttmerr = STTMNOTFIND;
2359 _DBG("ico_sttm_startV >>%d<<", smVal);
2362 return ico_sttm_start(id);
2365 extern "C" int ico_sttm_startN(const char* smNm)
2367 sttmerr = STTMNOERROR;
2368 int id = ico_sttm_retrieveMName(smNm);
2370 sttmerr = STTMNOTFIND;
2371 _DBG("ico_sttm_startN >>%s<<", smNm);
2374 return ico_sttm_start(id);
2378 * @breif stop stateMachine
2379 * @param smCWId stateMachine-object ID no. to be registered(c-wrapper local ID)
2380 * @param smVal value is stateMachine-object identification number
2381 * @param smNm stateMachine-object Identification name
2382 * @return not 0:Success
2385 extern "C" int ico_sttm_stop(int smCWId)
2387 sttmerr = STTMNOERROR;
2388 CicoStateMachine* csm = ico_sttm_getStateMachineX(smCWId, "ico_sttm_stop");
2389 if ((CicoStateMachine*)0 == csm) {
2392 return csm->stop()? smCWId:0;
2395 extern "C" int ico_sttm_stopV(int smVal)
2397 sttmerr = STTMNOERROR;
2398 int id = ico_sttm_retrieveMVal(smVal);
2400 sttmerr = STTMNOTFIND;
2401 _DBG("ico_sttm_stopV >>%d<<", smVal);
2404 return ico_sttm_stop(id);
2407 extern "C" int ico_sttm_stopN(const char* smNm)
2409 sttmerr = STTMNOERROR;
2410 int id = ico_sttm_retrieveMName(smNm);
2412 sttmerr = STTMNOTFIND;
2413 _DBG("ico_sttm_stopN >>%s<<", smNm);
2416 return ico_sttm_stop(id);
2419 bool ico_sttm_eventX(int smCWId, CicoEvent& ev, const char* fname)
2421 CicoStateMachine* csm = ico_sttm_getStateMachineX(smCWId, fname);
2422 if ((CicoStateMachine*)0 == csm) {
2425 return csm->eventEntry(ev);
2429 * @brief Issue an event
2430 * @param smCWId stateMachine-object ID no. to be registered(c-wrapper local ID)
2431 * @param smVal value is stateMachine-object identification number
2432 * @param smNm stateMachine-object Identification name
2433 * @param ev event No.(Use the 1000-65535)
2434 * @param gcv Comparison value of guard condition
2435 * @param info Additional information user
2436 * @return not 0:Success on Transition
2437 * @ 0: none Transition
2439 extern "C" int ico_sttm_event(int smCWId, unsigned short ev, void* info)
2441 sttmerr = STTMNOERROR;
2442 CicoEvent oev(ev, info);
2443 return ico_sttm_eventX(smCWId, oev, "ico_sttm_event")? smCWId:0;
2446 extern "C" int ico_sttm_eventGCI(int smCWId, unsigned short ev, int gcv, void* info)
2448 sttmerr = STTMNOERROR;
2449 CicoEvent oev(ev, gcv, info);
2450 return ico_sttm_eventX(smCWId, oev, "ico_sttm_eventGCI")? smCWId:0;
2453 extern "C" int ico_sttm_eventGCD(int smCWId, unsigned short ev, double gcv, void* info)
2455 sttmerr = STTMNOERROR;
2456 CicoEvent oev(ev, gcv, info);
2457 return ico_sttm_eventX(smCWId, oev, "ico_sttm_eventGCD")? smCWId:0;
2460 extern "C" int ico_sttm_eventGCS(int smCWId, unsigned short ev, const char* gcv, void* info)
2462 sttmerr = STTMNOERROR;
2463 CicoEvent oev(ev, gcv, info);
2464 return ico_sttm_eventX(smCWId, oev, "ico_sttm_eventGCS")? smCWId:0;
2467 extern "C" int ico_sttm_eventV(int smVal, unsigned short ev, void* info)
2469 sttmerr = STTMNOERROR;
2470 int id = ico_sttm_retrieveMVal(smVal);
2472 sttmerr = STTMNOTFIND;
2473 _DBG("ico_sttm_eventV >>%d<<, %d, .", smVal, ev);
2476 return ico_sttm_event(id, ev, info);
2479 extern "C" int ico_sttm_eventGCIV(int smVal, unsigned short ev, int gcv,
2482 sttmerr = STTMNOERROR;
2483 int id = ico_sttm_retrieveMVal(smVal);
2485 sttmerr = STTMNOTFIND;
2486 _DBG("ico_sttm_eventGCIV >>%d<<, %d, %d, .", smVal, ev, gcv);
2489 return ico_sttm_eventGCI(id, ev, gcv, info);
2492 extern "C" int ico_sttm_eventGCDV(int smVal, unsigned short ev, double gcv,
2495 sttmerr = STTMNOERROR;
2496 int id = ico_sttm_retrieveMVal(smVal);
2498 sttmerr = STTMNOTFIND;
2499 _DBG("ico_sttm_eventGCDV >>%d<<, %d, %f, .", smVal, ev, gcv);
2502 return ico_sttm_eventGCD(id, ev, gcv, info);
2505 extern "C" int ico_sttm_eventGCSV(int smVal, unsigned short ev,
2506 const char* gcv, void* info)
2508 sttmerr = STTMNOERROR;
2509 int id = ico_sttm_retrieveMVal(smVal);
2511 sttmerr = STTMNOTFIND;
2512 _DBG("ico_sttm_eventGCSV >>%d<<, %d, %s, .", smVal, ev, gcv);
2515 return ico_sttm_eventGCS(id, ev, gcv, info);
2518 extern "C" int ico_sttm_eventN(const char* smNm, unsigned short ev, void* info)
2520 sttmerr = STTMNOERROR;
2521 int id = ico_sttm_retrieveMName(smNm);
2523 sttmerr = STTMNOTFIND;
2524 _DBG("ico_sttm_eventN >>%s<<, %d, .", smNm, ev);
2527 return ico_sttm_event(id, ev, info);
2530 extern "C" int ico_sttm_eventGCIN(const char* smNm, unsigned short ev, int gcv,
2533 sttmerr = STTMNOERROR;
2534 int id = ico_sttm_retrieveMName(smNm);
2536 sttmerr = STTMNOTFIND;
2537 _DBG("ico_sttm_eventGCIN >>%s<<, %d, %d, .", smNm, ev, gcv);
2540 return ico_sttm_eventGCI(id, ev, gcv, info);
2543 extern "C" int ico_sttm_eventGCDN(const char* smNm, unsigned short ev, double gcv,
2546 sttmerr = STTMNOERROR;
2547 int id = ico_sttm_retrieveMName(smNm);
2549 sttmerr = STTMNOTFIND;
2550 _DBG("ico_sttm_eventGCDN >>%s<<, %d, %f, .", smNm, ev, gcv);
2553 return ico_sttm_eventGCD(id, ev, gcv, info);
2556 extern "C" int ico_sttm_eventGCSN(const char* smNm, unsigned short ev, const char* gcv,
2559 sttmerr = STTMNOERROR;
2560 int id = ico_sttm_retrieveMName(smNm);
2562 sttmerr = STTMNOTFIND;
2563 _DBG("ico_sttm_eventGCSN >>%s<<, %d, %s, .", smNm, ev, gcv);
2566 return ico_sttm_eventGCS(id, ev, gcv, info);
2571 bool ico_sttm_eventTestX(int smCWId, CicoEvent& ev, const char* fname)
2573 CicoStateMachine* csm = ico_sttm_getStateMachineX(smCWId, fname);
2574 if ((CicoStateMachine*)0 == csm) {
2577 return csm->eventTest(ev);
2581 * @brief Test of the transition
2582 * @param smCWId stateMachine-object ID no. to be registered(c-wrapper local ID)
2583 * @param smVal value is stateMachine-object identification number
2584 * @param smNm stateMachine-object Identification name
2585 * @param ev event No.(Use the 1000-65535)
2586 * @param gcv Comparison value of guard condition
2587 * @param info Additional information user
2588 * @return not 0:Success on Transition
2589 * @ 0: none Transition
2591 extern "C" int ico_sttm_eventTest(int smCWId, unsigned short ev)
2593 sttmerr = STTMNOERROR;
2595 return ico_sttm_eventTestX(smCWId, oev, "ico_sttm_eventTest")? smCWId:0;
2598 extern "C" int ico_sttm_eventTestGCI(int smCWId, unsigned short ev, int gcv)
2600 sttmerr = STTMNOERROR;
2601 CicoEvent oev(ev, gcv);
2602 return ico_sttm_eventTestX(smCWId, oev, "ico_sttm_eventTestGCI")? smCWId:0;
2605 extern "C" int ico_sttm_eventTestGCD(int smCWId, unsigned short ev, double gcv)
2607 sttmerr = STTMNOERROR;
2608 CicoEvent oev(ev, gcv);
2609 return ico_sttm_eventTestX(smCWId, oev, "ico_sttm_eventTestGCD")? smCWId:0;
2612 extern "C" int ico_sttm_eventTestGCS(int smCWId, unsigned short ev, const char* gcv)
2614 sttmerr = STTMNOERROR;
2615 CicoEvent oev(ev, gcv);
2616 return ico_sttm_eventTestX(smCWId, oev, "ico_sttm_eventTestGCS")? smCWId:0;
2619 extern "C" int ico_sttm_eventTestV(int smVal, unsigned short ev)
2621 sttmerr = STTMNOERROR;
2622 int id = ico_sttm_retrieveMVal(smVal);
2624 sttmerr = STTMNOTFIND;
2625 _DBG("ico_sttm_eventTestV >>%d<<, %d, .", smVal, ev);
2628 return ico_sttm_eventTest(id, ev);
2631 extern "C" int ico_sttm_eventTestGCIV(int smVal, unsigned short ev, int gcv)
2633 sttmerr = STTMNOERROR;
2634 int id = ico_sttm_retrieveMVal(smVal);
2636 sttmerr = STTMNOTFIND;
2637 _DBG("ico_sttm_eventGCIV >>%d<<, %d, %d, .", smVal, ev, gcv);
2640 return ico_sttm_eventTestGCI(id, ev, gcv);
2643 extern "C" int ico_sttm_eventTestGCDV(int smVal, unsigned short ev, double gcv)
2645 sttmerr = STTMNOERROR;
2646 int id = ico_sttm_retrieveMVal(smVal);
2648 sttmerr = STTMNOTFIND;
2649 _DBG("ico_sttm_eventTestGCDV >>%d<<, %d, %f, .", smVal, ev, gcv);
2652 return ico_sttm_eventTestGCD(id, ev, gcv);
2655 extern "C" int ico_sttm_eventTestGCSV(int smVal, unsigned short ev, const char* gcv)
2657 sttmerr = STTMNOERROR;
2658 int id = ico_sttm_retrieveMVal(smVal);
2660 sttmerr = STTMNOTFIND;
2661 _DBG("ico_sttm_eventTestGCSV >>%d<<, %d, %s, .", smVal, ev, gcv);
2664 return ico_sttm_eventTestGCS(id, ev, gcv);
2667 extern "C" int ico_sttm_eventTestN(const char* smNm, unsigned short ev)
2669 sttmerr = STTMNOERROR;
2670 int id = ico_sttm_retrieveMName(smNm);
2672 sttmerr = STTMNOTFIND;
2673 _DBG("ico_sttm_eventTestN >>%s<<, %d, .", smNm, ev);
2676 return ico_sttm_eventTest(id, ev);
2679 extern "C" int ico_sttm_eventTestGCIN(const char* smNm, unsigned short ev, int gcv)
2681 sttmerr = STTMNOERROR;
2682 int id = ico_sttm_retrieveMName(smNm);
2684 sttmerr = STTMNOTFIND;
2685 _DBG("ico_sttm_eventTestGCIN >>%s<<, %d, %d, .", smNm, ev, gcv);
2688 return ico_sttm_eventTestGCI(id, ev, gcv);
2691 extern "C" int ico_sttm_eventTestGCDN(const char* smNm, unsigned short ev, double gcv)
2693 sttmerr = STTMNOERROR;
2694 int id = ico_sttm_retrieveMName(smNm);
2696 sttmerr = STTMNOTFIND;
2697 _DBG("ico_sttm_eventTestGCDN >>%s<<, %d, %f, .", smNm, ev, gcv);
2700 return ico_sttm_eventTestGCD(id, ev, gcv);
2703 extern "C" int ico_sttm_eventTestGCSN(const char* smNm, unsigned short ev,
2706 sttmerr = STTMNOERROR;
2707 int id = ico_sttm_retrieveMName(smNm);
2709 sttmerr = STTMNOTFIND;
2710 _DBG("ico_sttm_eventTestGCSN >>%s<<, %d, %s, .", smNm, ev, gcv);
2713 return ico_sttm_eventTestGCS(id, ev, gcv);
2717 * @brief retrieve stateMachine-object
2718 * @param value/name stateMachine-object ID no. / name
2719 * @return not 0:stateMachine-object ID no.(c-wrapper local ID)
2722 extern "C" int ico_sttm_retrieveMVal(int value)
2724 sttmerr = STTMNOERROR;
2726 int sz = stateObjects.size();
2727 for (int i = 0; i< sz; i++) {
2728 if (true == stateObjects[i]->isStateMachine()) {
2729 if (value == stateObjects[i]->getValue() ) {
2731 break; // break of for i<sz
2738 extern "C" int ico_sttm_retrieveMName(const char* name)
2740 sttmerr = STTMNOERROR;
2741 std::string oname(name);
2743 int sz = stateObjects.size();
2744 for (int i = 0; i< sz; i++) {
2745 if (true == stateObjects[i]->isStateMachine()) {
2746 if (oname == stateObjects[i]->getName()) {
2748 break; // break of for i<sz
2756 * @brief retrieve state-object(state/historyState/finalState)
2757 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
2758 * @param value/name state(state/historyState/finalState)-object ID no. / name
2759 * @return not 0:state-object ID no.(c-wrapper local ID)
2762 extern "C" int ico_sttm_retrieveSVal(int smCWId, int value)
2764 sttmerr = STTMNOERROR;
2765 CicoStateMachine* csm;
2766 csm = ico_sttm_getStateMachineX(smCWId, "ico_sttm_retrieveSVal");
2767 if ((CicoStateMachine*)0 == csm) {
2770 const CicoStateCore* csc = csm->getState(value);
2771 if ((CicoStateCore*)0 == csc) {
2772 _DBG("ico_sttm_retrieveSVal %d, >>%d<<", smCWId, value);
2775 return getObjSTT2ID(csc);
2778 extern "C" int ico_sttm_retrivevSName(int smCWId, const char* name)
2780 sttmerr = STTMNOERROR;
2781 CicoStateMachine* csm;
2782 csm = ico_sttm_getStateMachineX(smCWId, "ico_sttm_retrivevSName");
2783 if ((CicoStateMachine*)0 == csm) {
2786 const CicoStateCore* csc = csm->getState(name);
2787 if ((CicoStateCore*)0 == csc) {
2788 _DBG("ico_sttm_retrivevSName %d, >>%s<<", smCWId, name);
2791 return getObjSTT2ID(csc);
2796 * @brief object check
2797 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
2798 * @return not 0:stateMachine-object
2799 * @ 0:no stateMachine-object
2801 extern "C" int ico_sttm_isStateMachine(int smCWId)
2803 sttmerr = STTMNOERROR;
2804 CicoStateCore* cscTarget = getID2ObjSTT(smCWId); // ID to state-object
2805 if ((CicoStateCore*)0 == cscTarget) {
2806 sttmerr = STTMNOTFIND;
2807 _DBG("ico_sttm_isStateMachine >>%d<<", smCWId);
2810 return cscTarget->isStateMachine()? smCWId:0;
2814 * @brief object check
2815 * @param sCWId state-object ID no.(c-wrapper local ID)
2816 * @return not 0:state-object
2817 * @ 0:no state-object
2819 extern "C" int ico_sttm_isState(int sCWId)
2821 sttmerr = STTMNOERROR;
2822 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
2823 if ((CicoStateCore*)0 == cscTarget) {
2824 sttmerr = STTMNOTFIND;
2825 _DBG("ico_sttm_isState >>%d<<", sCWId);
2828 return cscTarget->isState()? sCWId:0;
2833 * @brief object check
2834 * @param sCWId historyState-object ID no.(c-wrapper local ID)
2835 * @return not 0:state-object
2836 * @ 0:no state-object
2838 extern "C" int ico_sttm_isHistoryState(int sCWId)
2840 sttmerr = STTMNOERROR;
2841 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
2842 if ((CicoStateCore*)0 == cscTarget) {
2843 sttmerr = STTMNOTFIND;
2844 _DBG("ico_sttm_isHistoryState >>%d<<", sCWId);
2847 return cscTarget->isHistoryState()? sCWId:0;
2852 * @brief object check
2853 * @param sCWId finalState-object ID no.(c-wrapper local ID)
2854 * @return not 0:state-object
2855 * @ 0:no state-object
2857 extern "C" int ico_sttm_isFinalState(int sCWId)
2859 sttmerr = STTMNOERROR;
2860 CicoStateCore* cscTarget = getID2ObjSTT(sCWId); // ID to state-object
2861 if ((CicoStateCore*)0 == cscTarget) {
2862 sttmerr = STTMNOTFIND;
2863 _DBG("ico_sttm_isFinalState >>%d<<", sCWId);
2866 return cscTarget->isFinalState()? sCWId:0;
2870 * @brief get state-object running
2871 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
2872 * @param X[] Enter the active state-objects(c-wrapper local ID) or value or name
2873 * @param size of array sCWIds or values or names
2874 * @param value true:get value false:get c-wrapper ID
2875 * @param p top or all or bottom get position is getCurrentState parameter
2876 * @param fname call function name
2877 * @return Number of registered X
2880 int ico_sttm_getActiveStateX(int smCWId, int X[], size_t arysz, bool value,
2881 CicoStateCore::E_GetPolicy p, const char* fname)
2883 CicoStateMachine* csm;
2884 csm = ico_sttm_getStateMachineX(smCWId, fname);
2885 if ((CicoStateMachine*)0 == csm) {
2888 std::vector<const CicoState*> stt;
2889 if (false == csm->getCurrentState(stt, p)) {
2890 _DBG("%s NO ACTIVE STATEMACHINE(\"%s\":%d)",fname,
2891 csm->getName().c_str(), csm->getValue());
2895 int sz = stt.size();
2896 for (int i = 0; i < sz; i++) {
2897 if ( r >= (int)arysz ) {
2899 break; // break of for i<sz
2901 if (true == value) {
2902 X[r] = stt[i]->getValue(); // set state-object value
2906 X[r] = getObjSTT2ID(stt[i]); // set state-object C-wrapper local ID
2913 sttmerr = STTMNOTFIND;
2914 _DBG("%s get size %d -> %d",fname, sz, r);
2919 int ico_sttm_getActiveState_NX(int smCWId, const char* X[], size_t arysz,
2920 CicoStateCore::E_GetPolicy p, const char* fname)
2922 CicoStateMachine* csm;
2923 csm = ico_sttm_getStateMachineX(smCWId, fname);
2924 if ((CicoStateMachine*)0 == csm) {
2927 std::vector<const CicoState*> stt;
2928 if (false == csm->getCurrentState(stt, p)) {
2929 _DBG("%s NO ACTIVE STATEMACHINE(\"%s\":%d)",fname,
2930 csm->getName().c_str(), csm->getValue());
2934 int sz = stt.size();
2935 for (int i = 0; i < sz; i++) {
2936 if ( r >= (int)arysz ) {
2938 break; // break of for i<sz
2940 X[r] = stt[i]->getName().c_str(); // set state-object name
2944 sttmerr = STTMNOTFIND;
2945 _DBG("%s get size %d -> %d",fname, sz, r);
2953 * @brief get state-object running true
2954 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
2955 * @param sCWIds[] Enter the active state-objects(c-wrapper local ID)
2956 * @param values[] Enter the active state-objects value
2957 * @param names[] Enter the active state-objects names
2958 * @param size of array sCWIds or values or names
2959 * @return Number of registered sCWIds
2962 extern "C" int ico_sttm_getActiveState(int smCWId, int sCWIds[], size_t sz)
2964 sttmerr = STTMNOERROR;
2965 return ico_sttm_getActiveStateX(smCWId, sCWIds, sz, false,
2966 CicoStateCore::ELvlBttm,
2967 "ico_sttm_getActiveState");
2970 extern "C" int ico_sttm_getActiveState_V(int smCWId, int values[], size_t sz)
2972 sttmerr = STTMNOERROR;
2973 return ico_sttm_getActiveStateX(smCWId, values, sz, true,
2974 CicoStateCore::ELvlBttm,
2975 "ico_sttm_getActiveState_V");
2978 extern "C" int ico_sttm_getActiveStateVV(int smVal, int values[], size_t sz)
2980 sttmerr = STTMNOERROR;
2981 int id = ico_sttm_retrieveMVal(smVal);
2983 sttmerr = STTMNOTFIND;
2984 _DBG("ico_sttm_getActiveStateVV >>%d<<, ., %d", smVal, sz);
2987 return ico_sttm_getActiveStateX(id, values, sz, true,
2988 CicoStateCore::ELvlBttm,
2989 "ico_sttm_getActiveStateVV");
2992 extern "C" int ico_sttm_getActiveState_N(int smCWId, const char* names[],
2995 sttmerr = STTMNOERROR;
2996 return ico_sttm_getActiveState_NX(smCWId, names, sz,
2997 CicoStateCore::ELvlBttm,
2998 "ico_sttm_getActiveState_N");
3001 extern "C" int ico_sttm_getActiveStateNN(const char* smNm, const char* names[],
3004 sttmerr = STTMNOERROR;
3005 int id = ico_sttm_retrieveMName(smNm);
3007 sttmerr = STTMNOTFIND;
3008 _DBG("ico_sttm_getActiveStateNN >>%s<<, ., %d", smNm, sz);
3011 return ico_sttm_getActiveState_NX(id, names, sz,
3012 CicoStateCore::ELvlBttm,
3013 "ico_sttm_getActiveStateNN");
3017 * @brief get state-object running directly under
3018 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
3019 * @param sCWIds[] Enter the active state-objects(c-wrapper local ID)
3020 * @param values[] Enter the active state-objects value
3021 * @param names[] Enter the active state-objects names
3022 * @param size of array sCWIds or values or names
3023 * @return Number of registered sCWIds
3026 extern "C" int ico_sttm_getActiveStateDirectlyUnder(int smCWId, int sCWIds[],
3029 sttmerr = STTMNOERROR;
3030 return ico_sttm_getActiveStateX(smCWId, sCWIds, sz, false,
3031 CicoStateCore::ELvlTop,
3032 "ico_sttm_getActiveStateDirectlyUnder");
3034 extern "C" int ico_sttm_getActiveStateDirectlyUnder_V(int smCWId,
3038 sttmerr = STTMNOERROR;
3039 return ico_sttm_getActiveStateX(smCWId, values, sz, true,
3040 CicoStateCore::ELvlTop,
3041 "ico_sttm_getActiveStateDirectlyUnder_V");
3044 extern "C" int ico_sttm_getActiveStateDirectlyUnderVV(int smVal, int values[],
3047 sttmerr = STTMNOERROR;
3048 int id = ico_sttm_retrieveMVal(smVal);
3050 sttmerr = STTMNOTFIND;
3051 _DBG("ico_sttm_getActiveStateDirectlyUnderVV >>%d<<, ., %d",
3055 return ico_sttm_getActiveStateX(id, values, sz, true,
3056 CicoStateCore::ELvlTop,
3057 "ico_sttm_getActiveStateDirectlyUnderVV");
3060 extern "C" int ico_sttm_getActiveStateDirectlyUnder_N(int smCWId,
3061 const char* names[],
3064 sttmerr = STTMNOERROR;
3065 return ico_sttm_getActiveState_NX(smCWId, names, sz,
3066 CicoStateCore::ELvlTop,
3067 "ico_sttm_getActiveStateDirectlyUnder_N");
3070 extern "C" int ico_sttm_getActiveStateDirectlyUnderNN(const char* smNm,
3071 const char* names[],
3074 sttmerr = STTMNOERROR;
3075 int id = ico_sttm_retrieveMName(smNm);
3077 sttmerr = STTMNOTFIND;
3078 _DBG("ico_sttm_getActiveStateDirectlyUnderNN >>%s<<, ., %d", smNm, sz);
3081 return ico_sttm_getActiveState_NX(id, names, sz,
3082 CicoStateCore::ELvlTop,
3083 "ico_sttm_getActiveStateDirectlyUnderNN");
3087 * @brief get state-object running all
3088 * @param smCWId stateMachine-object ID no.(c-wrapper local ID)
3089 * @param smVal value is stateMachine-object identification number
3090 * @param smNm stateMachine-object Identification name
3091 * @param sCWIds[] Enter the active state-objects(c-wrapper local ID)
3092 * @param values[] Enter the active state-objects value
3093 * @param names[] Enter the active state-objects names
3094 * @param size of array sCWIds or values or names
3095 * @return Number of registered sCWIds
3098 extern "C" int ico_sttm_getActiveStateAll(int smCWId, int sCWIds[], size_t sz)
3100 sttmerr = STTMNOERROR;
3101 return ico_sttm_getActiveStateX(smCWId, sCWIds, sz, false,
3102 CicoStateCore::ELvlAll,
3103 "ico_sttm_getActiveStateAll");
3106 extern "C" int ico_sttm_getActiveStateAll_V(int smCWId, int values[],
3109 sttmerr = STTMNOERROR;
3110 return ico_sttm_getActiveStateX(smCWId, values, sz, true,
3111 CicoStateCore::ELvlAll,
3112 "ico_sttm_getActiveStateAll_V");
3115 extern "C" int ico_sttm_getActiveStateAllVV(int smVal, int values[],
3118 sttmerr = STTMNOERROR;
3119 int id = ico_sttm_retrieveMVal(smVal);
3121 sttmerr = STTMNOTFIND;
3122 _DBG("ico_sttm_getActiveStateAllVV >>%d<<, ., %d", smVal, sz);
3125 return ico_sttm_getActiveStateX(id, values, sz, true,
3126 CicoStateCore::ELvlAll,
3127 "ico_sttm_getActiveStateAllVV");
3130 extern "C" int ico_sttm_getActiveStateAll_N(int smCWId, const char* names[],
3133 sttmerr = STTMNOERROR;
3134 return ico_sttm_getActiveState_NX(smCWId, names, sz,
3135 CicoStateCore::ELvlAll,
3136 "ico_sttm_getActiveStateAll_N");
3139 extern "C" int ico_sttm_getActiveStateAllNN(const char* smNm,
3140 const char* names[], size_t sz)
3142 sttmerr = STTMNOERROR;
3143 int id = ico_sttm_retrieveMName(smNm);
3145 sttmerr = STTMNOTFIND;
3146 _DBG("ico_sttm_getActiveStateAllNN >>%s<<, ., %d", smNm, sz);
3149 return ico_sttm_getActiveState_NX(id, names, sz,
3150 CicoStateCore::ELvlAll,
3151 "ico_sttm_getActiveStateAllNN");
3155 * @brief get name value
3156 * @param CWId stateMachine-object/state-object ID no.(c-wrapper local ID)
3159 extern "C" const char* ico_sttm_getName(int CWId)
3161 sttmerr = STTMNOERROR;
3162 CicoStateCore* cscTarget = getID2ObjSTT(CWId); // CWId to state-object
3163 if ((CicoStateCore*)0 == cscTarget) {
3164 sttmerr = STTMNOTFIND;
3165 _DBG("ico_sttm_getName >>%d<<", CWId);
3168 return cscTarget->getName().c_str();
3173 * @param CWId stateMachine-object/state-object ID no.(c-wrapper local ID)
3176 extern "C" int ico_sttm_getValue(int CWId)
3178 sttmerr = STTMNOERROR;
3179 CicoStateCore* cscTarget = getID2ObjSTT(CWId); // ID to state-object
3180 if ((CicoStateCore*)0 == cscTarget) {
3181 sttmerr = STTMNOTFIND;
3182 _DBG("ico_sttm_getValue >>%d<<", CWId);
3185 return cscTarget->getValue();
3189 * @brief get error code
3190 * @return error code
3192 StateMachineCWrapperErr_E ico_sttm_errcode()
3198 * @breif get operation state
3199 * @param smCWId ID no. to eb registered stateMachine-object(c-wrapper local ID)
3200 * @param sCWId ID no. to be registered(c-wrapper local ID)
3201 * @param value value is state-object identification number
3202 * @param name name is state-object Identification name
3203 * @return OPERATION_STATE_E
3205 extern "C" OPERATION_STATE_E ico_sttm_isActiveSttM(int smCWId)
3207 return ico_sttm_isActiveStt(smCWId);
3213 extern "C" OPERATION_STATE_E ico_sttm_isActiveStt(int sCWId)
3215 sttmerr = STTMNOERROR;
3216 int sz = stateObjects.size();
3217 if ((0 < sCWId) && (sCWId <= sz)) {
3218 if (true == stateObjects[sCWId-1]->isActive()) {
3219 return E_STT_ACTIVE;
3223 sttmerr = STTMPARAMERR;
3225 return E_STT_INACTIVE;
3228 extern "C" OPERATION_STATE_E ico_sttm_isActive_V(int smCWId, int value)
3230 sttmerr = STTMNOERROR;
3231 int lid = ico_sttm_retrieveSVal(smCWId, value);
3233 return ico_sttm_isActiveStt(lid);
3236 sttmerr = STTMNOTFIND;
3238 return E_STT_INACTIVE;
3241 extern "C" OPERATION_STATE_E ico_sttm_isActiveVV(int smVal, int value)
3243 sttmerr = STTMNOERROR;
3244 int id = ico_sttm_retrieveMVal(smVal);
3246 sttmerr = STTMNOTFIND;
3247 _DBG("ico_sttm_isActiveVV >>%d<<, %d", smVal, value);
3248 return E_STT_INACTIVE;
3250 return ico_sttm_isActive_V(id, value);
3253 extern "C" OPERATION_STATE_E ico_sttm_isActive_N(int smCWId, const char* name)
3255 sttmerr = STTMNOERROR;
3256 int lid = ico_sttm_retrivevSName(smCWId, name);
3258 return ico_sttm_isActiveStt(lid);
3261 sttmerr = STTMNOTFIND;
3263 return E_STT_INACTIVE;
3266 extern "C" OPERATION_STATE_E ico_sttm_isActiveNN(const char* smNm,
3269 sttmerr = STTMNOERROR;
3270 int id = ico_sttm_retrieveMName(smNm);
3272 sttmerr = STTMNOTFIND;
3273 _DBG("ico_sttm_isActiveNN >>%s<<, %s", smNm, name);
3274 return E_STT_INACTIVE;
3276 return ico_sttm_isActive_N(id, name);