00001 00002 // PROYECTO FIN DE CARRERA // 00003 // TITULO: Disenyo de nuevas arquitecturas y algoritmos de gestión de recursos en // 00004 // redes de acceso FiWi // 00005 // AUTOR: Ana Emma Lopez Mato // 00006 // TUTOR: Noemi Merayo Alvarez // 00007 // INGENIERIA TECNICA DE TELECOMUNICACIONES, SISTEMAS DE TELECOMUNICACION // 00008 // UNIVERSIDAD DE VALLADOLID // 00010 #include "User_Interface.h" 00011 #include "DATA_m.h" 00012 #include "BS_table.h" 00013 #include "BS_queue.h" 00014 #include <omnetpp.h> 00015 #include <vector> 00016 #include <time.h> 00017 /* 00018 * MODULO User_Interface: 00019 * Envia hacia la BS mas cercana los paquetes generados por las diversas fuentes de datos 00020 * del usuario inalambrico (tantas como prioridades de servicio). 00021 */ 00022 Define_Module(User_Interface); 00023 00025 //FUNCION INITIALIZE()--> ESTA FUNCION SE INVOCA DESPUES DE QUE OMNET++ HA PUESTO EN MARCHA LA RED, EN LA CUAL SE LEEN LOS // 00026 // PARIMETROS DEL MODULO Y SE INICIALIZAN TODAS DAS LAS VARIABLES DECLARADAS PARA ESTE MODULO SIMPLE, SE // 00027 // ASIGNAN ESTRUCTURAS DE DATOS DINIMICOS Y SE ASIGNAN E INICIALIZAN LOS AUTOMENSAJES SI SON NECESARIOS // 00028 // PARA EL FUNCIONAMIENTO DE ESTE MODULO. // 00030 void User_Interface::initialize() 00031 { 00032 } 00033 00035 //FUNCION HANDLEMESSAGE(CMESSAGE *MSG)--> ESTA FUNCION SE INVOCA CON EL MENSAJE COMO PARAMETRO CADA VEZ QUE EL MODULO RECIBE UN // 00036 // UN MENSAJE O PAQUETE. SE RECORRE EL CODIGO IMPLEMENTADO PARA DEVOLVER UN VALOR O // 00037 // EJECUTAR UNA FUNCION DENTRO DEL MODULO SIMPLE. EL TIEMPO DE SIMULACION NO TRANSCURRE // 00038 // DENTRO DE LA LLAMADA DE LA FUNCION HANDLEMESSAGE(CMESSAGE *MSG) MIENTRAS RECORRE EL // 00039 // CODIGO IMPLEMENTADO. // // 00041 void User_Interface::handleMessage(cMessage *msg) 00042 { 00043 int type = msg->getKind(); 00044 switch(type) 00045 { 00046 case 12: 00047 // LLEGA UN PAQUETE 'ETHERNET' CON IDENTIFICADOR = 12 00048 if(msg->getKind()==12) 00049 { 00050 //ETHERNETmsg *msjdatos = check_and_cast<ETHERNETmsg*>(msg); 00051 DATA *msjdatos = check_and_cast<DATA*>(msg); 00052 //ev << " Envio de paquete inalambrico, de prioridad P" << msjdatos->getPriority() << ", del " << this->getParentModule()->getFullName() << endl; 00053 // Envio del paquete "datos", con el retardo propio del canal: 00054 //sendDelayed(msjdatos,(simtime_t) msjdatos->getArrayField1(0),"interface$o"); 00055 // OJO! No considerar el retardo de propagacion del usuario a la estacion base 00056 // (se considera despreciable por estar muy proximos) 00057 /* 00058 double prop_del = (double)(check_and_cast<cDelayChannel*>(this->getParentModule()->gate("physicalUser$o")->getChannel()))->par(4); 00059 simtime_t propag_delay = (simtime_t) prop_del; 00060 ev << " Retardo de propagacion del mensaje: " << prop_del << "s" << endl; 00061 double txrate = (double)this->getParentModule()->par("tasabinaria"); 00062 double tx_del = (double) msjdatos->getByteLength()*8/txrate; 00063 simtime_t tx_delay = (simtime_t) tx_del; 00064 ev << " Retardo de transmision del mensaje: " << tx_del << "s" << endl; 00065 ev << " Tiempo en el que tiene que llegar a la BS[" << this->getParentModule()->getIndex() << "]: T=" << SIMTIME_DBL(simTime())+prop_del+tx_del << endl; 00066 sendDelayed(msjdatos,propag_delay+tx_delay,"interface$o"); 00067 */ 00068 send(msjdatos,"interface$o"); 00069 } 00070 break; 00071 00072 default: 00073 delete msg; 00074 break; 00075 } 00076 } 00077 00079 //FUNCION FINISH()--> ESTA FUNCION SE INVOCA CUANDO LA SIMULACION HA TERMINADO CON EXITO SIN QUE SE PRODUZCA NINGUN ERROR. // 00080 // LO USAMOS PARA LA RECOGIDA DE ESTADASTICAS Y VISUALIZACION POR PANTALLA O MEDIANTE UN ARCHIVO. // 00082 void User_Interface::finish() 00083 { 00084 /* NO SE UTILIZA */ 00085 }