CMSDK  2.0.1
PsyAPI.h
1 #if !defined(_PSYAPI_H_)
2 #define _PSYAPI_H_
3 
4 #include "MemoryManager.h"
5 #include "PsyTime.h"
6 #include "xml_parser.h"
7 #include "DataMessage.h"
8 #include "Subscriptions.h"
9 #include "PsySpace.h"
10 
11 #define CRANKAPI_FAILED 1
12 #define CRANKAPI_INUSE 2
13 #define CRANKAPI_RUNNING 3
14 #define CRANKAPI_IDLE 4
15 
16 #define POST_FAILED -1
17 #define POST_NOSPEC -2
18 #define POST_OUTOFCONTEXT -3
19 
20 #define QUERY_FAILED 1
21 #define QUERY_TIMEOUT 2
22 #define QUERY_NAME_UNKNOWN 3
23 #define QUERY_COMPONENT_UNKNOWN 4
24 #define QUERY_QUERYFAILED 5
25 #define QUERY_SUCCESS 6
26 #define QUERY_NOT_AVAILABLE 7
27 #define QUERY_NOT_REACHABLE 8
28 
29 namespace cmlabs {
30 
31 #define LOG_COMPONENT 8
32 
33 typedef std::pair<DataMessage*, DataMessage*> TriggerAndMessage;
34 
35 class PsyAPI {
36  friend class PsySpace;
37 public:
38 
39  static struct PsyType CTRL_SYSTEM_READY;
40  static struct PsyType CTRL_PROCESS_INITIALISE;
41  static struct PsyType CTRL_PROCESS_GREETING;
42  static struct PsyType CTRL_PROCESS_SHUTDOWN;
43  static struct PsyType CTRL_CONTEXT_CHANGE;
44  static struct PsyType CTRL_SYSTEM_SHUTDOWN;
45  static struct PsyType CTRL_SYSTEM_SHUTTINGDOWN;
46  static struct PsyType CTRL_TRIGGER;
47  static struct PsyType CTRL_QUERY;
48  static struct PsyType CTRL_QUERY_REPLY;
49  static struct PsyType CTRL_PULLCOMPONENTDATA;
50  static struct PsyType CTRL_CREATECUSTOMPAGE;
51  static struct PsyType CTRL_ADDSUBSCRIPTION;
52  static struct PsyType CTRL_RETRIEVESYSTEMIDS;
53  static struct PsyType CTRL_INTERSYSTEM_QUERY;
54  static struct PsyType CTRL_INTERSYSTEM_QUERY_REPLY;
55 
56  // ***************** Constructors *****************
57  // Create and destroy resources
58 
63  PsyAPI(PsySpace* space);
67  ~PsyAPI();
68 
72  static PsyAPI* fromPython(unsigned long long ptr);
73  static const char* fromPythonAddressOf(unsigned long long ptr);
74 
78  bool setAutoDelete(bool autodel);
79 
80  // ***************** System & Status *****************
81  // All system calls
82  // Get or set status info
83 
87  bool isRunning();
88 
95  bool shouldContinue();
102  bool getModuleName(char* name, uint32 maxSize);
107  std::string getCommandlineBasedir();
111  bool setCommandlineBasedir(const char* cmdlineBasedir);
117  std::string getModuleName();
123  std::string getOtherModuleName(uint32 id);
129  uint32 getInputQueueSize();
135  std::string typeToText(PsyType type);
141  std::string contextToText(PsyContext context);
145  bool getCurrentScriptLanguage(char* language, uint32 maxSize);
149  bool getCurrentScript(char* script, uint32 maxSize);
153  bool getCurrentScriptFilename(char* filename, uint32 maxSize);
157  std::string getCurrentScriptLanguage();
161  std::string getCurrentScript();
165  std::string getCurrentScriptFilename();
170  std::set<std::string> getCurrentPostNames();
171 
176  bool hasCurrentSignalName(const char* name);
177 
182  bool hasCurrentQueryName(const char* name);
183 
188  bool hasCurrentRetrieveName(const char* name);
189 
194  bool hasCurrentPostName(const char* name);
195 
196  // ***************** Subscription *****************
197  // Get or delete current subscriptions
198  // Create new subscription
199  // *** Not implemented yet
200 
201 
202 
203  // ***************** Tags *****************
204  // Create, destroy or get info about tags
205  // *** Not implemented yet
206 
207 
208 
209 
210  // ***************** Messaging *****************
221  DataMessage* waitForNewMessage(uint32 ms);
222 
223 
228  std::string getCurrentTriggerName();
229 
235 
236 
248  DataMessage* waitForNewMessage(uint32 ms, const char* &triggerName);
257 
258  // Post output messages
276  int32 postOutputMessage(const char* postName = NULL, DataMessage* msg = NULL);
277 
278  // Post output messages
296  int32 postOutputMessage(PsyType msgType, DataMessage* msg = NULL);
297 
298 
299  // ***************** Signals *****************
308  bool emitSignal(const char* name, DataMessage* msg = NULL);
322  DataMessage* waitForSignal(const char* name, uint32 timeout, uint64 lastReceivedTime = 0);
323 
324 
331  return space->manager->retrieveAllSystemIDs();
332  }
333 
334 
342  bool addSubscription(const char* xml);
343 
344 
345  // ***************** PsyProbe plugins *****************
355  bool addPsyProbeCustomView(const char* name, const char* templateURL);
364  bool removePsyProbeCustomView(const char* name) {
365  return addPsyProbeCustomView(name, "");
366  }
367 
368  // ***************** Own Data *****************
369  // Load, save or delete own persistent data
382  bool setPrivateData(const char* name, const char* data, uint64 size, const char* mimetype = NULL) {
383  return space->manager->componentMemory->setPrivateData(currentCompID, name, data, size, mimetype);
384  }
393  uint64 getPrivateDataSize(const char* name) {
394  return space->manager->componentMemory->getPrivateDataSize(currentCompID, name);
395  }
405  char* getPrivateDataCopy(const char* name, uint64 &size) {
406  return space->manager->componentMemory->getPrivateDataCopy(currentCompID, name, size);
407  }
418  bool getPrivateData(const char* name, char* data, uint64 maxSize) {
419  return space->manager->componentMemory->getPrivateData(currentCompID, name, data, maxSize);
420  }
429  bool deletePrivateData(const char* name) {
430  return space->manager->componentMemory->deletePrivateData(currentCompID, name);
431  }
432 
433  // ***************** Own Parameters *****************
434  // Get, set, reset, create or destroy own parameters
445  bool createParameter(const char* name, const char* val, const char* defaultValue = NULL) {
446  return space->manager->componentMemory->createParameter(currentCompID, name, val, defaultValue);
447  }
459  bool createParameter(const char* name, const char* val, uint32 count, uint32 defaultIndex) {
460  return space->manager->componentMemory->createParameter(currentCompID, name, val, count, defaultIndex);
461  }
472  bool createParameter(const char* name, std::vector<std::string> values, const char* defaultValue = NULL) {
473  return space->manager->componentMemory->createParameter(currentCompID, name, values, defaultValue);
474  }
486  bool createParameter(const char* name, int64* val, uint32 count, uint32 defaultIndex) {
487  return space->manager->componentMemory->createParameter(currentCompID, name, val, count, defaultIndex);
488  }
499  bool createParameter(const char* name, std::vector<std::string> values, int64 defaultValue) {
500  return space->manager->componentMemory->createParameter(currentCompID, name, values, defaultValue);
501  }
512  bool createParameter(const char* name, std::vector<int64> values, int64 defaultValue = 0) {
513  return space->manager->componentMemory->createParameter(currentCompID, name, values, defaultValue);
514  }
525  bool createParameter(const char* name, float64* val, uint32 count, uint32 defaultIndex) {
526  return space->manager->componentMemory->createParameter(currentCompID, name, val, count, defaultIndex);
527  }
538  bool createParameter(const char* name, std::vector<std::string> values, float64 defaultValue) {
539  return space->manager->componentMemory->createParameter(currentCompID, name, values, defaultValue);
540  }
551  bool createParameter(const char* name, std::vector<float64> values, float64 defaultValue = 0) {
552  return space->manager->componentMemory->createParameter(currentCompID, name, values, defaultValue);
553  }
566  bool createParameter(const char* name, int64 val, int64 min = 0, int64 max = 0, int64 interval = 0) {
567  return space->manager->componentMemory->createParameter(currentCompID, name, val, min, max, interval);
568  }
581  bool createParameter(const char* name, float64 val, float64 min = 0, float64 max = 0, float64 interval = 0) {
582  return space->manager->componentMemory->createParameter(currentCompID, name, val, min, max, interval);
583  }
592  bool hasParameter(const char* name) {
593  return space->manager->componentMemory->hasParameter(currentCompID, name);
594  }
603  bool deleteParameter(const char* name) {
604  return space->manager->componentMemory->deleteParameter(currentCompID, name);
605  }
628  uint8 getParameterDataType(const char* name) {
629  return space->manager->componentMemory->getParameterDataType(currentCompID, name);
630  }
639  uint32 getParameterValueSize(const char* name) {
640  return space->manager->componentMemory->getParameterValueSize(currentCompID, name);
641  }
652  bool getParameter(const char* name, char* val, uint32 maxSize) {
653  return space->manager->componentMemory->getParameter(currentCompID, name, val, maxSize);
654  }
663  std::string getParameterString(const char* name) {
664  return space->manager->componentMemory->getParameterString(currentCompID, name);
665  }
676  bool getParameterAsBool(const char* name) {
677  return space->manager->componentMemory->getParameterAsBool(currentCompID, name);
678  }
687  int64 getParameterInt(const char* name) {
688  return space->manager->componentMemory->getParameterInt(currentCompID, name);
689  }
698  float64 getParameterFloat(const char* name) {
699  return space->manager->componentMemory->getParameterFloat(currentCompID, name);
700  }
710  bool getParameter(const char* name, int64& val) {
711  return space->manager->componentMemory->getParameter(currentCompID, name, val);
712  }
722  bool getParameter(const char* name, float64& val) {
723  return space->manager->componentMemory->getParameter(currentCompID, name, val);
724  }
734  bool setParameter(const char* name, const char* val) {
735  return space->manager->componentMemory->setParameter(currentCompID, name, val);
736  }
746  bool setParameter(const char* name, int64 val) {
747  return space->manager->componentMemory->setParameter(currentCompID, name, val);
748  }
758  bool setParameter(const char* name, float64 val) {
759  return space->manager->componentMemory->setParameter(currentCompID, name, val);
760  }
769  bool resetParameter(const char* name) {
770  return space->manager->componentMemory->resetParameter(currentCompID, name);
771  }
782  bool tweakParameter(const char* name, int32 tweak) {
783  return space->manager->componentMemory->tweakParameter(currentCompID, name, tweak);
784  }
785 
786  // ***************** Other Modules' Parameters *****************
787  // Get, set or reset other module's parameters
788  // *** Not implemented yet
789 
790 
791 
792  // ***************** Queries *****************
793  // Query a Data storage devices (Whiteboard, Stream, Catalogue) for data
794  // Named queries in PsySpec may be used
808  uint8 retrieve(std::list<DataMessage*> &result, const char* name, uint32 maxcount = 0, uint32 maxage = 0, uint32 timeout = 5000);
822  uint8 retrieveTimeParam(std::list<DataMessage*> &result, const char* name, uint64 startTime, uint64 endTime = 0, uint32 maxcount = 0, uint32 maxage = 0, uint32 timeout = 5000);
838  uint8 retrieveStringParam(std::list<DataMessage*> &result, const char* name, const char* startString, const char* endString = NULL, uint32 maxcount = 0, uint32 maxage = 0, uint32 timeout = 5000);
854  uint8 retrieveIntegerParam(std::list<DataMessage*> &result, const char* name, int64 startInteger, int64 endInteger = INT64_NOVALUE, uint32 maxcount = 0, uint32 maxage = 0, uint32 timeout = 5000);
870  uint8 retrieveFloatParam(std::list<DataMessage*> &result, const char* name, float64 startFloat, float64 endFloat = FLOAT64_NOVALUE, uint32 maxcount = 0, uint32 maxage = 0, uint32 timeout = 5000);
881  uint8 retrieve(std::list<DataMessage*> &result, RetrieveSpec* spec, uint32 timeout = 5000);
882 
898  uint8 queryCatalog(char** result, uint32 &resultsize, const char* name, const char* query, const char* operation = NULL, const char* data = NULL, uint32 datasize = 0, uint32 timeout = 5000);
899 
911  uint8 queryCatalog(DataMessage** resultMsg, const char* name, DataMessage* msg, uint32 timeout = 5000);
912 
925  uint8 queryRemoteCatalog(DataMessage** resultMsg, const char* componentName, const char* ipAddress, uint16 port, DataMessage* msg, uint32 timeout = 5000);
926 
939  uint8 queryRemoteCatalog(DataMessage** resultMsg, const char* componentName, uint32 ipAddress, uint16 port, DataMessage* msg, uint32 timeout = 5000);
940 
955  uint8 queryRemoteCatalog(DataMessage** resultMsg, uint32& chosenAddress, const char* componentName, uint32* ipAddresses, uint32 numAddresses, uint16 port, DataMessage* msg, uint32 timeout = 5000);
956 
986  bool queryReply(uint32 id, uint8 status, char* data, uint32 size, uint32 count);
997  bool queryReply(uint32 id, uint8 status, DataMessage* msg = NULL);
998 
999  // ***************** Performance *****************
1000  // For querying about performance
1001  // *** Not implemented yet
1002 
1003 
1004 
1005  // ***************** Monitoring *****************
1006  // For providing custom data to monitoring tools
1007  // *** Not implemented yet
1008 
1009 
1010 
1011  // ***************** Supervisor *****************
1012  // API for supervisor modules
1013  // *** Not implemented yet
1014 
1015 
1016  // *** Adds the text to the log file and prints to the system console if level is below threshold for logging
1017  // *** Uses the same formats and parameters like printf(const char *formatstring, ... )
1018  bool logPrint(uint8 level, const char *formatstring, ... );
1019 
1020 private:
1021  PsySpace* space;
1022  utils::Mutex apiMutex;
1023  uint64 startedRunning;
1024  bool shouldContinueRunning;
1025  uint32 currentCrankID;
1026  uint32 currentCompID;
1027  uint32 msgReceivedCount;
1028  uint32 msgInputCount;
1029  uint32 msgSentCount;
1030  uint32 msgPostedCount;
1031  uint64 lastCPUTicks;
1032  uint64 lastWallTime;
1033  uint32 chainCPUTicks;
1034  uint32 chainWallTime;
1035  uint32 chainCount;
1036 
1037  std::queue<TriggerAndMessage> inputQueue;
1038  utils::Semaphore inputQueueSemaphore;
1039 
1040  bool autoDelete;
1041  DataMessage* currentTriggerMsg;
1042  DataMessage* currentMsg;
1043  DataMessage* currentSignalMsg;
1044  TriggerSpec* currentTriggerSpec;
1045  char currentTriggerName[MAXKEYNAMELEN+1];
1046  char commandlineBasedir[MAXCOMMANDLINELEN + 1];
1047 
1048  // Only called by PsySpace
1052  uint64 checkLastWaitForMessage();
1056  uint8 addInputTrigger(uint32 crankID, uint32 compID, DataMessage* trigger, DataMessage* msg);
1060  bool begin();
1064  bool finish();
1068  bool stop();
1069 };
1070 
1071 } // namespace cmlabs
1072 
1073 #endif //_PSYAPI_H_
1074 
uint8 retrieve(std::list< DataMessage *> &result, const char *name, uint32 maxcount=0, uint32 maxage=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:711
std::string getCommandlineBasedir()
Definition: PsyAPI.cpp:93
uint64 getPrivateDataSize(const char *name)
Definition: PsyAPI.h:393
uint8 getParameterDataType(const char *name)
Definition: PsyAPI.h:628
bool shouldContinue()
Definition: PsyAPI.cpp:80
std::string getParameterString(const char *name)
Definition: PsyAPI.h:663
bool tweakParameter(const char *name, int32 tweak)
Definition: PsyAPI.h:782
std::string getCurrentTriggerName()
Definition: PsyAPI.cpp:363
bool removePsyProbeCustomView(const char *name)
Definition: PsyAPI.h:364
Definition: Bitmap.h:7
bool setParameter(const char *name, float64 val)
Definition: PsyAPI.h:758
bool emitSignal(const char *name, DataMessage *msg=NULL)
Definition: PsyAPI.cpp:647
bool setPrivateData(const char *name, const char *data, uint64 size, const char *mimetype=NULL)
Definition: PsyAPI.h:382
bool deletePrivateData(const char *name)
Definition: PsyAPI.h:429
int32 postOutputMessage(const char *postName=NULL, DataMessage *msg=NULL)
Definition: PsyAPI.cpp:514
bool hasCurrentSignalName(const char *name)
Definition: PsyAPI.cpp:173
bool getParameterAsBool(const char *name)
Definition: PsyAPI.h:676
char * getPrivateDataCopy(const char *name, uint64 &size)
Definition: PsyAPI.h:405
Definition: Subscriptions.h:341
bool setParameter(const char *name, int64 val)
Definition: PsyAPI.h:746
bool getParameter(const char *name, int64 &val)
Definition: PsyAPI.h:710
float64 getParameterFloat(const char *name)
Definition: PsyAPI.h:698
std::string getModuleName()
Definition: PsyAPI.cpp:107
Definition: PsySpace.h:63
bool hasParameter(const char *name)
Definition: PsyAPI.h:592
uint8 queryCatalog(char **result, uint32 &resultsize, const char *name, const char *query, const char *operation=NULL, const char *data=NULL, uint32 datasize=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:1064
std::set< std::string > getCurrentPostNames()
Definition: PsyAPI.cpp:213
bool hasCurrentPostName(const char *name)
Definition: PsyAPI.cpp:200
bool createParameter(const char *name, std::vector< std::string > values, float64 defaultValue)
Definition: PsyAPI.h:538
uint8 queryRemoteCatalog(DataMessage **resultMsg, const char *componentName, const char *ipAddress, uint16 port, DataMessage *msg, uint32 timeout=5000)
Definition: PsyAPI.cpp:1008
bool addSubscription(const char *xml)
Definition: PsyAPI.cpp:924
DataMessage * retrieveAllSystemIDs()
Definition: PsyAPI.h:330
bool setParameter(const char *name, const char *val)
Definition: PsyAPI.h:734
uint8 retrieveIntegerParam(std::list< DataMessage *> &result, const char *name, int64 startInteger, int64 endInteger=INT64_NOVALUE, uint32 maxcount=0, uint32 maxage=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:808
uint32 getInputQueueSize()
Definition: PsyAPI.cpp:232
std::string getOtherModuleName(uint32 id)
Definition: PsyAPI.cpp:111
bool setAutoDelete(bool autodel)
Definition: PsyAPI.cpp:484
PsyAPI(PsySpace *space)
Definition: PsyAPI.cpp:22
Definition: Subscriptions.h:125
int64 getParameterInt(const char *name)
Definition: PsyAPI.h:687
bool isRunning()
Definition: PsyAPI.cpp:67
DataMessage * waitForSignal(const char *name, uint32 timeout, uint64 lastReceivedTime=0)
Definition: PsyAPI.cpp:679
DataMessage * waitForNewMessage(uint32 ms)
Definition: PsyAPI.cpp:358
~PsyAPI()
Definition: PsyAPI.cpp:46
bool createParameter(const char *name, const char *val, uint32 count, uint32 defaultIndex)
Definition: PsyAPI.h:459
bool createParameter(const char *name, float64 val, float64 min=0, float64 max=0, float64 interval=0)
Definition: PsyAPI.h:581
Definition: Types.h:207
bool getPrivateData(const char *name, char *data, uint64 maxSize)
Definition: PsyAPI.h:418
bool createParameter(const char *name, std::vector< std::string > values, int64 defaultValue)
Definition: PsyAPI.h:499
bool resetParameter(const char *name)
Definition: PsyAPI.h:769
uint64 getCurrentMessageReceiveTime()
Definition: PsyAPI.cpp:490
bool getParameter(const char *name, char *val, uint32 maxSize)
Definition: PsyAPI.h:652
Definition: Types.h:80
Definition: Utils.h:299
uint8 retrieveStringParam(std::list< DataMessage *> &result, const char *name, const char *startString, const char *endString=NULL, uint32 maxcount=0, uint32 maxage=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:773
std::string contextToText(PsyContext context)
Definition: PsyAPI.cpp:245
bool queryReply(uint32 id, uint8 status, char *data, uint32 size, uint32 count)
Definition: PsyAPI.cpp:1143
bool createParameter(const char *name, std::vector< float64 > values, float64 defaultValue=0)
Definition: PsyAPI.h:551
static PsyAPI * fromPython(unsigned long long ptr)
Definition: PsyAPI.cpp:59
std::string getCurrentScriptLanguage()
Definition: PsyAPI.cpp:119
bool deleteParameter(const char *name)
Definition: PsyAPI.h:603
bool setCommandlineBasedir(const char *cmdlineBasedir)
Definition: PsyAPI.cpp:97
bool hasCurrentQueryName(const char *name)
Definition: PsyAPI.cpp:187
bool addPsyProbeCustomView(const char *name, const char *templateURL)
Definition: PsyAPI.cpp:304
std::string getCurrentScriptFilename()
Definition: PsyAPI.cpp:149
bool createParameter(const char *name, const char *val, const char *defaultValue=NULL)
Definition: PsyAPI.h:445
bool createParameter(const char *name, std::vector< std::string > values, const char *defaultValue=NULL)
Definition: PsyAPI.h:472
std::string typeToText(PsyType type)
Definition: PsyAPI.cpp:241
bool createParameter(const char *name, float64 *val, uint32 count, uint32 defaultIndex)
Definition: PsyAPI.h:525
Definition: Utils.h:276
uint8 retrieveFloatParam(std::list< DataMessage *> &result, const char *name, float64 startFloat, float64 endFloat=FLOAT64_NOVALUE, uint32 maxcount=0, uint32 maxage=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:843
bool hasCurrentRetrieveName(const char *name)
Definition: PsyAPI.cpp:160
bool createParameter(const char *name, std::vector< int64 > values, int64 defaultValue=0)
Definition: PsyAPI.h:512
bool getParameter(const char *name, float64 &val)
Definition: PsyAPI.h:722
bool createParameter(const char *name, int64 *val, uint32 count, uint32 defaultIndex)
Definition: PsyAPI.h:486
bool createParameter(const char *name, int64 val, int64 min=0, int64 max=0, int64 interval=0)
Definition: PsyAPI.h:566
Definition: PsyAPI.h:35
Definition: DataMessage.h:95
std::string getCurrentScript()
Definition: PsyAPI.cpp:134
uint32 getParameterValueSize(const char *name)
Definition: PsyAPI.h:639
PsyContext getCurrentTriggerContext()
Definition: PsyAPI.cpp:367
uint8 retrieveTimeParam(std::list< DataMessage *> &result, const char *name, uint64 startTime, uint64 endTime=0, uint32 maxcount=0, uint32 maxage=0, uint32 timeout=5000)
Definition: PsyAPI.cpp:739