Example #1
0
int main(int argc, char* argv[])
{
    Simulator sim;
    SimplePhyChannel pch;
    BaseStation::MODE mode = BaseStation::VAR_DYNAMIC;
    bool variableRate = true;
    bool dynamicCode = true;
    for (int i = 1; i < argc; ++ i)
    {
        if ((0 == stricmp("-f", argv[i])) || (0 == stricmp("--fixed-rate", argv[i])))
        {
            variableRate = false;
            if (dynamicCode)
            {
                mode = BaseStation::FIXED_DYNAMIC;
            }
            else
            {
                mode = BaseStation::FIXED_ONCE;
            }
        }
        else if ((0 == stricmp("-o", argv[i])) || (0 == stricmp("--once-code", argv[i])))
        {
            dynamicCode = false;
            if (variableRate)
            {
                mode = BaseStation::VAR_ONCE;
            }
            else
            {
                mode = BaseStation::FIXED_ONCE;
            }
        }
    }

    BaseStation bs(string("BaseStation"), pch, mode);
    sim.addObject(&bs);

    const int testRate = pch.getChipRate() / 8;

#if TEST_DEFAULT
    AutoMobileStation ms(string("MobileStation"), pch, UID_1);
    ms.setRateRange(testRate, testRate);
    sim.addObject(&ms);
    AutoMobileStation ms2(string("MobileStation"), pch, UID_2, false, MOBILE2_JOIN_TIME);
    ms2.setRateRange(testRate, testRate);
    sim.addObject(&ms2);

#if TEST_CODE_RANGE
    // Fix MS data rate if TEST_CODE_RANGE is not set
    ms.setRateRange(testRate, testRate);
    ms2.setRateRange(testRate, testRate);
#endif

#else // Add user from stdin by test file
    addUser(sim, pch);
#endif
    sim.addObject(&pch);

    Timer timer;
    sim.addObject(&timer);

    sim.run(shouldStop, &bs);

    cout << "Time: " << timer.getTime() << endl;

    return 0;
}
Example #2
0
void addUser(Simulator& sim, SimplePhyChannel& pch)
{
    char status;
    char line[1024];
    // Read until EOF
    // States of input
    enum { PARSE_TICK_DELAY, PARSE_UID, PARSE_TR, PARSER_DATA_RATE };
    uint8_t state = PARSE_TICK_DELAY;
    int tickDelay;
    int uid;
    int tr;
    int dataRate;

    while ((status = getLine(line, sizeof(line))) && (EOF != status))
    {
        char* data = line;

        if (PARSE_TICK_DELAY == state)
        {
            data = getNumber(data, &tickDelay);
            if (NULL != data)
            {
                state = PARSE_UID;
            }
            else
            {
                continue;
            }
        }
        if (PARSE_UID == state)
        {
            data = getNumber(data, &uid);
            if (NULL != data)
            {
                state = PARSE_TR;
            }
            else
            {
                continue;
            }
        }
        if (PARSE_TR == state)
        {
            data = getNumber(data, &tr);
            if (NULL != data)
            {
                state = PARSER_DATA_RATE;
            }
            else
            {
                continue;
            }
        }
        if (PARSER_DATA_RATE == state)
        {
            data = getNumber(data, &dataRate);
            if (NULL != data)
            {
                state = PARSE_TICK_DELAY;
                string name = "MobileStation";
                cout << "Adding " << name << uid << endl;
                // TODO: where do we clean this memory
                AutoMobileStation* ms = new AutoMobileStation(name, pch, uid, tr ? true: false, tickDelay);
                ++s_totalConnections;
                cout << "s_totalConnections: " << s_totalConnections << endl;
                ms->setRateRange(dataRate, dataRate);
                sim.addObject(ms);
            }
            else
            {
                continue;
            }
        }
    }
}