1 [[PREPROC_HEADER_GUARD_BEGIN]]
4 #include <condition_variable>
12 #include <unordered_map>
17 [[PREPROC_NOPROC_START]]
18 #ifdef _WIN32 // Windows platform
19 #ifdef HC_EXPORTS// Define this when building the DLL
20 #define HC_API __declspec(dllexport)
22 #define HC_API __declspec(dllimport)
24 #else // Non-Windows platforms (Linux, macOS, etc.)
25 #ifdef HC_EXPORTS// Define this when building the shared library
26 #define HC_API __attribute__((visibility("default")))
31 [[PREPROC_NOPROC_END]]
34 #define HC_LOG_DEVICE_NAME_LEN (20)
36 #define HC_SWIG_SHAREDPTR(CLASSNAME)
38 #define HC_CLASS_META(CLASSNAME) \
39 HC_SWIG_SHAREDPTR(CLASSNAME) \
40 static std::string staticClassName() { return #CLASSNAME "\0"; } \
41 virtual std::string className() override { return #CLASSNAME "\0"; } \
43 #define HC_CLASS_META_BASE(CLASSNAME) \
44 HC_SWIG_SHAREDPTR(CLASSNAME) \
45 static std::string staticClassName() { return #CLASSNAME "\0"; } \
46 virtual std::string className() { return #CLASSNAME "\0"; } \
48 #define HC_CLASS_META_BASIC_FACTORY_BASE(CLASSNAME) \
49 virtual std::shared_ptr<CLASSNAME> createSharedPtr() { return std::make_shared<CLASSNAME>(); }
51 #define HC_CLASS_META_BASIC_FACTORY(CLASSNAME, BASECLASSNAME) \
52 virtual std::shared_ptr<BASECLASSNAME> createSharedPtr() override { return std::make_shared<CLASSNAME>(); }
54 #define HC_CLASS_DEVICECOMMANDPACKAGE_META(CLASSNAME) \
55 HC_CLASS_META_BASIC_FACTORY(CLASSNAME, DeviceCommandPackage) \
56 HC_CLASS_META(CLASSNAME) \
58 #define HC_CLASS_DEVICEINFO_META(CLASSNAME, COMMANDSTATUSNAME) COMMANDSTATUSNAME* addCommand(DeviceCommandPackage* package) { auto cs = api->addDeviceCommandDevId(this->apiDeviceId, package); return dynamic_cast<COMMANDSTATUSNAME*>(cs); }
60 #define HC_CLASS_META_NO_BINDINGS(CLASSNAME)//ignore class in python generation.
92 #ifdef HC_API_MACRO_EXCLUDE_DOCS
93 void HC_API signalHandler(
int signum);
103 void HC_API
addLogPath(std::string logFilePath);
107 std::string HC_API getRuntimeLibraryPath();
110 std::string HC_API getRuntimeDependancyPath();
112 #ifdef HC_API_MACRO_EXCLUDE_DOCS
113 void HC_API basicPointerTest(
int* number_in_out);
115 class HC_API ICTestObj {
public:
virtual ~ICTestObj() =
default;
int n = 0; };
116 class HC_API ICDerivedTestObj :
public ICTestObj {
public:
virtual ~ICDerivedTestObj() =
default;
int m = 0;};
117 void HC_API basicObjectTest(ICTestObj* obj);
120 #if defined(HC_API_FEATURE_NETWORKING)
121 void HC_API networkMQTTConnect(std::string brokerHostName,
int port = 1883);
133 void HC_API networkMQTTDisconnect();
137 #ifdef HC_API_MACRO_EXCLUDE_DOCS
138 #ifdef HC_API_MATLAB_BUILD
141 int HC_API matlabArrayTest2(ICTestObj objArray[],
int len);
149 int apiDeviceId = -1;
156 float minPosLimit = 0;
157 float maxPosLimit = 0;
159 float minVelLimit = 1.0f;
160 float maxVelLimit = 50.0f;
162 float minAccLimit = 1.0f;
163 float maxAccLimit = 10.0f;
165 bool isRadial =
false;
167 bool submittedToApi =
false;
178 #ifdef HC_API_FEATURE_NETWORKING
189 float percentFinished = 0.0f;
206 #ifdef HC_API_MACRO_EXCLUDE_DOCS
207 virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo();
210 virtual std::shared_ptr<CommandStatus> createCommandStatus();
219 bool submitted =
false;
233 friend class CommandStatus_Internals;
239 #ifdef HC_API_MACRO_EXCLUDE_DOCS
240 #ifdef HC_API_FEATURE_NETWORKING
260 void markUpdatePackageReady();
264 bool continuous =
false;
269 #ifdef HC_API_MACRO_EXCLUDE_DOCS
270 bool updatePackageReady =
false;
271 std::shared_ptr<DeviceCommandPackage> updatePackage =
nullptr;
272 void copyFromUpdatePackage();
286 #ifdef HC_API_MACRO_EXCLUDE_DOCS
287 #ifdef HC_API_FEATURE_NETWORKING
288 virtual void syncFromNetwork(
CommandStatus* command)
override;
290 virtual std::shared_ptr<CommandStateInfo> createCommandStateInfo()
override;
304 float disp_target = 0.0f;
307 float vel_target = 0.0f;
310 float acc_target = 0.0f;
313 bool disp_absolute =
true;
316 bool trackDisp =
true;
319 bool trackVel =
true;
322 bool trackAcc =
true;
368 #ifdef HC_API_MACRO_EXCLUDE_DOCS
370 int deviceWaitCounter = 0;
372 std::shared_ptr<std::condition_variable> synchronizationNotification;
373 std::shared_ptr<std::mutex> synchronizationMutex;
392 #ifdef HC_API_MACRO_EXCLUDE_DOCS
393 #ifdef HC_API_FEATURE_NETWORKING
394 virtual void cacheOnNetwork(
CommandStatus* commandStatus)
override;
398 float referencePos = 0.0f;
401 float currentTargetPos = 0.0f;
404 float currentPos = 0.0f;
407 float currentTargetVel = 0.0f;
410 float currentVel = 0.0f;
413 float currentTargetAcc = 0.0f;
416 float currentAcc = 0.0f;
425 bool isHomed =
false;
433 virtual bool runFull() = 0;
443 virtual bool runASync() = 0;
449 virtual bool initialize() = 0;
457 virtual bool update(
bool stepped =
false) = 0;
465 virtual bool waitUpdateReady() = 0;
472 virtual bool waitUpdateReadyOrFinished() = 0;
479 virtual void waitFinished() = 0;
483 virtual void stop() = 0;
486 virtual bool isBusy()
const = 0;
489 virtual bool isUpdateStepReady()
const = 0;
492 virtual bool isFinished()
const = 0;
495 virtual bool isCancelled()
const = 0;
498 virtual bool isSuccessful()
const = 0;
504 class CommandStatus_Internals;
515 friend class ControlSystem_Internals;
516 friend class CommandStatus_Internals;
525 virtual bool runFull()
override;
526 virtual bool runASync()
override;
527 virtual bool initialize()
override;
528 virtual bool update(
bool stepped =
false)
override;
529 virtual bool waitUpdateReady()
override;
530 virtual bool waitUpdateReadyOrFinished()
override;
531 virtual void waitFinished()
override;
532 virtual void stop()
override;
533 virtual bool isBusy()
const override;
534 virtual bool isUpdateStepReady()
const override;
535 virtual bool isFinished()
const override;
536 virtual bool isCancelled()
const override;
537 virtual bool isSuccessful()
const override;
541 int deviceApiId()
const;
584 #ifdef HC_API_MACRO_EXCLUDE_DOCS
589 std::shared_ptr<CommandStatus> nextCommand =
nullptr;
591 std::shared_ptr<CommandStatus> prevCommand =
nullptr;
597 std::shared_ptr<CommandStatus_Internals> internals;
600 bool cancelled =
false;
606 std::shared_ptr<CommandStateInfo> stateInfo_;
608 bool autoAdvance =
true;
609 bool finished =
false;
614 bool preUpdateWaiting =
false;
616 int apiCommandId = -1;
617 int apiDeviceId = -1;
625 class DeviceInfo_Internal;
639 #ifdef HC_API_MACRO_EXCLUDE_DOCS
643 bool preLoopCommandCheck(
bool checkCancelled =
true);
646 bool isConnected()
const;
650 void setEnableCommandLogging(
bool enable);
654 void setCommandLoggingLevel(
int level);
656 bool commandLoggingEnabled()
const;
657 int commandLoggingLevel()
const;
673 #ifdef HC_API_MACRO_EXCLUDE_DOCS
675 std::shared_ptr<DeviceInfo_Internal>
internal;
684 bool connected =
false;
685 bool loggingEnabled =
true;
686 int loggingLevel = 0;
713 std::shared_ptr<spdlog::logger> getLogger();
715 std::string loggerName();
719 std::shared_ptr<spdlog::logger> logger;
724 class ControlSystem_Internals;
733 friend class ControlSystem_Internals;
745 virtual void initializeDevices();
754 virtual void unInitialize();
760 void unMuteConsole();
781 DeviceInfo *getDeviceFromAlias(std::string deviceAlias);
788 #ifndef HC_API_MATLAB_PUBLIC_INTERFACE
789 void runFullCommandListSeq(std::vector<CommandStatus *> commandList);
799 void runFullCommandListParallel(std::vector<CommandStatus *> commandList);
805 void runASyncCommandList(std::vector<CommandStatus *> commandList);
811 void waitFinishedCommandList(std::vector<CommandStatus *> commandList);
816 void setCommandCallback(std::shared_ptr<CommandCallbacks> callbackObj);
819 #ifdef HC_API_MACRO_EXCLUDE_DOCS
820 std::shared_ptr<ControlSystem_Internals> internals;
825 #ifdef HC_API_MACRO_EXCLUDE_DOCS
828 void issueNewCommands();
834 DeviceInfo *getDeviceFromDeviceId(
int deviceId);
838 int getDeviceIdFromAlias(std::string alias);
841 std::vector<DeviceInfo*> getAllDevices();
849 std::shared_ptr<CommandCallbacks> mCallbackObj;
869 #ifdef HC_API_MACRO_EXCLUDE_DOCS
875 virtual bool deInit();
879 DeviceInfo* getDeviceInfoFromDeviceId(
int apiDeviceId);
897 void setDisconnectCallback(std::function<
void(
bool)> callback);
910 virtual void disconnect(
bool expected =
false);
921 void setSimulated(
bool simulated);
929 #ifdef HC_API_MACRO_EXCLUDE_DOCS
933 std::vector<DeviceInfo*> mDeviceInfoList;
936 float devicePollPeriodS = 0.1f;
938 std::shared_ptr<std::thread> watchDogThread;
939 bool watchDogEnabled =
false;
944 bool connected =
false;
946 bool initialized =
false;
948 bool simulated =
false;
950 std::function<void(
bool)> disconnectCallback;
962 HC_API MovementCommandPackage *As_MovementCommandPackage(DeviceCommandPackage *obj);
968 Vector3D(
float x,
float y,
float z);
984 [[PREPROC_HEADER_GUARD_END]]