185 lines
4.2 KiB
C
185 lines
4.2 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright(c) EURECOM / Thales Communications & Security
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
|
*
|
|
* The full GNU General Public License is included in this distribution in the
|
|
* file called LICENSE.
|
|
*
|
|
* Contact Information:
|
|
* Thales Communications & Security <philippe.agostini@thalesgroup.com>
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Includes
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include "ieee80211p-netlinkapi.h"
|
|
#include "phy/DOT11/defs.h"
|
|
#include "PHY/TOOLS/defs.h"
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <pthread.h>
|
|
|
|
#include <rtai_lxrt.h>
|
|
#include <rtai_sem.h>
|
|
#include <rtai_msg.h>
|
|
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Definitions
|
|
*
|
|
*****************************************************************************/
|
|
|
|
enum nl80211_band {
|
|
NL80211_BAND_2GHZ,
|
|
NL80211_BAND_5GHZ,
|
|
NL80211_BAND_5_9GHZ,
|
|
NL80211_BAND_0_8GHZ,
|
|
};
|
|
|
|
enum ieee80211_band {
|
|
IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
|
|
IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
|
|
IEEE80211_BAND_5_9GHZ = NL80211_BAND_5_9GHZ,
|
|
IEEE80211_BAND_0_8GHZ = NL80211_BAND_0_8GHZ,
|
|
};
|
|
|
|
struct ieee80211p_rx_status {
|
|
short data_len; //frame data length in bytes
|
|
char rssi; //received power in dBm
|
|
char rate; //reveived data rate in units of 100 kbps
|
|
enum ieee80211_band band;
|
|
char flags; //RX flags
|
|
}; /* struct ieee80211p_rx_status */
|
|
|
|
extern uint32_t *txdata[2],*rxdata[2];
|
|
//CHANNEL_STATUS_t dot11_state = IDLE;
|
|
extern int oai_exit;
|
|
|
|
extern unsigned int *DAQ_MBOX;
|
|
|
|
extern int Ndbps[8];
|
|
|
|
extern int32_t rxDATA_F_comp_aggreg2[48*1024];
|
|
extern int32_t rxDATA_F_comp_aggreg3[48*1024];
|
|
|
|
extern uint32_t rxgain[4];
|
|
extern uint32_t rxg_max[4], rxg_med[4], rxg_byp[4];
|
|
|
|
#define FRAME_LENGTH_SAMPLES 76800
|
|
#define RX_THRES 60
|
|
|
|
#define SLOT_DURATION_5MHz 105
|
|
#define RX_THRES_dB 40
|
|
|
|
int tx_sdu_active = 0;
|
|
int tx_sdu_length = 0;
|
|
char rxsdu[2000];
|
|
|
|
void *tx_thread(void *arg) {
|
|
|
|
int fd=*((int*)arg);
|
|
RT_TASK *task;
|
|
int ret;
|
|
int i;
|
|
char dummy_data[10];
|
|
|
|
|
|
if (fd > 0) {
|
|
|
|
ret = netlink_send(fd,NLCMD_INIT,10,&dummy_data[0]);
|
|
|
|
printf("tx_thread starting, fd %d\n",fd);
|
|
|
|
task = rt_task_init_schmod(nam2num("TASK1"), 0, 0, 0, SCHED_FIFO, 0xF);
|
|
mlockall(MCL_CURRENT | MCL_FUTURE);
|
|
// rt_make_hard_real_time();
|
|
|
|
while (!oai_exit) {
|
|
|
|
if (tx_sdu_active == 1)
|
|
printf("tx_thread: waiting (MBOX %d)\n",((unsigned int*)DAQ_MBOX)[0]);
|
|
|
|
while(((volatile int)tx_sdu_active) != 0) {
|
|
rt_sleep(nano2count(66666));
|
|
}
|
|
printf("tx_thread: calling netlink\n");
|
|
ret = netlink_recv(fd,rxsdu);
|
|
tx_sdu_active = 1;
|
|
tx_sdu_length = ret;
|
|
|
|
/*
|
|
if (ret > 0) {
|
|
|
|
printf("received TX SDU: ");
|
|
for (i=0;i<ret;i++) {
|
|
printf("%02hhx ",rxsdu[i]);
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
}
|
|
*/
|
|
|
|
}
|
|
}
|
|
else {
|
|
printf("tx_thread: no netlink\n");
|
|
}
|
|
|
|
printf("tx_thread exiting\n");
|
|
|
|
return(0);
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Main
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*
|
|
int dot11_netlink_init() {
|
|
|
|
int fd;
|
|
int ret;
|
|
int i;
|
|
char txdata[10];
|
|
|
|
fd = netlink_init();
|
|
|
|
if (fd < 0) {
|
|
return -1;
|
|
}
|
|
|
|
ret = netlink_send(fd,NLCMD_INIT,10,&txdata[0]);
|
|
|
|
|
|
|
|
return(fd);
|
|
}
|
|
|
|
*/
|
|
|