18unsigned int nCallBackCount = 0;
19_fnMobilityCallBack* fnMobilityCallBack;
21int fn_NetSim_Mobility_configure_NodeJoinProfile(
void* xmlNode, NETSIM_ID nDeviceId);
22int fn_NetSim_Mobility_NodeJoinInit(NETSIM_ID nDevIndex);
23int fn_NetSim_Mobility_NodeJoined();
24int fn_NetSim_Mobility_NodeLeaved();
26ANIM_HANDLE animHandle;
27static void init_mobility_animation()
29 animHandle = anim_add_new_menu(NULL,
35 ANIMFILETYPE_GENERIC);
38void add_mobility_animation(NETSIM_ID d,
45 mn.d = DEVICE_CONFIGID(d);
51 animation_add_new_entry(animHandle, ANIM_MOVENODE, &mn);
55_declspec(dllexport)
int fn_NetSim_Mobility_Configure(
void** var)
57 char* tagname = (
char*)var[0];
58 void* xmlNetSimNode = var[2];
59 NETSIM_ID nDeviceId = var[3] ? *((NETSIM_ID*)var[3]) : 0;
60 NETSIM_ID nInterfaceId = var[4] ? *((NETSIM_ID*)var[4]) : 0;
61 LAYER_TYPE nLayerType = var[5] ? *((LAYER_TYPE*)var[5]) : LAYER_NULL;
63 if (!_stricmp(tagname,
"MOBILITY"))
65 MOBILITY_VAR* pstruMobilityVar = (MOBILITY_VAR*)calloc(1,
sizeof * pstruMobilityVar);
67 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->pstruMobVar = pstruMobilityVar;
69 getXmlVar(&szVal, MODEL, xmlNetSimNode, 1, _STRING, Mobility);
71 if (!_stricmp(szVal,
"NO_MOBILITY"))
73 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_NOMOBILITY;
76 else if (!_stricmp(szVal,
"RANDOM_WALK"))
78 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_RANDOMWALK;
80 else if (!_stricmp(szVal,
"RANDOM_WAY_POINT"))
82 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_RANDOMWAYPOINT;
84 else if (!_stricmp(szVal,
"FILE_BASED_MOBILITY"))
86 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_FILEBASEDMOBILITY;
88 else if (!_stricmp(szVal,
"GROUP_MOBILITY"))
90 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_GROUP;
92 else if (!_stricmp(szVal,
"SUMO")) {
93 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_SUMO;
95 else if (!_stricmp(szVal,
"PEDESTRIAN_MOBILITY")) {
96 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_PEDESTRAIN;
100 NetSimxmlError(
"Unknown mobility model", szVal, xmlNetSimNode);
101 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType = MobilityModel_NOMOBILITY;
106 if (NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType == MobilityModel_FILEBASEDMOBILITY)
113 szVal = fn_NetSim_xmlConfig_GetVal(xmlNetSimNode,
"VELOCITY",
114 NETWORK->ppstruDeviceList[nDeviceId-1]->pstruDeviceMobility->nMobilityType!=MobilityModel_SUMO&&
115 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType != MobilityModel_PEDESTRAIN &&
116 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType != MobilityModel_FILEBASEDMOBILITY);
119 pstruMobilityVar->
dVelocity = atof(szVal);
120 NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->dAvgSpeed = atof(szVal);
124 getXmlVar(&pstruMobilityVar->dCalculationInterval, CALCULATION_INTERVAL, xmlNetSimNode, 0, _DOUBLE, Mobility);
125 pstruMobilityVar->dCalculationInterval *= SECOND;
126 if (pstruMobilityVar->dCalculationInterval == 0.0)
128 fnNetSimError(
"Calculation_interval can't be 0. Leads infinite loop. Assigning 1 us");
129 pstruMobilityVar->dCalculationInterval = 1;
132 switch (NETWORK->ppstruDeviceList[nDeviceId - 1]->pstruDeviceMobility->nMobilityType)
134 case MobilityModel_RANDOMWAYPOINT:
137 szVal = fn_NetSim_xmlConfig_GetVal(xmlNetSimNode,
"PAUSE_TIME", 1);
141 pstruMobilityVar->
dLastTime = -1000000 * atof(szVal);
146 case MobilityModel_GROUP:
148 getXmlVar(&pstruMobilityVar->
nGroupId, GROUP_ID, xmlNetSimNode, 1, _INT, Mobility);
149 add_to_group(pstruMobilityVar->
nGroupId, nDeviceId);
152 case MobilityModel_SUMO:
154 extern char* sumoname;
155 extern double step_size;
156 getXmlVar(&pstruMobilityVar->sumoFileName, FILE_NAME, xmlNetSimNode, 1, _STRING, Mobility);
157 sumoname = pstruMobilityVar->sumoFileName;
158 getXmlVar(&pstruMobilityVar->step_size, STEP_SIZE, xmlNetSimNode, 1, _DOUBLE, Mobility);
159 step_size = pstruMobilityVar->step_size;
162 case MobilityModel_PEDESTRAIN:
164 getXmlVar(&pstruMobilityVar->Max_Speed, MAX_SPEED_M_S, xmlNetSimNode, 1, _DOUBLE, Mobility);
165 getXmlVar(&pstruMobilityVar->Min_Speed, MIN_SPEED_M_S, xmlNetSimNode, 1, _DOUBLE, Mobility);
166 getXmlVar(&pstruMobilityVar->Stop_Probability, STOP_PROBABILITY, xmlNetSimNode, 1, _DOUBLE, Mobility);
167 getXmlVar(&pstruMobilityVar->Stop_Duration, STOP_DURATION_S, xmlNetSimNode, 1, _DOUBLE, Mobility);
168 pstruMobilityVar->Stop_Duration *= SECOND;
169 pstruMobilityVar->Pedestrain_Speed = NETSIM_RAND_RN(pstruMobilityVar->Max_Speed, pstruMobilityVar->Min_Speed);
170 pstruMobilityVar->angel = 0;
173 case MobilityModel_FILEBASEDMOBILITY:
175 extern char* mobilityfile;
178 getXmlVar(&pstruMobilityVar->mobilityFileName, OPEN_MOBILITY_FILE, xmlNetSimNode, 1, _STRING, Mobility);
179 mobilityfile = pstruMobilityVar->mobilityFileName;
186 pstruMobilityVar->
ulSeed1 = DEVICE(nDeviceId)->ulSeed[0];
187 pstruMobilityVar->
ulSeed2 = DEVICE(nDeviceId)->ulSeed[1];
189 else if (!_stricmp(tagname,
"NODE_JOIN_PROFILE"))
191 fn_NetSim_Mobility_configure_NodeJoinProfile(xmlNetSimNode, nDeviceId);
193 else if (!_stricmp(tagname,
"PROTOCOL"))
195 fn_NetSim_MObility_configureOffice(xmlNetSimNode);
200_declspec(dllexport)
int fn_NetSim_Mobility_Init(
struct stru_NetSim_Network* NETWORK_Formal,
201 NetSim_EVENTDETAILS* pstruEventDetails_Formal,
202 char* pszAppPath_Formal,
203 char* pszWritePath_Formal,
208 NETWORK = NETWORK_Formal;
209 pstruEventDetails = pstruEventDetails_Formal;
210 pszAppPath = pszAppPath_Formal;
211 pszIOPath = pszWritePath_Formal;
212 nVersion_Type = nVersion_Type;
216 init_mobility_animation();
218 if (nVersion_Type / 10 != VERSION)
220 printf(
"Mobility---Version number mismatch\nDll Version=%d\nNetSim Version=%d\nFileName=%s\nLine=%d\n", VERSION, nVersion_Type / 10, __FILE__, __LINE__);
226 temp = getenv(
"GRID_WIDTH");
230 dGridWidth = atof(temp);
232 dGridWidth = 0xFFFFFFFF;
235 dGridWidth = 0xFFFFFFFF;
238 temp = getenv(
"GRID_LENGTH");
242 dGridLength = atof(temp);
244 dGridLength = 0xFFFFFFFF;
247 dGridLength = 0xFFFFFFFF;
249 temp = getenv(
"ORIGIN_X");
253 dOrigin_X = atof(temp);
260 temp = getenv(
"ORIGIN_Y");
264 dOrigin_Y = atof(temp);
271 dGridMax_x = dOrigin_X + dGridWidth;
272 dGridMax_y = dOrigin_Y + dGridLength;
274 for (nLoop = 0; nLoop < NETWORK->nDeviceCount; nLoop++)
276 fn_NetSim_Mobility_NodeJoinInit(nLoop);
277 if (NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility)
279 MOBILITY_VAR* var = (MOBILITY_VAR*)NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruMobVar;
280 var->ulSeed1 = NETWORK->ppstruDeviceList[nLoop]->ulSeed[0];
281 var->ulSeed2 = NETWORK->ppstruDeviceList[nLoop]->ulSeed[1];
282 switch (NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->nMobilityType)
284 case MobilityModel_NOMOBILITY:
287 case MobilityModel_FILEBASEDMOBILITY:
290 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
291 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
292 FileBasedMobilityReadingFile();
295 case MobilityModel_RANDOMWALK:
296 case MobilityModel_RANDOMWAYPOINT:
297 case MobilityModel_PEDESTRAIN:
299 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
300 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
301 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
302 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
303 pstruEventDetails->dEventTime = 0;
304 pstruEventDetails->dPacketSize = 0;
305 pstruEventDetails->nApplicationId = 0;
306 pstruEventDetails->nDeviceId = nLoop + 1;
307 pstruEventDetails->nDeviceType = NETWORK->ppstruDeviceList[nLoop]->nDeviceType;
308 pstruEventDetails->nEventType = TIMER_EVENT;
309 pstruEventDetails->nInterfaceId = 0;
310 pstruEventDetails->nPacketId = 0;
311 pstruEventDetails->nProtocolId = PROTOCOL_MOBILITY;
312 pstruEventDetails->nSubEventType = 0;
313 pstruEventDetails->pPacket = NULL;
314 fnpAddEvent(pstruEventDetails);
317 case MobilityModel_GROUP:
319 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
320 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
321 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
322 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
325 case MobilityModel_SUMO:
328 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
329 NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition = calloc(1,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
330 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruCurrentPosition);
331 memcpy(NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition, NETWORK->ppstruDeviceList[nLoop]->pstruDevicePosition,
sizeof * NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->pstruNextPosition);
333 pstruEventDetails->dEventTime = 0;
334 pstruEventDetails->dPacketSize = 0;
335 pstruEventDetails->nApplicationId = 0;
336 pstruEventDetails->nDeviceId = nLoop + 1;
337 pstruEventDetails->nDeviceType = NETWORK->ppstruDeviceList[nLoop]->nDeviceType;
338 pstruEventDetails->nEventType = TIMER_EVENT;
339 pstruEventDetails->nInterfaceId = 0;
340 pstruEventDetails->nPacketId = 0;
341 pstruEventDetails->nProtocolId = PROTOCOL_MOBILITY;
342 pstruEventDetails->nSubEventType = 0;
343 pstruEventDetails->pPacket = NULL;
344 fnpAddEvent(pstruEventDetails);
349 fnNetSimError(
"Unknown mobility model %d in fn_NetSim_Mobility_Init\n", NETWORK->ppstruDeviceList[nLoop]->pstruDeviceMobility->nMobilityType);
356 fn_NetSim_Mobility_Group_init();
360_declspec(dllexport)
int fn_NetSim_Mobility_Finish()
364 for (loop = 0; loop < NETWORK->nDeviceCount; loop++)
366 if (NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility)
368 if (NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruMobVar)
370 free(((MOBILITY_VAR*)NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruMobVar)->sumoFileName);
371 free(((MOBILITY_VAR*)NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruMobVar)->mobilityFileName);
372 free((MOBILITY_VAR*)NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruMobVar);
374 if (NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruCurrentPosition)
375 free(NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruCurrentPosition);
376 if (NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruNextPosition)
377 free(NETWORK->ppstruDeviceList[loop]->pstruDeviceMobility->pstruNextPosition);
380 close_mobility_logs();
381 FileBasedMobilityPointersFree();
382 free(fnMobilityCallBack);
386void mobility_pass_position_to_animation(NETSIM_ID devId,
double time, NetSim_COORDINATES* coor)
388 if (coor->corrType == CORRTYPE_MAP)
390 fn_NetSim_Coordinate_ConvertCartesianToMap(coor);
391 add_mobility_animation(devId, time,
392 coor->lat, coor->lon, 0);
394 else if (coor->corrType == CORRTYPE_GEO)
396 fnNetSimError(
"change to appropriate function..\n");
398 fn_NetSim_Coordinate_ConvertCartesianToMap(coor);
399 add_mobility_animation(devId, time,
400 coor->lat, coor->lon, coor->altitude);
404 add_mobility_animation(devId, time,
405 coor->X, coor->Y, coor->Z);
410_declspec(dllexport)
int fn_NetSim_Mobility_Run()
412 switch (pstruEventDetails->nSubEventType)
415 fn_NetSim_MoveGroup();
418 fn_NetSim_Mobility_NodeJoined();
421 fn_NetSim_Mobility_NodeLeaved();
426 double X = NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->pstruCurrentPosition->X;
427 double Y = NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->pstruCurrentPosition->Y;
428 double vel = NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->dAvgSpeed;
429 MOBILITY_VAR* pstruMobilityVar = (MOBILITY_VAR*)NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->pstruMobVar;
430 double dPresentTime = pstruMobilityVar->
dLastTime;
431 if (NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility
432 && NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->nMobilityType == MobilityModel_FILEBASEDMOBILITY)
435 process_filebased_mobility_event();
437 else if (NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility
438 && NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->nMobilityType == MobilityModel_SUMO)
442 else if (NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility
443 && NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility->nMobilityType == MobilityModel_PEDESTRAIN) {
444 NetSim_MOBILITY* mob = NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility;
445 NetSim_COORDINATES* pos = DEVICE_POSITION(pstruEventDetails->nDeviceId);
446 NetSim_COORDINATES* cor = mob->pstruCurrentPosition;
447 NetSim_COORDINATES* ncor = mob->pstruNextPosition;
449 memcpy(cor, ncor,
sizeof * cor);
451 double probability = NETSIM_RAND_01();
452 if (probability < pstruMobilityVar->Stop_Probability) {
453 pstruMobilityVar->Pedestrain_Speed = NETSIM_RAND_RN(pstruMobilityVar->Max_Speed, pstruMobilityVar->Min_Speed);
454 pstruMobilityVar->angel = NETSIM_RAND_RN(360, 0);
457 X = pstruMobilityVar->Pedestrain_Speed * cos(pstruMobilityVar->angel) * (pstruMobilityVar->dCalculationInterval / SECOND) + cor->X;
458 Y = pstruMobilityVar->Pedestrain_Speed * sin(pstruMobilityVar->angel) * (pstruMobilityVar->dCalculationInterval / SECOND) + cor->Y;
459 while (cor->corrType == CORRTYPE_CARTESIAN &&
460 (X > dGridMax_x || X < dOrigin_X || Y < dOrigin_Y || Y > dGridMax_y)) {
461 pstruMobilityVar->Pedestrain_Speed = NETSIM_RAND_RN(pstruMobilityVar->Max_Speed, pstruMobilityVar->Min_Speed);
462 pstruMobilityVar->angel = NETSIM_RAND_RN(360, 0);
463 X = pstruMobilityVar->Pedestrain_Speed * cos(pstruMobilityVar->angel) * (pstruMobilityVar->dCalculationInterval / SECOND) + cor->X;
464 Y = pstruMobilityVar->Pedestrain_Speed * sin(pstruMobilityVar->angel) * (pstruMobilityVar->dCalculationInterval / SECOND) + cor->Y;
476 pstruMobilityVar->
dLastTime = pstruEventDetails->dEventTime + pstruMobilityVar->dCalculationInterval + pstruMobilityVar->Stop_Duration;
478 pstruMobilityVar->
dLastTime = pstruEventDetails->dEventTime + pstruMobilityVar->dCalculationInterval;
481 memcpy(pos, cor,
sizeof * pos);
483 mobility_pass_position_to_animation(pstruEventDetails->nDeviceId,
484 pstruEventDetails->dEventTime,
489 pstruEventDetails->dEventTime = pstruEventDetails->dEventTime + pstruMobilityVar->Stop_Duration + pstruMobilityVar->dCalculationInterval;
490 fnpAddEvent(pstruEventDetails);
491 pstruEventDetails->dEventTime = pstruEventDetails->dEventTime - pstruMobilityVar->Stop_Duration - pstruMobilityVar->dCalculationInterval;
494 pstruEventDetails->dEventTime += pstruMobilityVar->dCalculationInterval;
495 fnpAddEvent(pstruEventDetails);
496 pstruEventDetails->dEventTime -= pstruMobilityVar->dCalculationInterval;
501 NetSim_MOBILITY* mob = NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->pstruDeviceMobility;
502 NetSim_COORDINATES* pos = DEVICE_POSITION(pstruEventDetails->nDeviceId);
503 NetSim_COORDINATES* cor = mob->pstruCurrentPosition;
504 NetSim_COORDINATES* ncor = mob->pstruNextPosition;
506 memcpy(cor, ncor,
sizeof * cor);
507 if (pstruMobilityVar->
dLastTime + pstruMobilityVar->
dPauseTime * SECOND < pstruEventDetails->dEventTime + pstruMobilityVar->dCalculationInterval)
509 fn_NMo_RandomPoint(&X, &Y, vel, pstruMobilityVar->dCalculationInterval, &pstruMobilityVar->
ulSeed1, &pstruMobilityVar->
ulSeed2);
510 while (cor->corrType == CORRTYPE_CARTESIAN &&
511 (X > dGridMax_x || X < dOrigin_X || Y < dOrigin_Y || Y > dGridMax_y))
515 fn_NMo_RandomPoint(&X, &Y, vel, pstruMobilityVar->dCalculationInterval, &pstruMobilityVar->
ulSeed1, &pstruMobilityVar->
ulSeed2);
520 pstruMobilityVar->
dLastTime = pstruEventDetails->dEventTime + pstruMobilityVar->dCalculationInterval;
523 memcpy(pos, cor,
sizeof * pos);
525 mobility_pass_position_to_animation(pstruEventDetails->nDeviceId,
526 pstruEventDetails->dEventTime,
530 pstruEventDetails->dEventTime += pstruMobilityVar->dCalculationInterval;
531 fnpAddEvent(pstruEventDetails);
532 pstruEventDetails->dEventTime -= pstruMobilityVar->dCalculationInterval;
536 for (nLoop = 0; nLoop < nCallBackCount; nLoop++)
538 fnMobilityCallBack[nLoop](pstruEventDetails->nDeviceId);
546_declspec(dllexport)
char* fn_NetSim_Mobility_Trace(NETSIM_ID
id)
560_declspec(dllexport)
int fn_NetSim_Mobility_FreePacket()
564_declspec(dllexport)
int fn_NetSim_Mobility_CopyPacket()
568_declspec(dllexport)
int fn_NetSim_Mobility_Metrics()
572_declspec(dllexport)
int fn_NetSim_Mobility_ConfigurePrimitives()
576_declspec(dllexport)
char* fn_NetSim_Mobility_ConfigPacketTrace()
580_declspec(dllexport)
char* fn_NetSim_Mobility_WritePacketTrace()
585int fn_NMo_RandomPoint(
double* X,
double* Y,
double velocity,
double interval,
unsigned long* pulSeed1,
unsigned long* pulSeed2)
591 ldRandNo = (
unsigned int)fn_NetSim_Utilities_GenerateRandomNo(pulSeed1, pulSeed2);
593 min = (int)(*X - ldRandNo % ((
int)(velocity * interval / SECOND) + 1));
595 ldRandNo = (
unsigned int)fn_NetSim_Utilities_GenerateRandomNo(pulSeed1, pulSeed2);
597 max = (int)(*X + ldRandNo % ((
int)(velocity * interval / SECOND) + 1));
601 *X = max + (int)((min - max + 1) * NETSIM_RAND_01());
605 *X = min + (int)((min - max + 1) * NETSIM_RAND_01());
608 ldRandNo = (
unsigned int)fn_NetSim_Utilities_GenerateRandomNo(pulSeed1, pulSeed2);
610 min = (int)(*Y - ldRandNo % ((
int)(velocity * interval / SECOND) + 1));
612 ldRandNo = (
unsigned int)fn_NetSim_Utilities_GenerateRandomNo(pulSeed1, pulSeed2);
614 max = (int)(*Y + ldRandNo % ((
int)(velocity * interval / SECOND) + 1));
618 *Y = max + (int)((min - max + 1) * NETSIM_RAND_01());
622 *Y = min + (int)((min - max + 1) * NETSIM_RAND_01());
627_declspec(dllexport)
int fnMobilityRegisterCallBackFunction(_fnMobilityCallBack fnCallBack)
631 fnMobilityCallBack = (_fnMobilityCallBack*)calloc(1,
sizeof * fnMobilityCallBack);
635 fnMobilityCallBack = (_fnMobilityCallBack*)realloc(fnMobilityCallBack, (nCallBackCount + 1) *
sizeof * fnMobilityCallBack);
637 fnMobilityCallBack[nCallBackCount] = fnCallBack;
double dPauseTime
To store the pause time.
double dLastTime
Represent the devices last move time.
unsigned long ulSeed1
Used to generate random point.
NETSIM_ID nGroupId
To store group id of device.
unsigned long ulSeed2
Used to generate random point.
double dVelocity
To store the velocity.