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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include <cstdlib>
#include <cstring>
#include <rapidjson/document.h>
#include <rapidjson/filewritestream.h>
#include <rapidjson/prettywriter.h>
#include <cstdio>
#include <iostream>
#include <time.h>
#include <sstream>
#define RAND(min,max) (rand()%((max)-(min)+1)+(min))
using namespace std;
using namespace rapidjson;
int main(int argc, char **argv){
// Setup seed
if(argc!=16){
cerr << "Usage: " << argv[0] <<
" <seed> <simtime> <wakeupevery> <wakeupfor> <n_nodes>" <<
" <extended> <hint> <poff> <pon> <prx> <ptx> <datasize> <bitrate> <hintsize> <latency>" <<
endl;
exit(1);
}
// Init parameters
int seed=atoi(argv[1]);
double simtime=stod(argv[2]);
unsigned int wakeupevery=atoi(argv[3]);
unsigned int wakeupfor=stoi(argv[4]);
unsigned int n_nodes=atoi(argv[5]);
bool extended=!strcmp("true",argv[6]);
bool hint=!strcmp("true",argv[7]);
double poff=stod(argv[8]);
double pon=stod(argv[9]);
double prx=stod(argv[10]);
double ptx=stod(argv[11]);
unsigned int datasize=atoi(argv[12]);
string bitrate(argv[13]);
unsigned int hintsize=atoi(argv[14]);
double latency=stod(argv[15]);
// Setup seed
srand(seed);
// Create document
Document d;
d.SetObject();
d.AddMember("seed",Value().SetInt(seed),d.GetAllocator());
Value bitrateValue;
bitrateValue.SetString(bitrate.c_str(),bitrate.size(),d.GetAllocator());
d.AddMember("bitrate",bitrateValue,d.GetAllocator());
d.AddMember("latency",latency,d.GetAllocator());
d.AddMember("extended",extended,d.GetAllocator());
d.AddMember("hint_size",hintsize,d.GetAllocator());
// Create nodes
Value nodes(kObjectType);
for(int i=0;i<n_nodes;i++){
Value node(kObjectType);
node.SetObject();
node.AddMember("use_hint",hint,d.GetAllocator());
node.AddMember("power_off",poff,d.GetAllocator());
node.AddMember("power_on",pon,d.GetAllocator());
node.AddMember("power_rx",prx,d.GetAllocator());
node.AddMember("power_tx",ptx,d.GetAllocator());
node.AddMember("is_sender",i==0,d.GetAllocator());
node.AddMember("data_size",datasize,d.GetAllocator());
// Setup ts and durations
Value ts(kArrayType);
Value duration(kArrayType);
for(unsigned int i=0;i<simtime;i+=wakeupevery){
ts.PushBack(Value().SetDouble(RAND(i,i+wakeupevery-wakeupfor)),d.GetAllocator());
duration.PushBack(Value().SetDouble(wakeupfor),d.GetAllocator());
}
node.AddMember("wake_ts",ts,d.GetAllocator());
node.AddMember("wake_duration",duration,d.GetAllocator());
// Add node to nodes
std::ostringstream ss;
ss<< "on" <<i;
Value key(ss.str().c_str(), d.GetAllocator());
nodes.AddMember(key,node,d.GetAllocator());
}
d.AddMember("nodes",nodes,d.GetAllocator());
// Write to stdout
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
d.Accept(writer);
cout << buffer.GetString();
return 0;
}
|