Show
Ignore:
Timestamp:
03/30/09 21:38:53 (15 years ago)
Author:
trnewman
Message:

Added libvtcross functionality. Made socketcomm a little more robust. Added libvtcross demo application to illustrate how to use the lib.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/shell/CognitiveRadioShell.cpp

    r218 r222  
    125125    // send utility      
    126126    for(i = 0; i < radio_info->numUtilities; i++) { 
    127         SendMessage(socketfd, u[i].name.c_str()); 
    128         SendMessage(socketfd, u[i].units.c_str()); 
    129         SendMessage(socketfd, u[i].goal.c_str()); 
    130         sprintf(var,"%f", u[i].target); 
     127        SendMessage(socketfd, utils[i].name.c_str()); 
     128        SendMessage(socketfd, utils[i].units.c_str()); 
     129        SendMessage(socketfd, utils[i].goal.c_str()); 
     130        sprintf(var,"%f", utils[i].target); 
    131131        SendMessage(socketfd,var); 
    132132    } 
     
    136136    SendMessage(socketfd,counter); 
    137137    for(i = 0; i < radio_info->numParameters; i++) { 
    138         SendMessage(socketfd,p[i].name.c_str()); 
    139         SendMessage(socketfd,p[i].units.c_str()); 
    140         sprintf(var,"%f",p[i].min); 
     138        SendMessage(socketfd,params[i].name.c_str()); 
     139        SendMessage(socketfd,params[i].units.c_str()); 
     140        sprintf(var,"%f",params[i].min); 
    141141        SendMessage(socketfd,var); 
    142         sprintf(var,"%f",p[i].max); 
     142        sprintf(var,"%f",params[i].max); 
    143143        SendMessage(socketfd,var); 
    144         sprintf(var,"%f",p[i].step); 
     144        sprintf(var,"%f",params[i].step); 
    145145        SendMessage(socketfd,var); 
    146146 
    147         sprintf(counter,"%i",p[i].numAffects);  
     147        sprintf(counter,"%i",params[i].numAffects);  
    148148        SendMessage(socketfd,counter); 
    149         for(j = 0; j < p[i].numAffects; j++) { 
    150             SendMessage(socketfd,p[i].affection_list[j].u->name.c_str()); 
    151             SendMessage(socketfd,p[i].affection_list[j].relation.c_str()); 
     149        for(j = 0; j < params[i].numAffects; j++) { 
     150            SendMessage(socketfd,params[i].affection_list[j].u->name.c_str()); 
     151            SendMessage(socketfd,params[i].affection_list[j].relation.c_str()); 
    152152        } 
    153153    } 
     
    157157    SendMessage(socketfd,counter); 
    158158    for(i = 0; i < radio_info->numObservables; i++) { 
    159         SendMessage(socketfd,o[i].name.c_str()); 
     159        SendMessage(socketfd,observables[i].name.c_str()); 
    160160                 
    161         sprintf(counter,"%i",o[i].numAffects);  
     161        sprintf(counter,"%i",observables[i].numAffects);  
    162162        SendMessage(socketfd,counter); 
    163         for(j = 0; j < o[i].numAffects; j++) { 
    164             SendMessage(socketfd,o[i].affection_list[j].u->name.c_str()); 
    165             SendMessage(socketfd,o[i].affection_list[j].relation.c_str()); 
     163        for(j = 0; j < observables[i].numAffects; j++) { 
     164            SendMessage(socketfd,observables[i].affection_list[j].u->name.c_str()); 
     165            SendMessage(socketfd,observables[i].affection_list[j].relation.c_str()); 
    166166        } 
    167167    } 
     
    186186    LOG("Cognitive Radio Shell:: Sending radio experience to Cognitive Engine.\n"); 
    187187    int32_t numberExp = 4; 
    188      
    189     std::string numberExpString = numberExp; 
    190     SendMessage(socketFD, numberExp);  
     188        char numberExpString[50]; 
     189 
     190    sprintf(numberExpString,"%i",numberExp); 
     191    SendMessage(socketFD, numberExpString);  
    191192 
    192193    char buffer[256]; 
     
    451452CognitiveRadioShell::GetOptimalParameters(int32_t socketFD) 
    452453{ 
     454    char buffer[256]; 
     455    uint32_t numObservables,numParameters; 
     456    char counter[55]; 
     457    uint16_t i; 
     458    char var[50]; 
     459 
     460    /* Receive Set of Observables */ 
     461    LOG("Cognitive Radio Shell:: Got request for optimization.\n"); 
     462    memset(buffer, 0, 256); 
     463    ReadMessage(commandSocketFD,buffer); 
     464    numObservables = atoi(buffer); 
     465   
     466        LOG("Cognitive Radio Shell:: Attempting to get %i observables.\n",numObservables); 
     467    Observable * o = new Observable[numObservables]; 
     468  
     469    for (i = 0; i < numObservables; i++){ 
     470        memset(buffer, 0, 256); 
     471        ReadMessage(commandSocketFD,buffer); 
     472        o[i].name = std::string(buffer); 
     473     
     474        memset(buffer, 0, 256); 
     475        ReadMessage(commandSocketFD,buffer); 
     476        o[i].value = atof(buffer); 
     477    } 
     478 
     479    /* Send to Cognitive Engine  
     480         * TODO: With multiple CEs we need to make a decision about where 
     481         * to send this information 
     482         */ 
     483 
     484        LOG("Cognitive Radio Shell:: Passing on observables to Cognitive Engine\n"); 
     485    SendMessage(ceSocketFD,"get_solution"); 
     486    sprintf(counter,"%i",numObservables); 
     487    SendMessage(ceSocketFD,counter); 
     488    for(i = 0; i < numObservables; i++) { 
     489        SendMessage(ceSocketFD,o[i].name.c_str()); 
     490        sprintf(var,"%f",o[i].value); 
     491            SendMessage(ceSocketFD,var); 
     492    } 
     493 
     494 
     495        LOG("Cognitive Radio Shell:: Receiving optimized parameters from Cognitive Engine.\n"); 
     496    /* Receive Set of Parameters */ 
     497    memset(buffer, 0, 256); 
     498    ReadMessage(ceSocketFD,buffer); 
     499    numParameters = atoi(buffer); 
     500    
     501    Parameter * p = new Parameter[numParameters]; 
     502  
     503    for (i = 0; i < numParameters; i++){ 
     504        memset(buffer, 0, 256); 
     505        ReadMessage(ceSocketFD,buffer); 
     506        LOG("socket_comm::Get Parameter - Name: %s\n", buffer); 
     507        p[i].name = std::string(buffer); 
     508     
     509        memset(buffer, 0, 256); 
     510        ReadMessage(ceSocketFD,buffer); 
     511        LOG("socket_comm::Get Parameter - Value: %s\n", buffer); 
     512        p[i].value = atof(buffer); 
     513    } 
     514 
     515    /* Send to Application  
     516         */ 
     517        LOG("Cognitive Radio Shell:: Sending optimized parameters to Application.\n"); 
     518    memset(counter, 0, 55); 
     519    sprintf(counter,"%i",numParameters); 
     520    SendMessage(commandSocketFD,counter); 
     521    for(i = 0; i < numParameters; i++) { 
     522        SendMessage(commandSocketFD,p[i].name.c_str()); 
     523        sprintf(var,"%f",p[i].value); 
     524            SendMessage(commandSocketFD,var); 
     525    } 
    453526} 
    454527 
     
    473546    } else if(strcmp(buffer,"deregister_sml") == 0) { 
    474547        DeregisterSML(socketFD); 
    475     } else if(strcmp(buffer,"optimize") == 0) { 
     548    } else if(strcmp(buffer,"request_optimization") == 0) { 
    476549        /* Receive optimization request and current environment */ 
    477550        GetOptimalParameters(socketFD);   
     
    499572    servSock[command] = CreateTCPServerSocket(commandPort); 
    500573 
    501     int32_t maxDescriptor = servSock[command]; 
     574    int32_t maxDescriptor;  
     575 
     576        if(servSock[primary] > servSock[policy]) 
     577                maxDescriptor = servSock[primary]; 
     578    else  
     579                maxDescriptor = servSock[policy]; 
     580 
     581        if(servSock[command] > maxDescriptor) 
     582                maxDescriptor = servSock[command]; 
    502583 
    503584    if(InitializeTCPServerPort(servSock[primary]) == -1) 
     
    540621                            if(new_sd < 0)  
    541622                                break; 
    542                              
     623                            
     624                            if(port == servSock[primary]) 
     625                                ceSocketFD = new_sd; 
     626                            if(port == servSock[command]) 
     627                                commandSocketFD = new_sd; 
     628                            if(port == servSock[policy]) 
     629                                policySocketFD = new_sd; 
     630 
    543631                            HandleMessage(new_sd); 
    544632                            FD_SET(new_sd,&sockSet);