00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 #ifndef _MOBILEC_H_
00126 #define _MOBILEC_H_
00127
00128 #include "macros.h"
00129
00130 #ifdef WIN32
00131 #ifdef _MC_DLL
00132
00133 #define EXPORTMC _declspec(dllexport)
00134 #else
00135
00136 #define EXPORTMC
00137 #endif
00138 #else
00139
00140 #define EXPORTMC
00141 #endif
00142
00143
00144
00145 #define MC_Wait(arg1) \
00146 MC_MainLoop(arg1)
00147
00148 #include <embedch.h>
00149 #ifdef __cplusplus
00150 extern "C" {
00151 #endif
00152
00153 #ifndef _ERROR_CODE_E_
00154 #define _ERROR_CODE_E_
00155
00156
00157
00158
00159 typedef enum error_code_e {
00160 MC_SUCCESS = 0,
00161 MC_ERR,
00162 MC_ERR_CONNECT,
00163 MC_ERR_PARSE,
00164 MC_ERR_EMPTY,
00165 MC_ERR_INVALID,
00166 MC_ERR_INVALID_ARGS,
00167 MC_ERR_NOT_FOUND,
00168 MC_ERR_MEMORY,
00169 MC_ERR_SEND,
00170 MC_WARN_DUPLICATE
00171 } error_code_t;
00172 #endif
00173
00177 enum MC_ThreadIndex_e{
00178 MC_THREAD_DF=0,
00179 MC_THREAD_AMS,
00180 MC_THREAD_ACC,
00181 MC_THREAD_CP,
00182 MC_THREAD_AGENT,
00183 MC_THREAD_ALL };
00184
00185
00189 typedef enum MC_SteerCommand_e {
00190 MC_RUN = 0,
00191 MC_SUSPEND,
00192 MC_RESTART,
00193 MC_STOP
00194 } MC_SteerCommand_t;
00195
00204 enum MC_Signal_e{
00205 MC_NO_SIGNAL =0x00,
00206 MC_RECV_CONNECTION=0x01,
00207 MC_RECV_MESSAGE =0x02,
00208 MC_RECV_AGENT =0x04,
00209 MC_RECV_RETURN =0x08,
00210 MC_EXEC_AGENT =0x10,
00211 MC_ALL_SIGNALS =0x20
00212 };
00213
00217 typedef struct agency_s {
00218 int client;
00219 int server;
00220 char *hostName;
00221 char *filename;
00222 int portno;
00223 int portnoc;
00224 int initInterps;
00225 struct mc_platform_s* mc_platform;
00226 int default_agentstatus;
00227 int threads;
00228 int enable_security;
00229 int stack_size[MC_THREAD_ALL];
00230 int bluetooth;
00231
00232 char* priv_key_filename;
00233 char* known_host_filename;
00234 error_code_t last_error;
00235 } agency_t;
00236 typedef agency_t* agency_p;
00237 typedef agency_p MCAgency_t;
00238
00242 typedef struct MCAgencyOptions_s{
00243 int threads;
00244 int default_agent_status;
00245 int modified;
00246 int enable_security;
00247 unsigned char passphrase[32];
00249
00250 int stack_size[MC_THREAD_ALL];
00252 char *known_host_filename;
00253 char *priv_key_filename;
00254 int initInterps;
00255 int bluetooth;
00256 ChOptions_t* ch_options;
00257 } MCAgencyOptions_t;
00258
00259 typedef struct stationary_agent_info_s{
00260 void* args;
00261 struct agent_s* agent;
00262 MCAgency_t attr;
00263 MCAgency_t agency;
00264 THREAD_T thread;
00265 } stationary_agent_info_t;
00266
00267 #ifndef AGENT_T
00268 #define AGENT_T
00269 typedef struct agent_s agent_t;
00270 typedef agent_t* MCAgent_t;
00271 typedef agent_t* agent_p;
00272 #endif
00273
00274 enum MC_AgentType_e{ MC_NONE = -1, MC_REMOTE_AGENT = 0, MC_LOCAL_AGENT, MC_RETURN_AGENT };
00275
00279 enum MC_AgentStatus_e{
00280 MC_NO_STATUS = -1,
00281 MC_WAIT_CH = 0,
00282 MC_WAIT_MESSGSEND,
00283 MC_AGENT_ACTIVE,
00284 MC_AGENT_NEUTRAL,
00285 MC_AGENT_SUSPENDED,
00286 MC_WAIT_FINISHED
00287 };
00288
00290 struct fipa_acl_message_s;
00291 #ifndef _FIPA_PERFORMATIVE_E_
00292 #define _FIPA_PERFORMATIVE_E_
00293 enum fipa_performative_e
00294 {
00295 FIPA_ERROR=-1,
00296 FIPA_ZERO,
00297 FIPA_ACCEPT_PROPOSAL,
00298 FIPA_AGREE,
00299 FIPA_CANCEL,
00300 FIPA_CALL_FOR_PROPOSAL,
00301 FIPA_CONFIRM,
00302 FIPA_DISCONFIRM,
00303 FIPA_FAILURE,
00304 FIPA_INFORM,
00305 FIPA_INFORM_IF,
00306 FIPA_INFORM_REF,
00307 FIPA_NOT_UNDERSTOOD,
00308 FIPA_PROPOGATE,
00309 FIPA_PROPOSE,
00310 FIPA_PROXY,
00311 FIPA_QUERY_IF,
00312 FIPA_QUERY_REF,
00313 FIPA_REFUSE,
00314 FIPA_REJECT_PROPOSAL,
00315 FIPA_REQUEST,
00316 FIPA_REQUEST_WHEN,
00317 FIPA_REQUEST_WHENEVER,
00318 FIPA_SUBSCRIBE
00319 };
00320 #endif
00321
00329 EXPORTMC int
00330 MC_AclDestroy(struct fipa_acl_message_s* message);
00331
00337 EXPORTMC extern struct fipa_acl_message_s*
00338 MC_AclNew(void);
00339
00348 EXPORTMC extern int MC_AclPost(MCAgent_t agent, struct fipa_acl_message_s* message);
00349
00360 EXPORTMC extern struct fipa_acl_message_s*
00361 MC_AclReply(struct fipa_acl_message_s* acl_message);
00362
00370 EXPORTMC extern struct fipa_acl_message_s* MC_AclRetrieve(MCAgent_t agent);
00371
00380 EXPORTMC extern int MC_AclSend(MCAgency_t attr, struct fipa_acl_message_s* acl);
00381
00389 EXPORTMC extern struct fipa_acl_message_s* MC_AclWaitRetrieve(MCAgent_t agent);
00390
00391
00392 enum fipa_performative_e;
00393 enum fipa_protocol_e;
00394
00395 EXPORTMC enum fipa_protocol_e MC_AclGetProtocol(
00396 struct fipa_acl_message_s* acl);
00397
00398 EXPORTMC char* MC_AclGetConversationID(
00399 struct fipa_acl_message_s* acl);
00400
00401 EXPORTMC enum fipa_performative_e MC_AclGetPerformative(
00402 struct fipa_acl_message_s* acl);
00403
00404 EXPORTMC int MC_AclGetSender(
00405 struct fipa_acl_message_s* acl,
00406 char** name,
00407
00408 char** address
00409
00410 );
00411
00412 EXPORTMC const char* MC_AclGetContent(
00413 struct fipa_acl_message_s* acl);
00414
00415 EXPORTMC int MC_AclSetProtocol(
00416 struct fipa_acl_message_s* acl,
00417 enum fipa_protocol_e performative );
00418
00419 EXPORTMC int MC_AclSetConversationID(
00420 struct fipa_acl_message_s* acl,
00421 char* id);
00422
00423 EXPORTMC int MC_AclSetPerformative(
00424 struct fipa_acl_message_s* acl,
00425 enum fipa_performative_e performative );
00426
00427 EXPORTMC int MC_AclSetSender(
00428 struct fipa_acl_message_s* acl,
00429 const char* name,
00430 const char* address );
00431
00432 EXPORTMC int MC_AclAddReceiver(
00433 struct fipa_acl_message_s* acl,
00434 const char* name,
00435 const char* address );
00436
00437 EXPORTMC int MC_AclAddReplyTo(
00438 struct fipa_acl_message_s* acl,
00439 const char* name,
00440 const char* address);
00441
00442 EXPORTMC int MC_AclSetContent(
00443 struct fipa_acl_message_s* acl,
00444 const char* content );
00445
00446
00447
00448
00457 EXPORTMC extern int MC_AddAgent(
00458 MCAgency_t attr,
00459 MCAgent_t agent);
00460
00461
00462 int MC_AddStationaryAgent(
00463 MCAgency_t agency,
00464 void* (*agent_thread)(stationary_agent_info_t*),
00465 const char* name,
00466 void* agent_args);
00467
00468
00481 int MC_AgentAddTask(
00482 MCAgent_t agent,
00483 const char* code,
00484 const char* return_var_name,
00485 const char* server,
00486 int persistent);
00487
00500 int MC_AgentAddTaskFromFile(
00501 MCAgent_t agent,
00502 const char* filename,
00503 const char* return_var_name,
00504 const char* server,
00505 int persistent);
00506
00515 extern MCAgency_t
00516 MC_AgentInfo_GetAgency(stationary_agent_info_t* stationary_agent_info);
00517
00528 extern MCAgent_t
00529 MC_AgentInfo_GetAgent(stationary_agent_info_t* stationary_agent_info);
00530
00539 extern void*
00540 MC_AgentInfo_GetAgentArgs(stationary_agent_info_t* stationary_agent_info);
00541
00550 extern int MC_AgentReturnArrayDim(
00551 MCAgent_t agent,
00552 int task_num );
00553
00563 extern int MC_AgentReturnArrayExtent(
00564 MCAgent_t agent,
00565 int task_num,
00566 int index);
00567
00577 extern int MC_AgentReturnArrayNum(
00578 MCAgent_t agent,
00579 int task_num);
00580
00590 extern const void* MC_AgentReturnDataGetSymbolAddr(
00591 MCAgent_t agent,
00592 int task_num );
00593
00602 extern size_t MC_AgentReturnDataSize(
00603 MCAgent_t agent,
00604 int task_num );
00605
00615 extern int MC_AgentReturnDataType(
00616 MCAgent_t agent,
00617 int task_num );
00618
00628 extern int MC_AgentReturnIsArray(
00629 MCAgent_t agent,
00630 int task_num );
00631
00647 extern const void*
00648 MC_AgentVariableRetrieve(
00649 MCAgent_t agent,
00650 const char* var_name,
00651 int task_num);
00652
00667 int
00668 MC_AgentVariableRetrieveInfo(
00669 MCAgent_t agent,
00670 const char* var_name,
00671 int task_num,
00672 const void** data,
00673 int* dim,
00674 const int** extent
00675 );
00676
00694 extern int
00695 MC_AgentVariableSave(MCAgent_t agent, const char* var_name);
00696
00697 EXPORTMC int
00698 MC_Barrier(MCAgency_t attr, int id);
00699
00709 EXPORTMC extern int MC_BarrierDelete(MCAgency_t attr, int id);
00710
00726 EXPORTMC extern int MC_BarrierInit(MCAgency_t attr, int id, int num_procs);
00727
00736 #ifdef OBS
00737 EXPORTMC extern int MC_ChInitializeOptions(MCAgency_t attr, ChOptions_t *options);
00738 #endif
00739
00740
00756 EXPORTMC int
00757 MC_CallAgentFunc(
00758 MCAgent_t agent,
00759 const char* funcName,
00760 void* returnVal,
00761 int numArgs,
00762 ...);
00763
00780 EXPORTMC extern int MC_CallAgentFuncArg(
00781 MCAgent_t agent,
00782 const char* funcName,
00783 void* returnVal,
00784 void* arg
00785 );
00786
00797 EXPORTMC extern int MC_CallAgentFuncV(
00798 MCAgent_t agent,
00799 const char* funcName,
00800 void* returnVal,
00801 va_list ap);
00802
00803
00804
00805
00806
00807
00808
00809
00810 EXPORTMC extern int MC_CallAgentFuncVar
00811 (
00812 MCAgent_t agent,
00813 const char* funcName,
00814 void* returnVal,
00815 ChVaList_t arglist
00816 );
00817
00818
00832 EXPORTMC extern MCAgent_t
00833 MC_ComposeAgent(
00834 const char* name,
00835 const char* home,
00836 const char* owner,
00837 const char* code,
00838 const char* return_var_name,
00839 const char* server,
00840 int persistent
00841 );
00842
00859 EXPORTMC extern MCAgent_t
00860 MC_ComposeAgentS(
00861 const char* name,
00862 const char* home,
00863 const char* owner,
00864 const char* code,
00865 const char* return_var_name,
00866 const char* server,
00867 int persistent,
00868 const char* workgroup_code
00869 );
00870
00886 EXPORTMC extern MCAgent_t
00887 MC_ComposeAgentWithWorkgroup(
00888 const char* name,
00889 const char* home,
00890 const char* owner,
00891 const char* code,
00892 const char* return_var_name,
00893 const char* server,
00894 int persistent,
00895 const char* workgroup_code
00896 );
00897
00912 EXPORTMC extern MCAgent_t
00913 MC_ComposeAgentFromFile(
00914 const char* name,
00915 const char* home,
00916 const char* owner,
00917 const char* filename,
00918 const char* return_var_name,
00919 const char* server,
00920 int persistent
00921 );
00922
00940 EXPORTMC extern MCAgent_t
00941 MC_ComposeAgentFromFileS(
00942 const char* name,
00943 const char* home,
00944 const char* owner,
00945 const char* filename,
00946 const char* return_var_name,
00947 const char* server,
00948 int persistent,
00949 const char* workgroup_code
00950 );
00951
00967 EXPORTMC extern MCAgent_t
00968 MC_ComposeAgentFromFileWithWorkgroup(
00969 const char* name,
00970 const char* home,
00971 const char* owner,
00972 const char* filename,
00973 const char* return_var_name,
00974 const char* server,
00975 int persistent,
00976 const char* workgroup_code
00977 );
00978
00989 EXPORTMC extern int MC_CondBroadcast(MCAgency_t attr, int id);
00990
01006 EXPORTMC extern int MC_CondSignal(MCAgency_t attr, int id);
01007
01018 EXPORTMC extern int MC_CondReset(MCAgency_t attr, int id);
01019
01033 EXPORTMC extern int MC_CondWait(MCAgency_t attr, int id);
01034
01044 int MC_CopyAgent(MCAgent_t* agent_out, const MCAgent_t agent_in);
01045
01054 EXPORTMC extern int MC_DeleteAgent(MCAgent_t agent);
01055
01067 EXPORTMC extern int MC_DeleteAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01068
01079 EXPORTMC extern int MC_End(MCAgency_t attr);
01080
01091 int MC_DestroyServiceSearchResult(
01092 char** agentName,
01093 char** serviceName,
01094 int* agentID,
01095 int numResult);
01096
01097
01108 EXPORTMC extern MCAgent_t MC_FindAgentByName(MCAgency_t attr, const char *name);
01109
01118 EXPORTMC extern MCAgent_t MC_FindAgentByID(MCAgency_t attr, int ID);
01119
01128 EXPORTMC extern void* MC_GetAgentExecEngine(MCAgent_t agent);
01129
01133 EXPORTMC extern int MC_GetAgentID(MCAgent_t agent);
01134
01135
01136
01137
01138
01139
01140 EXPORTMC extern char* MC_GetAgentName(MCAgent_t agent);
01141
01147 EXPORTMC extern int MC_GetAgentNumTasks(MCAgent_t agent);
01148
01165 EXPORTMC extern int MC_GetAgentReturnData(
01166 MCAgent_t agent,
01167 int task_num,
01168 void **data,
01169 int *dim,
01170 int **extent);
01171
01177 EXPORTMC extern int MC_GetAgentStatus(MCAgent_t agent);
01178
01184 EXPORTMC extern enum MC_AgentType_e MC_GetAgentType(MCAgent_t agent);
01185
01191 EXPORTMC extern char* MC_GetAgentXMLString(MCAgent_t agent);
01192
01200 EXPORTMC extern int MC_HaltAgency(MCAgency_t agency);
01201
01212 EXPORTMC extern MCAgency_t MC_Initialize(
01213 int port,
01214 MCAgencyOptions_t *options);
01215
01228 EXPORTMC extern int MC_InitializeAgencyOptions(struct MCAgencyOptions_s* options);
01229
01235 EXPORTMC extern int MC_MainLoop(MCAgency_t attr);
01236
01245 EXPORTMC extern int MC_LoadAgentFromFile(MCAgency_t attr, const char* filename);
01246
01256 EXPORTMC extern int MC_MigrateAgent(MCAgent_t agent, const char* hostname, int port);
01257
01272 EXPORTMC extern int MC_MutexLock(MCAgency_t attr, int id);
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284 EXPORTMC extern int MC_MutexUnlock(MCAgency_t attr, int id);
01285
01303 EXPORTMC extern int MC_RegisterService(
01304 MCAgency_t agency,
01305
01306
01307
01308 MCAgent_t agent,
01309 int agentID,
01310 const char *agentName,
01311 char **serviceNames,
01312 int numServices);
01313
01321 EXPORTMC extern int MC_ResumeAgency(MCAgency_t agency);
01322
01328 EXPORTMC extern MCAgent_t MC_RetrieveAgent(MCAgency_t attr);
01329
01341 EXPORTMC extern int MC_SemaphorePost(MCAgency_t attr, int id);
01342
01356 EXPORTMC extern int MC_SemaphoreWait(MCAgency_t attr, int id);
01357
01369 EXPORTMC extern int MC_SetDefaultAgentStatus(MCAgency_t agency, enum MC_AgentStatus_e status);
01370
01384 EXPORTMC extern int MC_SetThreadOn(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index);
01385
01394 EXPORTMC extern int MC_SetThreadsAllOn(MCAgencyOptions_t* options);
01395
01409 EXPORTMC extern int MC_SetThreadOff(MCAgencyOptions_t *options, enum MC_ThreadIndex_e index );
01410
01419 EXPORTMC extern int MC_SetThreadsAllOff(MCAgencyOptions_t* options);
01420
01426 EXPORTMC extern int MC_PrintAgentCode(MCAgent_t agent);
01427
01433 EXPORTMC extern char * MC_RetrieveAgentCode(MCAgent_t agent);
01434
01442 EXPORTMC extern int MC_ResetSignal(MCAgency_t attr);
01443
01459 EXPORTMC extern int MC_SearchForService(
01460
01461 MCAgency_t attr,
01462 const char *searchString,
01463
01464 char*** agentNames,
01465 char*** serviceNames,
01466 int** agentIDs,
01467 int* numResults);
01468
01475 EXPORTMC extern int MC_SendAgent(MCAgency_t attr,
01476 const char *message);
01477
01484 EXPORTMC extern int MC_SendAgentFile(MCAgency_t attr,
01485 const char *filename);
01486
01495 EXPORTMC extern int MC_SendAgentMigrationMessage(MCAgency_t attr,
01496 const char *message,
01497 const char *hostname,
01498 int port);
01499
01508 EXPORTMC extern int MC_SendAgentMigrationMessageFile(MCAgency_t attr,
01509 const char *filename,
01510 const char *hostname,
01511 int port);
01512
01521 EXPORTMC extern int MC_SetAgentStatus(MCAgent_t agent, enum MC_AgentStatus_e status);
01522
01538 EXPORTMC extern int MC_Steer( MCAgency_t attr, int (*funcptr)(void* data), void *arg);
01539
01548 EXPORTMC extern enum MC_SteerCommand_e MC_SteerControl(void);
01549
01558 EXPORTMC extern int MC_SyncDelete(MCAgency_t attr, int id);
01559
01575 EXPORTMC extern int MC_SyncInit(MCAgency_t attr, int id);
01576
01582 EXPORTMC extern int MC_TerminateAgent(MCAgent_t agent);
01583
01584
01585 EXPORTMC extern int
01586 MC_TerminateAgentWG(MCAgent_t calling_agent, MCAgent_t agent);
01592
01593
01600 EXPORTMC extern int MC_WaitAgent(MCAgency_t attr);
01601
01610 EXPORTMC extern MCAgent_t MC_WaitRetrieveAgent(MCAgency_t attr);
01611
01625 EXPORTMC extern int MC_WaitSignal(MCAgency_t attr, int signals);
01626
01627 #ifdef __cplusplus
01628 }
01629 #endif
01630
01631 #endif
01632