Files
Robert Schmidt 8107939f08 Change OAI license to CSSL v1.0 (and others)
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
  scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly

For automated changes based on OAI PL v1.1:

    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
    perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
    perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml

The rest (cmake, files with missing license, cmake) manually.
2026-03-27 16:36:37 +01:00

538 lines
11 KiB
C++

/*
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
*/
/*!
* \brief area devoted to draw the nodes and their connections
*/
#include "openglwidget.h"
#include <GL/glu.h>
#include <stdio.h>
extern struct Geo geo[NUMBER_OF_eNB_MAX+NUMBER_OF_UE_MAX];
extern int x_area;
extern int y_area;
extern int z_area;
extern int node_number;
extern int nb_enb;
int use_map = 1;
int node_color = 0;
int link_color = 0;
int w = 10, h = 16, sw = 24, sh = 22;
QString usedMap;
void drawMeter() {
glBegin(GL_LINES);
glVertex2d(-3,0);
glVertex2d(3,0);
glVertex2d(-3,0);
glVertex2d(-3,-5);
glVertex2d(0,0);
glVertex2d(0,-5);
glVertex2d(3,0);
glVertex2d(3,-5);
glEnd();
}
OpenGLWidget::OpenGLWidget()
{
geo[0].x = -1;
draw_connections = true;
QString uri;
QString image;
uri.sprintf("%s/UTIL/OMV/",getenv("OPENAIR2_DIR"));
image = "mus.png";
usedMap = uri + image;
}
void OpenGLWidget::paintGL()
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D(0,620,0,540);
glColor3d(0,0,0);
if (use_map)
loadTexture();
glTranslated(50,20,0);
drawSquare(0, 0, 6, 10, 24, 24);
glTranslated(0,500,0);
drawMeter();
glTranslated(-10,0,0);
drawSquare(y_area % 10, 0, 6, 10, 24, 24);
glTranslated(10,0,0);
if (y_area >= 10) {
glTranslated(-20,0,0);
drawSquare((y_area % 100) / 10, 0, 6, 10, 24, 24);
glTranslated(20,0,0);
}
if (y_area >= 100) {
glTranslated(-30,0,0);
drawSquare((y_area % 1000) / 100, 0, 6, 10, 24, 24);
glTranslated(30,0,0);
}
if (y_area >= 1000) {
glTranslated(-40,0,0);
drawSquare(y_area / 1000, 0, 6, 10, 24, 24);
glTranslated(40,0,0);
}
glTranslated(561,-500,0);
drawMeter();
glTranslated(-10,0,0);
drawSquare(x_area % 10, 0, 6, 10, 24, 24);
glTranslated(10,0,0);
if (x_area >= 10) {
glTranslated(-20,0,0);
drawSquare((x_area % 100) / 10, 0, 6, 10, 24, 24);
glTranslated(20,0,0);
}
if (x_area >= 100) {
glTranslated(-30,0,0);
drawSquare((x_area % 1000) / 100, 0, 6, 10, 24, 24);
glTranslated(30,0,0);
}
if (x_area >= 1000) {
glTranslated(-40,0,0);
drawSquare(x_area / 1000, 0, 6, 10, 24, 24);
glTranslated(40,0,0);
}
//glTranslated(-1 * (x_area >= 1000 ? 601 : (x_area >= 100 ? 611 : (x_area >= 10 ? 621 : 631))),0,0);
glTranslated(-552,0,0);
drawGrid();
if (draw_connections)
drawConnections();
drawNodes();
}
void OpenGLWidget::loadTexture(){
QImage b;
glColor3d(255,255,255);
glEnable(GL_TEXTURE_2D);
textures[0] = bindTexture(QPixmap(usedMap), GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2d(0,1); glVertex2d(58,520);
glTexCoord2d(0,0); glVertex2d(58,20);
glTexCoord2d(1,0); glVertex2d(558,20);
glTexCoord2d(1,1); glVertex2d(558,520);
glEnd();
glDisable(GL_TEXTURE_2D);
}
void OpenGLWidget::drawNewPosition(){
updateGL();
}
void OpenGLWidget::setDrawConnections(int draw){
this->draw_connections = draw;
updateGL();
}
void OpenGLWidget::setUseMap(int use){
use_map = use;
updateGL();
}
void OpenGLWidget::setUsedMap(QString map_path){
usedMap = map_path;
}
void OpenGLWidget::setUsedMap(int map){
QString uri;
QString image;
uri.sprintf("%s/UTIL/OMV/",getenv("OPENAIR2_DIR"));
switch (map){
case 1:
image = "mus.png";
usedMap = uri + image;
break;
case 2:
image = "new.jpg";
usedMap = uri + image;
break;
case 3:
image = "new2.jpg";
usedMap = uri + image;
break;
case 4:
image = "white.png";
usedMap = uri + image;
break;
case 5:
image = "red.png";
usedMap = uri + image;
break;
case 6:
image = "green.png";
usedMap = uri + image;
break;
case 7:
image = "blue.png";
usedMap = uri + image;
break;
}
}
void OpenGLWidget::setNodesColor(int index){
node_color = index;
updateGL();
}
void OpenGLWidget::setLinksColor(int index){
link_color = index;
updateGL();
}
void OpenGLWidget::updateNodeSize(int size){
switch (size) {
case 1:
w = 8;
h = 12;
sw = 20;
sh = 18;
break;
case 2:
w = 10;
h = 16;
sw = 24;
sh = 22;
break;
case 3:
w = 12;
h = 20;
sw = 28;
sh = 26;
break;
}
updateGL();
}
OpenGLWidget::~OpenGLWidget(){
glDeleteTextures(1, textures);
}
void OpenGLWidget::drawConnections(){
for (int i=0; i<node_number; i++){
for (int j=i+1; j<node_number; j++){
int k=0;
while((geo[i].Neighbor[k]!=j)&&(k<geo[i].Neighbors)){
k++;
}
if(k < geo[i].Neighbors){
//glColor3d(255,255,255);
switch (link_color) {
case 1:
glColor3d(255,0,0);
break;
case 2:
glColor3d(0,0,255);
break;
case 3:
glColor3d(0,255,0);
break;
case 0:
glColor3d(255,255,255);
break;
}
//choose it according to the number of displayed nodes
glLineWidth(0.7);
glBegin(GL_LINES);
if (geo[i].node_type == 0)
glVertex2d((int)(((float)geo[i].x/(float)x_area)*500),(int)(((float)(geo[i].y + 2 * sh)/(float)y_area)*500));
else
glVertex2d((int)(((float)geo[i].x/(float)x_area)*500),(int)(((float)geo[i].y/(float)y_area)*500));
if (geo[j].node_type == 0)
glVertex2d((int)(((float)geo[j].x/(float)x_area)*500),(int)(((float)(geo[j].y + 2 * sh)/(float)y_area)*500));
else
glVertex2d((int)(((float)geo[j].x/(float)x_area)*500),(int)(((float)geo[j].y/(float)y_area)*500));
glEnd();
}
}
}
}
void OpenGLWidget::drawNodes(){
if (geo[0].x != -1){
glTranslated((int)(((float)geo[0].x/(float)x_area)*500), (int)(((float)geo[0].y/(float)y_area)*500),0);
//gluSphere(params,50,25,25);
if (geo[0].node_type == 0){
glColor3d(0,255,0);
drawBaseStation(0);
}else{
glColor3d(0,255,100);
drawSquare(0, 1, w, h, sw, sh);
}
for (int i=1; i<node_number; i++){
glTranslated((int)(((float)geo[i].x/(float)x_area)*500) - (int)(((float)geo[i-1].x/(float)x_area)*500),
(int)(((float)geo[i].y/(float)y_area)*500) - (int)(((float)geo[i-1].y/(float)y_area)*500),0);
if (geo[i].node_type == 0){
glColor3d(0,255,0);
drawBaseStation(i);
}else{
glColor3d(0,255,100);
drawSquare(i - nb_enb, 1, w, h, sw, sh);
}
}
glTranslated(-(int)(((float)geo[node_number - 1].x/(float)x_area)*500),-(int)(((float)geo[node_number - 1].y/y_area)*500),0);
}
}
void OpenGLWidget::drawGrid(){
glColor3d(0,0,255);
glLineWidth(1.0);
glBegin(GL_LINES);
/* Lines that are parallel to (Ox) */
for (int i=0; i <= y_area; i+= y_area){
glVertex2d(0,(int)(((float)i/(float)y_area)*500));
glVertex2d(500,(int)(((float)i/(float)y_area)*500));
}
/* Lines that are parallel to (Oy) */
for (int i=0; i <= x_area; i+= x_area){
glVertex2d((int)(((float)i/(float)x_area)*500),0);
glVertex2d((int)(((float)i/(float)x_area)*500),500);
}
glEnd();
}
void OpenGLWidget::drawSquare(int digit, int back, int w, int h, int sw, int sh){
glColor3d(0,255,100);
if (back == 1)
if (digit < 10 && digit >= 0) {
glBegin(GL_QUADS);
glVertex2d(-sw/2,-sh/2);
glVertex2d(-sw/2, sh/2);
glVertex2d( sw/2, sh/2);
glVertex2d( sw/2,-sh/2);
glEnd();
} else {
glBegin(GL_QUADS);
glVertex2d(-(sw*2)/3,-sh/2);
glVertex2d(-(sw*2)/3, sh/2);
glVertex2d( (sw*2)/3, sh/2);
glVertex2d( (sw*2)/3,-sh/2);
glEnd();
}
//draw the digit
//set the right color
if (back)
switch (node_color) {
case 0:
glColor3d(255,0,0);
break;
case 1:
glColor3d(0,0,255);
break;
case 2:
glColor3d(0,255,0);
break;
case 3:
glColor3d(255,255,255);
break;
}
else
glColor3d(255,0,0);
if (digit < 10 && digit >= 0) {
glBegin(GL_LINES);
switch (digit){
case 0:
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(-w/2,h/2);
break;
case 1:
glVertex2d(w/2,h/2);
glVertex2d(w/2,-h/2);
break;
case 2:
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(w/2,0);
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
glVertex2d(-w/2,-h/2);
glVertex2d(-w/2,0);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
break;
case 3:
glVertex2d(w/2,h/2);
glVertex2d(w/2,-h/2);
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(w/2,0);
glVertex2d(-w/2,0);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
break;
case 4:
glVertex2d(w/2,-h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,h/2);
glVertex2d(-w/2,0);
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
break;
case 5:
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,h/2);
glVertex2d(-w/2,0);
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,0);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
break;
case 6:
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,0);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
break;
case 7:
glVertex2d(w/2,h/2);
glVertex2d(w/2,-h/2);
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
break;
case 8:
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,0);
glVertex2d(-w/2,h/2);
break;
case 9:
glVertex2d(-w/2,0);
glVertex2d(w/2,0);
glVertex2d(-w/2,h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,-h/2);
glVertex2d(w/2,h/2);
glVertex2d(-w/2,-h/2);
glVertex2d(-w/2,h/2);
break;
}
glEnd();
} else {
glTranslated(w - 2,0,0);
drawSquare(digit % 10, 2, w, h, sw, sh);
glTranslated(-2 * w + 4 ,0,0);
drawSquare(digit / 10, 2, w, h, sw, sh);
glTranslated(w - 2,0,0);
}
}
void OpenGLWidget::drawBaseStation(int digit){
/* GLUquadric* params;
params = gluNewQuadric();
gluQuadricDrawStyle(params,GLU_FILL);
gluDisk(params,0,sw/2,20,1);
gluDeleteQuadric(params);*/
glLineWidth(2.0);
glBegin(GL_TRIANGLES);
glVertex2d(0,2*sh);
glVertex2d(-sw*2/3,-sh/2);
glVertex2d(sw*2/3,-sh/2);
glEnd();
drawSquare(digit, 2, w, h, sw, sh);
}