1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-11-18 15:54:59 +00:00
gnss-sdr/drivers/gr-gn3s/include/gn3s.h
Javier Arribas b849b20a8c Added optional support for Sparkfun SiGe GN3S USB GPS RF sampler:
- Added a pre-compiled custom GN3S firmware.
- Added a fully-compliant GNU Radio source block for GN3S USB dongle. It can be used also from GNU Radio companion and from Python applications.
- Added a new GN3S_Signal_Source block. It is possible to disable the GN3S signal source compilation. See README.

git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@217 64b25241-fba3-4117-9849-534c7e92360d
2012-07-30 15:46:07 +00:00

143 lines
4.1 KiB
C++

/*----------------------------------------------------------------------------------------------*/
/*! \file gn3s.h
//
// FILENAME: gn3s.h
//
// DESCRIPTION: Defines the GN3S class.
//
// DEVELOPERS: Gregory W. Heckler (2003-2009)
//
// LICENSE TERMS: Copyright (c) Gregory W. Heckler 2009
//
// This file is part of the GPS Software Defined Radio (GPS-SDR)
//
// The GPS-SDR is free software; you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version. The GPS-SDR 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.
//
// Note: Comments within this file follow a syntax that is compatible with
// DOXYGEN and are utilized for automated document extraction
//
// Reference:
*/
/*----------------------------------------------------------------------------------------------*/
#ifndef GN3S_H_
#define GN3S_H_
/* Includes */
/*--------------------------------------------------------------*/
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <math.h>
#include "fusb.h"
#include "fusb_linux.h"
//#include "usrp_bytesex.h"
//#include "usrp_prims.h"
/*--------------------------------------------------------------*/
/* FX2 Configuration Structure */
/*--------------------------------------------------------------*/
struct fx2Config
{
int interface;
int altinterface;
usb_dev_handle *udev;
fusb_ephandle *d_ephandle;
fusb_devhandle *d_devhandle;
};
/*--------------------------------------------------------------*/
/* FX2 Stuff */
/*--------------------------------------------------------------*/
#define RX_ENDPOINT (0x86)
#define VRT_VENDOR_IN (0xC0)
#define VRT_VENDOR_OUT (0x40)
#define RX_INTERFACE (2)
#define RX_ALTINTERFACE (0)
#define VRQ_GET_STATUS (0x80)
#define GS_RX_OVERRUN (1) //!< Returns 1 byte
#define VRQ_XFER (0x01)
/*--------------------------------------------------------------*/
/* GN3S Stuff */
/*--------------------------------------------------------------*/
#define GN3S_VID (0x16C0)
#define GN3S_PID (0x072F)
#define VID_OLD (0x1781)
#define PID_OLD (0x0B39)
#define PROG_SET_CMD (0xE600)
#define FUSB_BUFFER_SIZE (16 * (1L << 20)) //!< 8 MB
#define FUSB_BLOCK_SIZE (16 * (1L << 10)) //!< 16KB is hard limit
#define FUSB_NBLOCKS (FUSB_BUFFER_SIZE / FUSB_BLOCK_SIZE)
/*--------------------------------------------------------------*/
/* The firmware is embedded into the executable */
/*--------------------------------------------------------------*/
extern char _binary_usrp_gn3s_firmware_ihx_start[];
/*--------------------------------------------------------------*/
/*--------------------------------------------------------------*/
/*! \ingroup CLASSES
*
*/
class gn3s
{
private:
/* First or second board */
int which;
/* GN3S FX2 Stuff */
struct fx2Config fx2_config;
struct usb_device *fx2_device;
struct usb_dev_handle *fx2_handle;
/* USB IDs */
unsigned int gn3s_vid, gn3s_pid;
/* Pull in the binary firmware */
int fstart;
int fsize;
//char *gn3s_firmware;
public:
gn3s(int _which); //!< Constructor
~gn3s(); //!< Destructor
/* FX2 functions */
struct usb_device* usb_fx2_find(int vid, int pid, char info, int ignore);
bool usb_fx2_configure(struct usb_device *fx2, fx2Config *fx2c);
fusb_devhandle* make_devhandle (usb_dev_handle *udh);
int read(void *buff, int bytes);
int write_cmd(int request, int value, int index, unsigned char *bytes, int len);
bool _get_status(int which, bool *trouble);
bool check_rx_overrun();
bool usrp_xfer(char VRQ_TYPE, bool start);
/* Used to flash the GN3S */
int atoz(char *s);
void upload_ram(char *buf, int start, int len);
void program_fx2(char *filename, char mem);
int prog_gn3s_board();
};
/*--------------------------------------------------------------*/
#endif /*GN3S_H_ */