/* Common header file of Linux driver for the WideView/ Yakumo/ Hama/
 * Typhoon/ Yuan DVB-T USB2.0 receiver.
 *
 * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
 *
 *	This program 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, version 2.
 *
 * see Documentation/dvb/README.dvb-usb for more information
 */
#ifndef _DVB_USB_DTT200U_H_
#define _DVB_USB_DTT200U_H_

#define DVB_USB_LOG_PREFIX "dtt200u"
#include "dvb-usb.h"

extern int dvb_usb_dtt200u_debug;
#define deb_info(args...) dprintk(dvb_usb_dtt200u_debug,0x01,args)
#define deb_xfer(args...) dprintk(dvb_usb_dtt200u_debug,0x02,args)

/* guessed protocol description (reverse engineered):
 * read
 *  00 - USB type 0x02 for usb2.0, 0x01 for usb1.1
 *  88 - locking 2 bytes (0x80 0x40 == no signal, 0x89 0x20 == nice signal)
 */

#define GET_SPEED            0x00
#define GET_TUNE_STATUS      0x81
#define GET_RC_CODE          0x84
#define GET_CONFIGURATION    0x88
#define GET_AGC              0x89
#define GET_SNR              0x8a
#define GET_VIT_ERR_CNT      0x8c
#define GET_RS_ERR_CNT       0x8d
#define GET_RS_UNCOR_BLK_CNT 0x8e

/* write
 *  01 - init
 *  02 - frequency (divided by 250000)
 *  03 - bandwidth
 *  04 - pid table (index pid(7:0) pid(12:8))
 *  05 - reset the pid table
 *  08 - transfer switch
 */

#define SET_INIT         0x01
#define SET_RF_FREQ      0x02
#define SET_BANDWIDTH    0x03
#define SET_PID_FILTER   0x04
#define RESET_PID_FILTER 0x05
#define SET_STREAMING    0x08

extern struct dvb_frontend * dtt200u_fe_attach(struct dvb_usb_device *d);

#endif
