reactivated EMOS
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6734 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -369,7 +369,7 @@ int16_t get_target_ul_rx_power(module_id_t module_idP, uint8_t CC_id) {
|
||||
}
|
||||
|
||||
#ifdef EMOS
|
||||
void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_eNB) {
|
||||
void phy_procedures_emos_eNB_TX(unsigned char subframe, PHY_VARS_eNB *phy_vars_eNB) {
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -482,7 +482,7 @@ void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eN
|
||||
|
||||
if (subframe==4) {
|
||||
emos_dump_eNB.timestamp = rt_get_time_ns();
|
||||
emos_dump_eNB.frame_tx = phy_vars_eNB->proc[subframe].frame;
|
||||
emos_dump_eNB.frame_tx = phy_vars_eNB->proc[subframe].frame_rx;
|
||||
emos_dump_eNB.rx_total_gain_dB = phy_vars_eNB->rx_total_gain_eNB_dB;
|
||||
emos_dump_eNB.mimo_mode = phy_vars_eNB->transmission_mode[0];
|
||||
memcpy(&emos_dump_eNB.PHY_measurements_eNB,
|
||||
@@ -494,12 +494,12 @@ void phy_procedures_emos_eNB_RX(unsigned char subframe,PHY_VARS_eNB *phy_vars_eN
|
||||
//bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, "test", sizeof("test"));
|
||||
if (bytes!=sizeof(fifo_dump_emos_eNB)) {
|
||||
LOG_W(PHY,"[eNB %d] Frame %d, subframe %d, Problem writing EMOS data to FIFO (bytes=%d, size=%d)\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->frame, subframe,bytes,sizeof(fifo_dump_emos_eNB));
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[(subframe+1)%10].frame_rx, subframe,bytes,sizeof(fifo_dump_emos_eNB));
|
||||
}
|
||||
else {
|
||||
if (phy_vars_eNB->proc[(subframe+1)%10].frame_tx%100==0) {
|
||||
LOG_I(PHY,"[eNB %d] Frame %d (%d), subframe %d, Writing %d bytes EMOS data to FIFO\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[(subframe+1)%10]->frame_tx, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, subframe, bytes);
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[(subframe+1)%10].frame_rx, ((fifo_dump_emos_eNB*)&emos_dump_eNB)->frame_tx, subframe, bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2399,7 +2399,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
|
||||
#ifdef EMOS
|
||||
phy_procedures_emos_eNB_TX(next_slot, phy_vars_eNB);
|
||||
phy_procedures_emos_eNB_TX(subframe, phy_vars_eNB);
|
||||
#endif
|
||||
|
||||
#ifndef EXMIMO
|
||||
|
||||
@@ -1589,7 +1589,7 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_
|
||||
|
||||
if (last_slot==0) {
|
||||
emos_dump_UE.timestamp = rt_get_time_ns();
|
||||
emos_dump_UE.frame_rx = phy_vars_ue->frame;
|
||||
emos_dump_UE.frame_rx = phy_vars_ue->frame_rx;
|
||||
emos_dump_UE.UE_mode = phy_vars_ue->UE_mode[eNB_id];
|
||||
emos_dump_UE.mimo_mode = phy_vars_ue->transmission_mode[eNB_id];
|
||||
emos_dump_UE.freq_offset = phy_vars_ue->lte_ue_common_vars.freq_offset;
|
||||
@@ -1623,11 +1623,11 @@ void phy_procedures_emos_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t last_slot,uint8_
|
||||
|
||||
bytes = rtf_put(CHANSOUNDER_FIFO_MINOR, &emos_dump_UE, sizeof(fifo_dump_emos_UE));
|
||||
if (bytes!=sizeof(fifo_dump_emos_UE)) {
|
||||
LOG_W(PHY,"[UE %d] frame %d, slot %d, Problem writing EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame, last_slot);
|
||||
LOG_W(PHY,"[UE %d] frame %d, slot %d, Problem writing EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame_rx, last_slot);
|
||||
}
|
||||
else {
|
||||
if (phy_vars_ue->frame%100==0) {
|
||||
LOG_I(PHY,"[UE %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame, last_slot, bytes);
|
||||
if (phy_vars_ue->frame_rx%100==0) {
|
||||
LOG_I(PHY,"[UE %d] frame %d, slot %d, Writing %d bytes EMOS data to FIFO\n",Mod_id,phy_vars_ue->frame_rx, last_slot, bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3281,6 +3281,11 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef EMOS
|
||||
phy_procedures_emos_UE_RX(phy_vars_ue,slot_rx,eNB_id);
|
||||
#endif
|
||||
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
|
||||
stop_meas(&phy_vars_ue->phy_proc_rx);
|
||||
return (0);
|
||||
@@ -3617,9 +3622,6 @@ void phy_UE_lte_check_measurement_thresholds(instance_t instanceP, ral_threshold
|
||||
if (phy_procedures_RN_UE_RX(slot_rx, slot_tx, r_type) != 0 )
|
||||
#endif
|
||||
phy_procedures_UE_RX(phy_vars_ue,eNB_id,abstraction_flag,mode,r_type,phy_vars_rn);
|
||||
#ifdef EMOS
|
||||
phy_procedures_emos_UE_RX(phy_vars_ue,slot_rx,eNB_id);
|
||||
#endif
|
||||
}
|
||||
if ((subframe_select(&phy_vars_ue->lte_frame_parms,subframe_tx)==SF_S) &&
|
||||
((slot_tx&1)==1)) {
|
||||
|
||||
@@ -65,6 +65,7 @@ static int hw_subframe;
|
||||
|
||||
#ifdef EMOS
|
||||
#include <gps.h>
|
||||
struct gps_fix_t dummy_gps_data;
|
||||
#endif
|
||||
|
||||
#include "PHY/types.h"
|
||||
@@ -205,6 +206,7 @@ static pthread_t forms_thread; //xforms
|
||||
#endif
|
||||
#ifdef EMOS
|
||||
static pthread_t thread3; //emos
|
||||
static pthread_t thread4; //GPS
|
||||
#endif
|
||||
|
||||
openair0_device openair0;
|
||||
@@ -555,6 +557,73 @@ static void *scope_thread(void *arg) {
|
||||
#ifdef EMOS
|
||||
#define NO_ESTIMATES_DISK 100 //No. of estimates that are aquired before dumped to disk
|
||||
|
||||
void* gps_thread (void *arg)
|
||||
{
|
||||
|
||||
struct gps_data_t gps_data;
|
||||
struct gps_data_t *gps_data_ptr = &gps_data;
|
||||
struct sched_param sched_param;
|
||||
int ret;
|
||||
|
||||
sched_param.sched_priority = sched_get_priority_min(SCHED_FIFO)+1;
|
||||
sched_setscheduler(0, SCHED_FIFO,&sched_param);
|
||||
|
||||
printf("GPS thread has priority %d\n",sched_param.sched_priority);
|
||||
|
||||
memset(&dummy_gps_data,0,sizeof(struct gps_fix_t));
|
||||
|
||||
#if GPSD_API_MAJOR_VERSION>=5
|
||||
ret = gps_open("127.0.0.1","2947",gps_data_ptr);
|
||||
if (ret!=0)
|
||||
#else
|
||||
gps_data_ptr = gps_open("127.0.0.1","2947");
|
||||
if (gps_data_ptr == NULL)
|
||||
#endif
|
||||
{
|
||||
printf("[EMOS] Could not open GPS\n");
|
||||
pthread_exit((void*)arg);
|
||||
}
|
||||
#if GPSD_API_MAJOR_VERSION>=4
|
||||
else if (gps_stream(gps_data_ptr, WATCH_ENABLE,NULL) != 0)
|
||||
#else
|
||||
else if (gps_query(gps_data_ptr, "w+x") != 0)
|
||||
#endif
|
||||
{
|
||||
printf("[EMOS] Error sending command to GPS\n");
|
||||
pthread_exit((void*) arg);
|
||||
}
|
||||
else
|
||||
printf("[EMOS] Opened GPS, gps_data=%p\n", gps_data_ptr);
|
||||
|
||||
|
||||
while (!oai_exit)
|
||||
{
|
||||
printf("[EMOS] polling data from gps\n");
|
||||
#if GPSD_API_MAJOR_VERSION>=5
|
||||
if (gps_waiting(gps_data_ptr,500)) {
|
||||
if (gps_read(gps_data_ptr) <= 0) {
|
||||
#else
|
||||
if (gps_waiting(gps_data_ptr)) {
|
||||
if (gps_poll(gps_data_ptr) != 0) {
|
||||
#endif
|
||||
printf("[EMOS] problem polling data from gps\n");
|
||||
}
|
||||
else {
|
||||
memcpy(&dummy_gps_data,&(gps_data_ptr->fix),sizeof(struct gps_fix_t));
|
||||
printf("[EMOS] lat %g, lon %g\n",gps_data_ptr->fix.latitude,gps_data_ptr->fix.longitude);
|
||||
}
|
||||
} //gps_waiting
|
||||
else {
|
||||
printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n");
|
||||
}
|
||||
//rt_sleep_ns(1000000000LL);
|
||||
sleep(1);
|
||||
} //oai_exit
|
||||
|
||||
pthread_exit((void*) arg);
|
||||
|
||||
}
|
||||
|
||||
void *emos_thread (void *arg)
|
||||
{
|
||||
char c;
|
||||
@@ -567,14 +636,11 @@ void *emos_thread (void *arg)
|
||||
time_t starttime_tmp;
|
||||
struct tm starttime;
|
||||
|
||||
int channel_buffer_size;
|
||||
int channel_buffer_size,ret;
|
||||
|
||||
time_t timer;
|
||||
struct tm *now;
|
||||
|
||||
struct gps_data_t *gps_data = NULL;
|
||||
struct gps_fix_t dummy_gps_data;
|
||||
|
||||
struct sched_param sched_param;
|
||||
|
||||
sched_param.sched_priority = sched_get_priority_max(SCHED_FIFO)-1;
|
||||
@@ -585,27 +651,6 @@ void *emos_thread (void *arg)
|
||||
timer = time(NULL);
|
||||
now = localtime(&timer);
|
||||
|
||||
memset(&dummy_gps_data,1,sizeof(struct gps_fix_t));
|
||||
|
||||
gps_data = gps_open("127.0.0.1","2947");
|
||||
if (gps_data == NULL)
|
||||
{
|
||||
printf("[EMOS] Could not open GPS\n");
|
||||
//exit(-1);
|
||||
}
|
||||
#if GPSD_API_MAJOR_VERSION>=4
|
||||
else if (gps_stream(gps_data, WATCH_ENABLE,NULL) != 0)
|
||||
#else
|
||||
else if (gps_query(gps_data, "w+x") != 0)
|
||||
#endif
|
||||
{
|
||||
//sprintf(tmptxt,"Error sending command to GPS, gps_data = %x", gps_data);
|
||||
printf("[EMOS] Error sending command to GPS\n");
|
||||
//exit(-1);
|
||||
}
|
||||
else
|
||||
printf("[EMOS] Opened GPS, gps_data=%p\n");
|
||||
|
||||
if (UE_flag==0)
|
||||
channel_buffer_size = sizeof(fifo_dump_emos_eNB);
|
||||
else
|
||||
@@ -642,17 +687,26 @@ void *emos_thread (void *arg)
|
||||
}
|
||||
|
||||
|
||||
printf("[EMOS] starting dump, channel_buffer_size=%d ...\n",channel_buffer_size);
|
||||
printf("[EMOS] starting dump, channel_buffer_size=%d, fifo %d\n",channel_buffer_size,fifo);
|
||||
while (!oai_exit)
|
||||
{
|
||||
/*
|
||||
bytes = rtf_read_timed(fifo, fifo2file_ptr, channel_buffer_size,100);
|
||||
if (bytes==0)
|
||||
continue;
|
||||
|
||||
*/
|
||||
bytes = rtf_read_all_at_once(fifo, fifo2file_ptr, channel_buffer_size);
|
||||
if (bytes<=0) {
|
||||
usleep(100);
|
||||
continue;
|
||||
}
|
||||
if (bytes != channel_buffer_size) {
|
||||
printf("[EMOS] ERROR! Only got %d bytes instead of %d!\n",bytes,channel_buffer_size);
|
||||
}
|
||||
/*
|
||||
if (UE_flag==0)
|
||||
if (UE_flag==0)
|
||||
printf("eNB: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_eNB*)fifo2file_ptr)->frame_tx,bytes);
|
||||
else
|
||||
else
|
||||
printf("UE: count %d, frame %d, read: %d bytes from the fifo\n",counter, ((fifo_dump_emos_UE*)fifo2file_ptr)->frame_rx,bytes);
|
||||
*/
|
||||
|
||||
@@ -679,30 +733,13 @@ void *emos_thread (void *arg)
|
||||
fprintf(stderr, "[EMOS] Error writing to dumpfile\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (gps_data)
|
||||
|
||||
if (fwrite(&dummy_gps_data, sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
|
||||
{
|
||||
if (gps_poll(gps_data) != 0) {
|
||||
printf("[EMOS] problem polling data from gps\n");
|
||||
}
|
||||
else {
|
||||
printf("[EMOS] lat %g, lon %g\n",gps_data->fix.latitude,gps_data->fix.longitude);
|
||||
}
|
||||
if (fwrite(&(gps_data->fix), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
|
||||
{
|
||||
printf("[EMOS] Error writing to dumpfile, stopping recording\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
printf("[EMOS] Error writing to dumpfile, stopping recording\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[EMOS] WARNING: No GPS data available, storing dummy packet\n");
|
||||
if (fwrite(&(dummy_gps_data), sizeof(char), sizeof(struct gps_fix_t), dumpfile_id) != sizeof(struct gps_fix_t))
|
||||
{
|
||||
printf("[EMOS] Error writing to dumpfile, stopping recording\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(fifo2file_buffer);
|
||||
@@ -2756,6 +2793,8 @@ int main(int argc, char **argv) {
|
||||
#ifdef EMOS
|
||||
ret = pthread_create(&thread3, NULL, emos_thread, NULL);
|
||||
printf("EMOS thread created, ret=%d\n",ret);
|
||||
ret = pthread_create(&thread4, NULL, gps_thread, NULL);
|
||||
printf("GPS thread created, ret=%d\n",ret);
|
||||
#endif
|
||||
|
||||
rt_sleep_ns(10*FRAME_PERIOD);
|
||||
@@ -2938,6 +2977,9 @@ int main(int argc, char **argv) {
|
||||
printf("waiting for EMOS thread\n");
|
||||
pthread_cancel(thread3);
|
||||
pthread_join(thread3,&status);
|
||||
printf("waiting for GPS thread\n");
|
||||
pthread_cancel(thread4);
|
||||
pthread_join(thread4,&status);
|
||||
#endif
|
||||
|
||||
#ifdef EMOS
|
||||
|
||||
@@ -312,7 +312,7 @@ static void *UE_thread_synch(void *arg) {
|
||||
} // mutex_lock
|
||||
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SYNCH,1);
|
||||
printf("Sync_mode %d\n",sync_mode);
|
||||
//printf("Sync_mode %d\n",sync_mode);
|
||||
switch (sync_mode) {
|
||||
case pss:
|
||||
|
||||
@@ -640,7 +640,7 @@ static void *UE_thread_rx(void *arg) {
|
||||
UE->instance_cnt_rx=-1;
|
||||
|
||||
#ifdef RTAI
|
||||
task = rt_task_init_schmod(nam2num("UE Thread RX"), 0, 0, 0, SCHED_FIFO, 0xF);
|
||||
task = rt_task_init_schmod(nam2num("UE RX Thread"), 0, 0, 0, SCHED_FIFO, 0xF);
|
||||
if (task==NULL) {
|
||||
LOG_E(PHY,"[SCHED][UE] Problem starting UE RX thread!!!!\n");
|
||||
return 0;
|
||||
@@ -1343,13 +1343,13 @@ void *UE_thread(void *arg) {
|
||||
|
||||
|
||||
// wait until we can lock mutex_synch
|
||||
printf("Locking mutex_synch (UE_thread)\n");
|
||||
//printf("Locking mutex_synch (UE_thread)\n");
|
||||
if (pthread_mutex_lock(&UE->mutex_synch) != 0) {
|
||||
LOG_E(PHY,"[SCHED][UE] error locking mutex for UE initial synch thread\n");
|
||||
exit_fun("noting to add");
|
||||
}
|
||||
else {
|
||||
printf("Before getting frame IC %d (UE_thread)\n",UE->instance_cnt_synch);
|
||||
//printf("Before getting frame IC %d (UE_thread)\n",UE->instance_cnt_synch);
|
||||
if (UE->instance_cnt_synch < 0) {
|
||||
|
||||
wait_sync_cnt=0;
|
||||
|
||||
Reference in New Issue
Block a user