/* Bt832 CMOS Camera Video Processor (VP)

 The Bt832 CMOS Camera Video Processor chip connects a Quartsight CMOS
  color digital camera directly to video capture devices via an 8-bit,
  4:2:2 YUV or YCrCb video interface.

 i2c addresses: 0x88 or 0x8a
 */

/* The 64 registers: */

// Input Processor
#define BT832_OFFSET 0
#define BT832_RCOMP	1
#define BT832_G1COMP	2
#define BT832_G2COMP	3
#define BT832_BCOMP	4
// Exposures:
#define BT832_FINEH	5
#define BT832_FINEL	6
#define BT832_COARSEH	7
#define BT832_COARSEL   8
#define BT832_CAMGAIN	9
// Main Processor:
#define BT832_M00	10
#define BT832_M01	11
#define BT832_M02	12
#define BT832_M10	13
#define BT832_M11	14
#define BT832_M12	15
#define BT832_M20	16
#define BT832_M21	17
#define BT832_M22	18
#define BT832_APCOR	19
#define BT832_GAMCOR	20
// Level Accumulator Inputs
#define BT832_VPCONTROL2	21
#define BT832_ZONECODE0	22
#define BT832_ZONECODE1	23
#define BT832_ZONECODE2	24
#define BT832_ZONECODE3	25
// Level Accumulator Outputs:
#define BT832_RACC	26
#define BT832_GACC	27
#define BT832_BACC	28
#define BT832_BLACKACC	29
#define BT832_EXP_AGC	30
#define BT832_LACC0	31
#define BT832_LACC1	32
#define BT832_LACC2	33
#define BT832_LACC3	34
#define BT832_LACC4	35
#define BT832_LACC5	36
#define BT832_LACC6	37
#define BT832_LACC7	38
// System:
#define BT832_VP_CONTROL0	39
#define BT832_VP_CONTROL1	40
#define BT832_THRESH	41
#define BT832_VP_TESTCONTROL0	42
#define BT832_VP_DMCODE	43
#define BT832_ACB_CONFIG	44
#define BT832_ACB_GNBASE	45
#define BT832_ACB_MU	46
#define BT832_CAM_TEST0	47
#define BT832_AEC_CONFIG	48
#define BT832_AEC_TL	49
#define BT832_AEC_TC	50
#define BT832_AEC_TH	51
// Status:
#define BT832_VP_STATUS	52
#define BT832_VP_LINECOUNT	53
#define BT832_CAM_DEVICEL	54 // e.g. 0x19
#define BT832_CAM_DEVICEH	55 // e.g. 0x40  == 0x194 Mask0, 0x194 = 404 decimal (VVL-404 camera)
#define BT832_CAM_STATUS		56
 #define BT832_56_CAMERA_PRESENT 0x20
//Camera Setups:
#define BT832_CAM_SETUP0	57
#define BT832_CAM_SETUP1	58
#define BT832_CAM_SETUP2	59
#define BT832_CAM_SETUP3	60
// System:
#define BT832_DEFCOR		61
#define BT832_VP_TESTCONTROL1	62
#define BT832_DEVICE_ID		63
# define BT832_DEVICE_ID__31		0x31 // Bt832 has ID 0x31

/* STMicroelectronivcs VV5404 camera module
   i2c: 0x20: sensor address
   i2c: 0xa0: eeprom for ccd defect map
 */
#define VV5404_device_h		0x00  // 0x19
#define VV5404_device_l		0x01  // 0x40
#define VV5404_status0		0x02
#define VV5404_linecountc	0x03 // current line counter
#define VV5404_linecountl	0x04
#define VV5404_setup0		0x10
#define VV5404_setup1		0x11
#define VV5404_setup2		0x12
#define VV5404_setup4		0x14
#define VV5404_setup5		0x15
#define VV5404_fine_h		0x20  // fine exposure
#define VV5404_fine_l		0x21
#define VV5404_coarse_h		0x22  //coarse exposure
#define VV5404_coarse_l		0x23
#define VV5404_gain		0x24 // ADC pre-amp gain setting
#define VV5404_clk_div		0x25
#define VV5404_cr		0x76 // control register
#define VV5404_as0		0x77 // ADC setup register


// IOCTL
#define BT832_HEXDUMP   _IOR('b',1,int)
#define BT832_REATTACH	_IOR('b',2,int)

/* from BT8x8VXD/capdrv/dialogs.cpp */

/*
typedef enum { SVI, Logitech, Rockwell } CAMERA;

static COMBOBOX_ENTRY gwCameraOptions[] =
{
   { SVI,      "Silicon Vision 512N" },
   { Logitech, "Logitech VideoMan 1.3"  },
   { Rockwell, "Rockwell QuartzSight PCI 1.0"   }
};

// SRAM table values
//===========================================================================
typedef enum { TGB_NTSC624, TGB_NTSC780, TGB_NTSC858, TGB_NTSC392 } TimeGenByte;

BYTE SRAMTable[][ 60 ] =
{
   // TGB_NTSC624
   {
      0x33, // size of table = 51
      0x0E, 0xC0, 0x00, 0x00, 0x90, 0x02, 0x03, 0x10, 0x03, 0x06,
      0x10, 0x04, 0x12, 0x12, 0x05, 0x02, 0x13, 0x04, 0x19, 0x00,
      0x04, 0x39, 0x00, 0x06, 0x59, 0x08, 0x03, 0x85, 0x08, 0x07,
      0x03, 0x50, 0x00, 0x91, 0x40, 0x00, 0x11, 0x01, 0x01, 0x4D,
      0x0D, 0x02, 0x03, 0x11, 0x01, 0x05, 0x37, 0x00, 0x37, 0x21, 0x00
   },
   // TGB_NTSC780
   {
      0x33, // size of table = 51
      0x0e, 0xc0, 0x00, 0x00, 0x90, 0xe2, 0x03, 0x10, 0x03, 0x06,
      0x10, 0x34, 0x12, 0x12, 0x65, 0x02, 0x13, 0x24, 0x19, 0x00,
      0x24, 0x39, 0x00, 0x96, 0x59, 0x08, 0x93, 0x85, 0x08, 0x97,
      0x03, 0x50, 0x50, 0xaf, 0x40, 0x30, 0x5f, 0x01, 0xf1, 0x7f,
      0x0d, 0xf2, 0x03, 0x11, 0xf1, 0x05, 0x37, 0x30, 0x85, 0x21, 0x50
   },
   // TGB_NTSC858
   {
      0x33, // size of table = 51
      0x0c, 0xc0, 0x00, 0x00, 0x90, 0xc2, 0x03, 0x10, 0x03, 0x06,
      0x10, 0x34, 0x12, 0x12, 0x65, 0x02, 0x13, 0x24, 0x19, 0x00,
      0x24, 0x39, 0x00, 0x96, 0x59, 0x08, 0x93, 0x83, 0x08, 0x97,
      0x03, 0x50, 0x30, 0xc0, 0x40, 0x30, 0x86, 0x01, 0x01, 0xa6,
      0x0d, 0x62, 0x03, 0x11, 0x61, 0x05, 0x37, 0x30, 0xac, 0x21, 0x50
   },
   // TGB_NTSC392
   // This table has been modified to be used for Fusion Rev D
   {
      0x2A, // size of table = 42
      0x06, 0x08, 0x04, 0x0a, 0xc0, 0x00, 0x18, 0x08, 0x03, 0x24,
      0x08, 0x07, 0x02, 0x90, 0x02, 0x08, 0x10, 0x04, 0x0c, 0x10,
      0x05, 0x2c, 0x11, 0x04, 0x55, 0x48, 0x00, 0x05, 0x50, 0x00,
      0xbf, 0x0c, 0x02, 0x2f, 0x3d, 0x00, 0x2f, 0x3f, 0x00, 0xc3,
      0x20, 0x00
   }
};

//===========================================================================
// This is the structure of the camera specifications
//===========================================================================
typedef struct tag_cameraSpec
{
   SignalFormat signal;       // which digital signal format the camera has
   VideoFormat  vidFormat;    // video standard
   SyncVideoRef syncRef;      // which sync video reference is used
   State        syncOutput;   // enable sync output for sync video input?
   DecInputClk  iClk;         // which input clock is used
   TimeGenByte  tgb;          // which timing generator byte does the camera use
   int          HReset;       // select 64, 48, 32, or 16 CLKx1 for HReset
   PLLFreq      pllFreq;      // what synthesized frequency to set PLL to
   VSIZEPARMS   vSize;        // video size the camera produces
   int          lineCount;    // expected total number of half-line per frame - 1
   BOOL         interlace;    // interlace signal?
} CameraSpec;

//===========================================================================
// <UPDATE REQUIRED>
// Camera specifications database. Update this table whenever camera spec
// has been changed or added/deleted supported camera models
//===========================================================================
static CameraSpec dbCameraSpec[ N_CAMERAOPTIONS ] =
{  // Silicon Vision 512N
   { Signal_CCIR656, VFormat_NTSC, VRef_alignedCb, Off, DecClk_GPCLK, TGB_NTSC624, 64, KHz19636,
      // Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
   {         512,           0x64,       480,    0x13,      240 },         0,       TRUE
   },
   // Logitech VideoMan 1.3
   { Signal_CCIR656, VFormat_NTSC, VRef_alignedCb, Off, DecClk_GPCLK, TGB_NTSC780, 64, KHz24545,
      // Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
      {      640,           0x80,       480,    0x1A,      240 },         0,       TRUE
   },
   // Rockwell QuartzSight
   // Note: Fusion Rev D (rev ID 0x02) and later supports 16 pixels for HReset which is preferable.
   //       Use 32 for earlier version of hardware. Clkx1_HDELAY also changed from 0x27 to 0x20.
   { Signal_CCIR656, VFormat_NTSC, VRef_alignedCb, Off, DecClk_GPCLK, TGB_NTSC392, 16, KHz28636,
      // Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
      {      352,           0x20,       576,    0x08,      288 },       607,       FALSE
   }
};
*/

/*
The corresponding APIs required to be invoked are:
SetConnector( ConCamera, TRUE/FALSE );
SetSignalFormat( spec.signal );
SetVideoFormat( spec.vidFormat );
SetSyncVideoRef( spec.syncRef );
SetEnableSyncOutput( spec.syncOutput );
SetTimGenByte( SRAMTable[ spec.tgb ], SRAMTableSize[ spec.tgb ] );
SetHReset( spec.HReset );
SetPLL( spec.pllFreq );
SetDecInputClock( spec.iClk );
SetVideoInfo( spec.vSize );
SetTotalLineCount( spec.lineCount );
SetInterlaceMode( spec.interlace );
*/

/* from web:
 Video Sampling
Digital video is a sampled form of analog video. The most common sampling schemes in use today are:
                  Pixel Clock   Horiz    Horiz    Vert
                   Rate         Total    Active
NTSC square pixel  12.27 MHz    780      640      525
NTSC CCIR-601      13.5  MHz    858      720      525
NTSC 4FSc          14.32 MHz    910      768      525
PAL  square pixel  14.75 MHz    944      768      625
PAL  CCIR-601      13.5  MHz    864      720      625
PAL  4FSc          17.72 MHz   1135      948      625

For the CCIR-601 standards, the sampling is based on a static orthogonal sampling grid. The luminance component (Y) is sampled at 13.5 MHz, while the two color difference signals, Cr and Cb are sampled at half that, or 6.75 MHz. The Cr and Cb samples are colocated with alternate Y samples, and they are taken at the same position on each line, such that one sample is coincident with the 50% point of the falling edge of analog sync. The samples are coded to either 8 or 10 bits per component.
*/

/* from DScaler:*/
/*
//===========================================================================
// CCIR656 Digital Input Support: The tables were taken from DScaler proyect
//
// 13 Dec 2000 - Michael Eskin, Conexant Systems - Initial version
//

//===========================================================================
// Timing generator SRAM table values for CCIR601 720x480 NTSC
//===========================================================================
// For NTSC CCIR656
BYTE BtCard::SRAMTable_NTSC[] =
{
    // SRAM Timing Table for NTSC
    0x0c, 0xc0, 0x00,
    0x00, 0x90, 0xc2,
    0x03, 0x10, 0x03,
    0x06, 0x10, 0x34,
    0x12, 0x12, 0x65,
    0x02, 0x13, 0x24,
    0x19, 0x00, 0x24,
    0x39, 0x00, 0x96,
    0x59, 0x08, 0x93,
    0x83, 0x08, 0x97,
    0x03, 0x50, 0x30,
    0xc0, 0x40, 0x30,
    0x86, 0x01, 0x01,
    0xa6, 0x0d, 0x62,
    0x03, 0x11, 0x61,
    0x05, 0x37, 0x30,
    0xac, 0x21, 0x50
};

//===========================================================================
// Timing generator SRAM table values for CCIR601 720x576 NTSC
//===========================================================================
// For PAL CCIR656
BYTE BtCard::SRAMTable_PAL[] =
{
    // SRAM Timing Table for PAL
    0x36, 0x11, 0x01,
    0x00, 0x90, 0x02,
    0x05, 0x10, 0x04,
    0x16, 0x14, 0x05,
    0x11, 0x00, 0x04,
    0x12, 0xc0, 0x00,
    0x31, 0x00, 0x06,
    0x51, 0x08, 0x03,
    0x89, 0x08, 0x07,
    0xc0, 0x44, 0x00,
    0x81, 0x01, 0x01,
    0xa9, 0x0d, 0x02,
    0x02, 0x50, 0x03,
    0x37, 0x3d, 0x00,
    0xaf, 0x21, 0x00,
};
*/
