aboutsummaryrefslogtreecommitdiff
path: root/src/scenarios.cc
blob: 7f6185f09447939814c720b16013fd93c9f30eb5 (plain)
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
#include <rapidjson/document.h>
#include <rapidjson/filewritestream.h>
#include <rapidjson/writer.h>

#include <cstdio>
#include <iostream>
#include <time.h>
#include <sstream>


#define RAND(min,max) (rand()%(max-min)+min)

using namespace std;
using namespace rapidjson;

#define N_NODE 10
#define EXTENDED false
#define SIMULATION_DURATION 60
#define POWER_OFF 0
#define POWER_ON 10
#define POWER_RX 11
#define POWER_TX 12
#define DATA_SIZE 50
#define USE_HINT false
#define WAKE_UP_EVERY 10
#define WAKE_UP_FOR 5
#define MAX_STARTUP_DELAY 10 

unsigned int seed = 0;

int main(int argc, char **argv){
    // Setup seed
    if(argc>1){
        srand( atoi(argv[1]) );
    }

    // Create document
    Document d;
    d.SetObject();
    d.AddMember("extended",EXTENDED,d.GetAllocator());

    // Create nodes
    Value nodes(kObjectType);
    for(int i=0;i<N_NODE;i++){
        Value node(kObjectType);
        node.SetObject();
        node.AddMember("use_hint",USE_HINT,d.GetAllocator());
        node.AddMember("power_off",POWER_OFF,d.GetAllocator());
        node.AddMember("power_on",POWER_ON,d.GetAllocator());
        node.AddMember("power_rx",POWER_RX,d.GetAllocator());
        node.AddMember("power_tx",POWER_TX,d.GetAllocator());
        node.AddMember("is_sender",i==0,d.GetAllocator());
        node.AddMember("data_size",DATA_SIZE,d.GetAllocator());

        // Setup ts and durations
        Value ts(kArrayType);
        Value duration(kArrayType);
        for(unsigned int i=(RAND(0,MAX_STARTUP_DELAY));(i+WAKE_UP_FOR)<SIMULATION_DURATION;i+=WAKE_UP_EVERY){
            ts.PushBack(Value().SetDouble(i),d.GetAllocator());
            duration.PushBack(Value().SetDouble(WAKE_UP_FOR),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;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);
    cout << buffer.GetString();

    return 0;
}