18extern unsigned int nCallBackCount;
23 unsigned int nDeviceCount;
27#define GROUP_ALLOC() (GROUP_MOBILITY*)list_alloc(sizeof(GROUP_MOBILITY),offsetof(GROUP_MOBILITY,ele))
28#define GROUP_NEXT(var) var=(GROUP_MOBILITY*)LIST_NEXT(var)
30GROUP_MOBILITY* group = NULL;
32GROUP_MOBILITY* get_group_ptr(NETSIM_ID nGroupId)
34 GROUP_MOBILITY* temp = group;
37 if (temp->nGroupId == nGroupId)
44GROUP_MOBILITY* group_add_new(NETSIM_ID group_id)
46 GROUP_MOBILITY* temp = GROUP_ALLOC();
48 temp->nGroupId = group_id;
49 LIST_ADD_LAST((
void**)&group, temp);
53int add_to_group(NETSIM_ID group_id, NETSIM_ID dev_id)
55 GROUP_MOBILITY* temp = get_group_ptr(group_id);
57 temp = group_add_new(group_id);
59 temp->nDevIds = (NETSIM_ID*)realloc(temp->nDevIds, temp->nDeviceCount *
sizeof(NETSIM_ID));
60 temp->nDevIds[temp->nDeviceCount - 1] = dev_id;
64int fn_NetSim_Mobility_Group_init()
66 GROUP_MOBILITY* temp = group;
69 pstruEventDetails->dEventTime = 0;
70 pstruEventDetails->dPacketSize = 0;
71 pstruEventDetails->nApplicationId = 0;
72 pstruEventDetails->nDeviceId = temp->nGroupId;
73 pstruEventDetails->nDeviceType = Not_Device;
74 pstruEventDetails->nEventType = TIMER_EVENT;
75 pstruEventDetails->nInterfaceId = 0;
76 pstruEventDetails->nPacketId = 0;
77 pstruEventDetails->nProtocolId = PROTOCOL_MOBILITY;
78 pstruEventDetails->nSubEventType = MOVE_GROUP;
79 pstruEventDetails->pPacket = NULL;
80 fnpAddEvent(pstruEventDetails);
85int fnValidateposition(GROUP_MOBILITY* group,
double diff_x,
double diff_y,
bool* flag)
88 if (DEVICE_MOBILITY(group->nDevIds[0])->pstruCurrentPosition->corrType != CORRTYPE_CARTESIAN)
94 for (i = 0; i < group->nDeviceCount; i++)
96 double x = DEVICE_MOBILITY(group->nDevIds[i])->pstruCurrentPosition->X;
97 double y = DEVICE_MOBILITY(group->nDevIds[i])->pstruCurrentPosition->Y;
100 if (x > dGridMax_x || x < dOrigin_X || y < dOrigin_Y || y > dGridMax_y)
107int fn_NetSim_MoveGroup()
112 double x, y, diff_x, diff_y;
113 NETSIM_ID group_id = pstruEventDetails->nDeviceId;
114 GROUP_MOBILITY* group = get_group_ptr(group_id);
116 MOBILITY_VAR* pstruMobilityVar;
117 for (i = 0; i < group->nDeviceCount; i++)
119 NETSIM_ID dev = group->nDevIds[i];
120 memcpy(DEVICE_MOBILITY(dev)->pstruCurrentPosition,
121 DEVICE_MOBILITY(dev)->pstruNextPosition,
122 sizeof * DEVICE_MOBILITY(dev)->pstruCurrentPosition);
124 pstruMobilityVar = (MOBILITY_VAR*)DEVICE_MOBILITY(group->nDevIds[0])->pstruMobVar;
128 NetSim_COORDINATES* curr = DEVICE_MOBILITY(group->nDevIds[0])->pstruCurrentPosition;
131 fn_NMo_RandomPoint(&x, &y, vel, pstruMobilityVar->dCalculationInterval, &pstruMobilityVar->
ulSeed1, &pstruMobilityVar->
ulSeed2);
132 diff_x = x - DEVICE_MOBILITY(group->nDevIds[0])->pstruCurrentPosition->X;
133 diff_y = y - DEVICE_MOBILITY(group->nDevIds[0])->pstruCurrentPosition->Y;
134 fnValidateposition(group, diff_x, diff_y, &flag);
137 for (i = 0; i < group->nDeviceCount; i++)
139 NETSIM_ID dev = group->nDevIds[i];
140 DEVICE_MOBILITY(dev)->pstruNextPosition->X += diff_x;
141 DEVICE_MOBILITY(dev)->pstruNextPosition->Y += diff_y;
143 memcpy(DEVICE_POSITION(dev),
144 DEVICE_MOBILITY(dev)->pstruCurrentPosition,
145 sizeof * DEVICE_MOBILITY(dev)->pstruCurrentPosition);
147 add_mobility_animation(dev,
148 pstruEventDetails->dEventTime,
149 DEVICE_POSITION(dev)->X,
150 DEVICE_POSITION(dev)->Y,
153 pstruMobilityVar->
dLastTime = pstruEventDetails->dEventTime + pstruMobilityVar->dCalculationInterval;
155 pstruEventDetails->dEventTime += pstruMobilityVar->dCalculationInterval;
156 fnpAddEvent(pstruEventDetails);
157 pstruEventDetails->dEventTime -= pstruMobilityVar->dCalculationInterval;
160 for (nLoop = 0; nLoop < nCallBackCount; nLoop++)
162 extern _fnMobilityCallBack* fnMobilityCallBack;
163 for (i = 0; i < group->nDeviceCount; i++)
164 fnMobilityCallBack[nLoop](group->nDevIds[i]);
double dLastTime
Represent the devices last move time.
unsigned long ulSeed1
Used to generate random point.
unsigned long ulSeed2
Used to generate random point.
double dVelocity
To store the velocity.