예제 #1
0
파일: object.c 프로젝트: johnh530/electro
void recv_create_object(void)
{
    /* Unpack the object header. */

    int i = new_object();
    int n = recv_index();

    int j, k;

    struct object      *o = get_object(i);
    struct object_mesh *m = NULL;

    o->count = 1;

    /* Unpack the vertices and meshes. */

    o->vv = recv_vector();
    o->mv = vecnew(n, sizeof (struct object_mesh));

    for (j = 0; j < n; ++j)
        if ((k = vecadd(o->mv)) >= 0)
        {
            m = (struct object_mesh *) vecget(o->mv, k);

            m->brush = recv_index();
            m->fv    = recv_vector();
            m->ev    = recv_vector();
        }

    /* Encapsulate this object in an entity. */

    recv_create_entity();
}
Point_to_Point_TDD_Performance_Test::Point_to_Point_TDD_Performance_Test(Ui_MainWindow *ui)
{

    number_transceivers=2;
    ivec fd_ext;
    fd_ext.set_size(number_transceivers);
    //create transceivers
    for(int i=0;i<number_transceivers;i++){
        stringstream tun_i;
        tun_i << "tun" << i;
        fd_ext[i]=tun_alloc((char*)(tun_i.str().c_str()));
        stringstream cmd;
        cmd << "ifconfig " <<  tun_i.str() << " 192.168.1." << i+1 << " netmask 255.255.255.0 broadcast 192.168.1.255";
        popen(cmd.str().c_str(),"r");
        Point_to_Point_TDD_TX *tmp=new Point_to_Point_TDD_TX(ui);
        Point_to_Point_TDD_RX *tmp2=new Point_to_Point_TDD_RX(ui);
        transmitters.push_back(tmp);
        receivers.push_back(tmp2);
    }

    //Connect transmitters with their corresponding receivers
    for(int i=0;i<number_transceivers;i++){

        QObject::connect(transmitters[i],SIGNAL(valuechanged(bool)),receivers[i],SLOT(setvalue(bool)),Qt::BlockingQueuedConnection);
        QObject::connect(receivers[i],SIGNAL(valuechanged(bool,double)),transmitters[i],SLOT(setvalue(bool,double)),Qt::BlockingQueuedConnection);
        QObject::connect(receivers[i],SIGNAL(valuechanged(int)),transmitters[i],SLOT(setvalue(int)),Qt::BlockingQueuedConnection);
        QObject::connect(receivers[i],SIGNAL(waveformset(int)),transmitters[i],SLOT(setwaveform(int)),Qt::BlockingQueuedConnection);

    }
    //connect to simulator device
    qRegisterMetaType<timestamp_data>("timestamp_data");
    for(int i=0;i<number_transceivers;i++){
        for(int j=0;j<number_transceivers;j++){
            QObject::connect(transmitters[i]->device,SIGNAL(send_vector(timestamp_data)),receivers[j]->device,SLOT(recv_vector(timestamp_data)),Qt::BlockingQueuedConnection);
        }
        QObject::connect(receivers[i]->device,SIGNAL(updated_timer(double)),transmitters[i]->device,SLOT(update_timer(double)),Qt::BlockingQueuedConnection);
    }

    //Fix positions of the nodes and calculate distance matrix
    cvec positions(number_transceivers);
    for (int i=0;i<number_transceivers;i++){
        positions[i]=complex<double>(0,0)+0.010*i*complex<double>(1,1);
    }
    for (int i=0;i<number_transceivers;i++){
        receivers[i]->device->channel_model->calculate_distance_matrix(positions);
    }

    //Determine which transceivers talk to which transceivers
    for(int i=0;i<number_transceivers;i++){
        transmitters[i]->myaddress=i;
        receivers[i]->myaddress=i;
        transmitters[i]->device->my_address=i;
        receivers[i]->device->my_address=i;
        if(number_transceivers==1){
            transmitters[i]->destaddress=i;
            receivers[i]->destaddress=i;
        }
        else{
            if((i/2)*2==i){
                transmitters[i]->destaddress=i+1;
                receivers[i]->destaddress=i+1;
            }
            else{
                transmitters[i]->destaddress=i-1;
                receivers[i]->destaddress=i-1;
            }
        }
    }
    //start transceivers
    for(int i=0;i<number_transceivers;i++){
        receivers[i]->start();
        transmitters[i]->start();
    }


    sleep(1);
    //Start BER test TX and RX
    for(int i=0;i<number_transceivers;i++){
        transmitters[i]->packet->ptr=fd_ext[i];
        receivers[i]->packet->ptr=fd_ext[i];
        transmitters[i]->is_time_set=true;
        transmitters[i]->tx_timestamp=i*transmitters[i]->time_gap/2;
        transmitters[i]->packet->is_ip=true;
        receivers[i]->packet->is_ip=true;
        transmitters[i]->state="SEND";
    }

    //transmitters[1]->packet->is_ber_count=false;
    //transmitters[1]->state="NOSTATE";


}