forked from phuferris/FaNetSimulator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscale_run.m
More file actions
80 lines (63 loc) · 2.93 KB
/
scale_run.m
File metadata and controls
80 lines (63 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
function [Nodes_list] = scale_run(Nodes_list, Events_list, max_run_time, spleeping_protocol)
clock = 0;
%
while 1
clock = clock + 1;
[min_instant, min_index] = min([Events_list(:).instant]);
if (clock > max_run_time)
break;
end
event = Events_list(min_index);
disp(sprintf('Min instant %f, min index %d', min_instant, min_index));
disp(sprintf('event info '));
disp(event);
for k=1:numel(Nodes_list)
disp(sprintf('Node ID %d status %d', k, Nodes_list(k).status));
if Nodes_list(k).status == 1
Nodes_list(k).active_time_left = Nodes_list(k).active_time_left - 1;
% Check to see if it has any any event from the event queue
if(~isempty(event) && event.instant == clock && event.source == k)
Nodes_list = scale_send_event(Nodes_list, event); % get new events from sending the latest one
Events_list(min_index) = [];
if(~isempty(newEvents))
Events_list = [Events_list; newEvents];
end
end
% beacon message
message=[];
message.id=k;
message.node_x_coordinate = nodes_list(k).x_coordinate;
message.node_y_coordinate = nodes_list(k).y_coordinate;
if(~isempty(nodes_list(k).AP_Connections))
message.AP_connection = 1;
node_AP_connections = nodes_list(k).AP_Connections;
message.AP_connection_through_node_id = node_AP_connections.through_neighbor;
message.AP_connection_hop_count = node_AP_connections.num_hops + 1;
else
message.AP_connection = 0;
message.AP_connection_through_node_id = 0;
message.AP_connection_hop_count = 0;
end
%power left after sending beacon
action = [];
action.type = 'broadcast_beacon';
nodes_list(k).power= scale_power_consumption(nodes_list(k).power, action);
message.power_status = nodes_list(k).power;
message.sleeping_time_left = nodes_list(k).sleeping_time_left; %need update (re-calculate)?
message.active_time_left = nodes_list(k).active_time_left; %need re-calculate? If so, have to use get time function with sleep protocol
% Send out beacon message to annouce its active
Nodes_list = scale_send_beacon_message(Nodes_list, k, message);
if Nodes_list(k).active_time_left == 0
Nodes_list(k).status = 0;
Nodes_list(k).sleeping_time_left = scale_get_sleeping_time(Nodes_list, spleeping_protocol);
end
else
Nodes_list(k).sleeping_time_left = Nodes_list(k).sleeping_time_left - 1;
if Nodes_list(k).sleeping_time_left == 0
Nodes_list(k).satus = 1;
Nodes_list(k).active_time_left = scale_get_active_time(Nodes_list, spleeping_protocol);
end
end
end
end
return;