hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
// SPDX-License-Identifier: GPL-2.0
/********************************************************************************
*
*  Copyright (C) 2017     NEXTCHIP Inc. All rights reserved.
*  Module        : Common header file
*  Description    : This file is common header file
*  Author        :
*  Date         :
*  Version        : Version 2.0
*
********************************************************************************
*  History      :
*
*
********************************************************************************/
#ifndef __COMMON_H__
#define __COMMON_H__
 
unsigned char nvp6158_I2CReadByte8(unsigned char devaddress, unsigned char address);
void nvp6158_I2CWriteByte8(unsigned char devaddress, unsigned char address, unsigned char data);
 
#define  gpio_i2c_read   nvp6158_I2CReadByte8
#define  gpio_i2c_write  nvp6158_I2CWriteByte8
 
//#define STREAM_ON_DEFLAULT
 
#define I2C_0       (0)
#define I2C_1       (1)
#define I2C_2       (2)
#define I2C_3       (3)
 
// device address define
#define NVP6158_R0_ID     0xA1
#define NVP6158C_R0_ID     0xA0   //6158B AND 6158C USES THE SAME CHIPID,DIFF IN REV_ID
#define NVP6158_REV_ID     0x00
#define NVP6168_R0_ID     0xC1
#define NVP6168C_R0_ID     0xC0
//#define NVP6158C_REV_ID     0x01
#define CH_PER_CHIP        4
 
#define NTSC        0x00
#define PAL            0x01
 
#define AHD_PELCO_16BIT
 
enum {
    NC_AD_SAMPLE_RATE_8000 = 8000,
    NC_AD_SAMPLE_RATE_16000 = 16000,
    NC_AD_SAMPLE_RATE_32000 = 32000,
    NC_AD_SAMPLE_RATE_44100 = 44100,
 
    NC_AD_SAMPLE_RATE_MAX,
};
 
enum {
   NC_AD_AI = 0,
   NC_AD_AOC,
 
   NC_AD_MAX
};
 
enum {
   NC_AD_BIT_WIDTH_8 = 0,
   NC_AD_BIT_WIDTH_16,
   NC_AD_BIT_WIDTH_24,
 
   NC_AD_BIT_WIDTH_MAX
};
 
//FIXME HI3520 Register
#define VIU_CH_CTRL                    0x08
#define VIU_ANC0_START                0x9c
#define VIU_ANC0_SIZE                0xa0
#define VIU_ANC1_START                0xa4
#define VIU_ANC1_SIZE                0xa8
#define VIU_BLANK_DATA_ADDR            0xac
 
#define IOC_VDEC_GET_EQ_DIST            0x07
#define IOC_VDEC_GET_INPUT_VIDEO_FMT    0x08
#define IOC_VDEC_GET_VIDEO_LOSS         0x09
#define IOC_VDEC_SET_SYNC                 0x0A
#define IOC_VDEC_SET_EQUALIZER            0x0B
#define IOC_VDEC_GET_DRIVERVER            0x0C
#define IOC_VDEC_PTZ_ACP_READ            0x0D
#define IOC_VDEC_SET_BRIGHTNESS            0x0E
#define IOC_VDEC_SET_CONTRAST           0x0F
#define IOC_VDEC_SET_HUE                0x10
#define IOC_VDEC_SET_SATURATION          0x11
#define IOC_VDEC_SET_SHARPNESS          0x12
#define IOC_VDEC_SET_CHNMODE            0x13
#define IOC_VDEC_SET_OUTPORTMODE          0x14
#define IOC_VDEC_SET_CHDETMODE          0x15
 
#define IOC_VDEC_ACP_WRITE              0x2f
#define IOC_VDEC_ACP_WRITE_EXTENTION    0x30
#define IOC_VDEC_PTZ_ACP_READ_EACH_CH    0x31
 
#define IOC_VDEC_INIT_MOTION            0x40
#define IOC_VDEC_ENABLE_MOTION            0x41
#define IOC_VDEC_DISABLE_MOTION            0x42
#define IOC_VDEC_SET_MOTION_AREA        0x43
#define IOC_VDEC_GET_MOTION_INFO        0x44
#define IOC_VDEC_SET_MOTION_DISPLAY        0x45
#define IOC_VDEC_SET_MOTION_SENS        0x46
 
#define IOC_AUDIO_SET_CHNNUM            0x80
#define IOC_AUDIO_SET_SAMPLE_RATE       0x81
#define IOC_AUDIO_SET_BITWIDTH          0x82
#define IOC_VDEC_SET_I2C                0x83
 
#define IOC_VDEC_ACP_POSSIBLE_FIRMUP    0xA0    // by Andy(2016-06-26)
#define IOC_VDEC_ACP_CHECK_ISPSTATUS    0xA1    // by Andy(2016-07-12)
#define IOC_VDEC_ACP_START_FIRMUP        0xA2    // by Andy(2016-07-12)
#define IOC_VDEC_ACP_FIRMUP                0xA3    // by Andy(2016-06-26)
#define IOC_VDEC_ACP_FIRMUP_END            0xA4    // by Andy(2016-06-26)
 
#define IOC_VDEC_GET_ADC_CLK            0xB1
#define IOC_VDEC_SET_ADC_CLK            0xB2
 
/*----------------------- Coaxial protocol  ---------------------*/
// Coax UP Stream - 8bit
#define IOC_VDEC_COAX_TX_INIT              0xA0
#define IOC_VDEC_COAX_TX_CMD_SEND      0xA1
 
// Coax UP Stream - 16bit only ACP 720P Support
#define IOC_VDEC_COAX_TX_16BIT_INIT          0xB4
#define IOC_VDEC_COAX_TX_16BIT_CMD_SEND      0xB5
#define IOC_VDEC_COAX_TX_CVI_NEW_CMD_SEND 0xB6
 
// Coax Down Stream
#define IOC_VDEC_COAX_RX_INIT      0xA2
#define IOC_VDEC_COAX_RX_DATA_READ 0xA3
#define IOC_VDEC_COAX_RX_BUF_CLEAR 0xA4
#define IOC_VDEC_COAX_RX_DEINIT    0xA5
 
// Coax Test
#define IOC_VDEC_COAX_TEST_TX_INIT_DATA_READ  0xA6
#define IOC_VDEC_COAX_TEST_DATA_SET           0xA7
#define IOC_VDEC_COAX_TEST_DATA_READ          0xA8
 
// Coax FW Update
#define IOC_VDEC_COAX_FW_ACP_HEADER_GET     0xA9
#define IOC_VDEC_COAX_FW_READY_CMD_SET  0xAA
#define IOC_VDEC_COAX_FW_READY_ACK_GET  0xAB
#define IOC_VDEC_COAX_FW_START_CMD_SET  0xAC
#define IOC_VDEC_COAX_FW_START_ACK_GET  0xAD
#define IOC_VDEC_COAX_FW_SEND_DATA_SET  0xAE
#define IOC_VDEC_COAX_FW_SEND_ACK_GET   0xAF
#define IOC_VDEC_COAX_FW_END_CMD_SET    0xB0
#define IOC_VDEC_COAX_FW_END_ACK_GET    0xB1
 
// Bank Dump Test
#define IOC_VDEC_COAX_BANK_DUMP_GET    0xB2
 
// ACP Option
#define IOC_VDEC_COAX_RT_NRT_MODE_CHANGE_SET 0xB3
 
/*----------------------- MOTION -----------------*/
#define IOC_VDEC_MOTION_SET            0x70
#define IOC_VDEC_MOTION_PIXEL_SET     0x71
#define IOC_VDEC_MOTION_PIXEL_GET     0x72
#define IOC_VDEC_MOTION_TSEN_SET      0x73
#define IOC_VDEC_MOTION_PSEN_SET      0x74
#define IOC_VDEC_MOTION_ALL_PIXEL_SET 0x75
#define IOC_VDEC_MOTION_DETECTION_GET 0x76
 
typedef struct _nvp6158_video_mode
{
    unsigned int chip;
    unsigned int mode;
   unsigned char vformat[16];
   unsigned char chmode[16];
}nvp6158_video_mode;
 
typedef struct _nvp6158_chn_mode
{
    unsigned char ch;
   unsigned char vformat;
   unsigned char chmode;
}nvp6158_chn_mode;
 
typedef struct _nvp6158_opt_mode
{
   unsigned char chipsel;
    unsigned char portsel;
   unsigned char portmode;
   unsigned char chid;
}nvp6158_opt_mode;
 
typedef struct _nvp6158_input_videofmt
{
    unsigned int inputvideofmt[16];
   unsigned int getvideofmt[16];
   unsigned int geteqstage[16];
   unsigned int getacpdata[16][8];
}nvp6158_input_videofmt;
 
typedef struct _nvp6158_input_videofmt_ch
{
   unsigned char ch;
   nvp6158_input_videofmt vfmt;
}nvp6158_input_videofmt_ch;
 
typedef struct _nvp6124_i2c_mode
{
   unsigned char flag;       // 0: read, 1 : write
   unsigned char slaveaddr;
   unsigned char bank;
   unsigned char address;
   unsigned char data;
}nvp6124_i2c_mode;
 
typedef struct _nvp6158_video_adjust
{
     unsigned char ch;
   unsigned char value;
}nvp6158_video_adjust;
 
typedef struct _nvp6158_motion_area
{
    unsigned char ch;
    int m_info[12];
}nvp6158_motion_area;
 
typedef struct _nvp6158_audio_playback
{
    unsigned char chip;
    unsigned char ch;
}nvp6158_audio_playback;
 
typedef struct _nvp6158_audio_da_mute
{
    unsigned char chip;
}nvp6158_audio_da_mute;
 
typedef struct _nvp6158_audio_da_volume
{
    unsigned char chip;
    unsigned char volume;
}nvp6158_audio_da_volume;
 
typedef struct _nvp6158_audio_format
{
   unsigned char format;   /* 0:i2s; 1:dsp */
    unsigned char mode;   /* 0:slave 1:master*/
   unsigned char dspformat; /*0:dsp;1:ssp*/
    unsigned char clkdir;  /*0:inverted;1:non-inverted*/
   unsigned char chn_num; /*2,4,8,16*/
   unsigned char bitrate; /*0:256fs 1:384fs invalid for nvp6114 2:320fs*/
   unsigned char precision;/*0:16bit;1:8bit*/
   unsigned char samplerate;/*0:8kHZ;1:16kHZ; 2:32kHZ*/
} nvp6158_audio_format;
 
// by Andy(2016-06-26)
/*typedef struct __file_information
{
   unsigned int    channel;
      unsigned char     filename[64];
      unsigned char     filePullname[64+32];
      unsigned int    filesize;
      unsigned int    filechecksum;            // (sum of file&0x0000FFFFF)
      unsigned int    currentpacketnum;        // current packet sequnce number(0,1,2........)
      unsigned int    filepacketnum;            // file packet number = (total size/128bytes), if remain exist, file packet number++
      unsigned char     onepacketbuf[128+32];
 
      unsigned int    currentFileOffset;        // Current file offset
      unsigned int    readsize;                // currnet read size
 
      unsigned int    ispossiblefirmup[16];     // is it possible to update firmware?
      int             result;
 
      int                appstatus[16];            // Application status
 
} FIRMWARE_UP_FILE_INFO, *PFIRMWARE_UP_FILE_INFO;
*/
enum __CABLE_TYPE_INFORMATION__
{
   CABLE_TYPE_COAX=0,
   CABLE_TYPE_UTP,
 
   CABLE_TYPE_MAX
};
 
enum __DETECTION_TYPE_INFORMATION__
{
   DETECTION_TYPE_AUTO=0,
   DETECTION_TYPE_AHD,
   DETECTION_TYPE_CHD,
   DETECTION_TYPE_THD,
   DETECTION_TYPE_CVBS,
 
   DETECTION_TYPE_MAX
};
 
#define NVP6158_IOC_MAGIC            'n'
 
#define NVP6158_SET_AUDIO_PLAYBACK           _IOW(NVP6158_IOC_MAGIC, 0x21, nvp6158_audio_playback) 
#define NVP6158_SET_AUDIO_DA_MUTE            _IOW(NVP6158_IOC_MAGIC, 0x22, nvp6158_audio_da_mute)
#define NVP6158_SET_AUDIO_DA_VOLUME          _IOW(NVP6158_IOC_MAGIC, 0x23, nvp6158_audio_da_volume)
/*set record format*/
#define NVP6158_SET_AUDIO_R_FORMAT             _IOW(NVP6158_IOC_MAGIC, 0x24, nvp6158_audio_format)
/*set playback format*/
#define NVP6158_SET_AUDIO_PB_FORMAT         _IOW(NVP6158_IOC_MAGIC, 0x25, nvp6158_audio_format)
 
#define _SET_BIT(data,bit) ((data)|=(1<<(bit)))
#define _CLE_BIT(data,bit) ((data)&=(~(1<<(bit))))
//////////////////////////////////////
typedef enum _NC_VIDEO_ONOFF
{
   VIDEO_LOSS_ON = 0,
   VIDEO_LOSS_OFF = 1,
 
} NC_VIDEO_ONOFF;
 
typedef struct _decoder_dev_ch_info_s
{
   unsigned char ch;
   unsigned char devnum;
   unsigned char fmt_def;
}decoder_dev_ch_info_s;
 
typedef enum NC_VIVO_CH_FORMATDEF
{
   NC_VIVO_CH_FORMATDEF_UNKNOWN = 0,
   NC_VIVO_CH_FORMATDEF_AUTO,
 
   AHD20_SD_H960_NT,   //960h*480i
   AHD20_SD_H960_PAL,  //960h*576i
   AHD20_SD_SH720_NT,  //720h*480i
   AHD20_SD_SH720_PAL, //720h*576i
   AHD20_SD_H1280_NT,
   AHD20_SD_H1280_PAL,
   AHD20_SD_H1440_NT,
   AHD20_SD_H1440_PAL,
   AHD20_SD_H960_EX_NT,  //1920h*480i
   AHD20_SD_H960_EX_PAL, //1920h*576i
   AHD20_SD_H960_2EX_NT,
   AHD20_SD_H960_2EX_PAL,
   AHD20_SD_H960_2EX_Btype_NT,     //3840h*480i
   AHD20_SD_H960_2EX_Btype_PAL, //3840h*576i
 
   AHD20_1080P_30P,
   AHD20_1080P_25P,
 
   AHD20_720P_60P,
   AHD20_720P_50P,
   AHD20_720P_30P,
   AHD20_720P_25P,
   AHD20_720P_30P_EX,
   AHD20_720P_25P_EX,
   AHD20_720P_30P_EX_Btype,
   AHD20_720P_25P_EX_Btype,
 
   AHD30_4M_30P,
   AHD30_4M_25P,
   AHD30_4M_15P,
   AHD30_3M_30P,
   AHD30_3M_25P,
   AHD30_3M_18P,    //2048 x 1536
   AHD30_5M_12_5P,    //2592 x 1944
   AHD30_5M_20P,    //2592 x 1944
 
 
   AHD30_5_3M_20P,
   AHD30_6M_18P,
   AHD30_6M_20P,
   AHD30_8M_X_30P,
   AHD30_8M_X_25P,
   AHD30_8M_7_5P,
   AHD30_8M_12_5P,
   AHD30_8M_15P,
 
   TVI_FHD_30P,
   TVI_FHD_25P,
   TVI_HD_60P,
   TVI_HD_50P,
   TVI_HD_30P,
   TVI_HD_25P,
   TVI_HD_30P_EX,
   TVI_HD_25P_EX,
   TVI_HD_B_30P,
   TVI_HD_B_25P,
   TVI_HD_B_30P_EX,
   TVI_HD_B_25P_EX,
   TVI_3M_18P,    //1920 x 1536
   TVI_5M_12_5P,
   TVI_5M_20P,
   TVI_4M_30P,
   TVI_4M_25P,
   TVI_4M_15P,
   TVI_8M_15P, 
   TVI_8M_12_5P,
 
   CVI_FHD_30P,
   CVI_FHD_25P,
   CVI_HD_60P,
   CVI_HD_50P,
   CVI_HD_30P,
   CVI_HD_25P,
   CVI_HD_30P_EX,
   CVI_HD_25P_EX,
   CVI_4M_30P,
   CVI_4M_25P,
   CVI_5M_20P,
   CVI_8M_15P,
   CVI_8M_12_5P,
 
   AHD20_1080P_60P,
   AHD20_1080P_50P,
   AHD20_1080P_15P,
   AHD20_1080P_12_5P,
 
   TVI_FHD_60P,
   TVI_FHD_50P,
 
   AHD20_960P_30P,
   AHD20_960P_25P,
   AHD20_960P_60P,
   AHD20_960P_50P,
 
   AHD20_1080P_15P_EX, // Hidden For test
   AHD20_1080P_12_5P_EX, // Hidden For test
 
   AHD20_720P_15P_2EX_Btype, // Hidden For test
   AHD20_720P_12_5P_2EX_Btype, // Hidden For test
 
   AHD20_720P_15P_EX_Btype, // Hidden For test
   AHD20_720P_12_5P_EX_Btype, // Hidden For test
 
   NC_VIVO_CH_FORMATDEF_MAX,
 
} NC_VIVO_CH_FORMATDEF;
 
typedef enum NC_FORMAT_FPS
{
   FMT_FPS_UNKNOWN = 0,
   FMT_NT = 1,
   FMT_PAL,
   FMT_12_5P,
   FMT_7_5P,
   FMT_30P,
   FMT_25P,
   FMT_50P,
   FMT_60P,
   FMT_15P,
   FMT_18P,
   FMT_18_75P,
   FMT_20P,
 
   FMT_FPS_MAX,
 
} NC_FORMAT_FPS;
 
typedef enum NC_FORMAT_STANDARD
{
   FMT_STD_UNKNOWN = 0,
   FMT_SD,
   FMT_AHD20,
   FMT_AHD30,
   FMT_TVI,
   FMT_CVI,
 
   FMT_AUTO,        // FIXME
 
   FMT_STD_MAX,
 
} NC_FORMAT_STANDARD;
 
typedef enum NC_FORMAT_RESOLUTION
{
   FMT_RESOL_UNKNOWN = 0,
   FMT_SH720,
   FMT_H960,
   FMT_H1280,
   FMT_H1440,
   FMT_H960_EX,
   FMT_H960_2EX,
   FMT_H960_Btype_2EX,
   FMT_720P,
   FMT_720P_EX,
   FMT_720P_Btype,
   FMT_720P_Btype_EX,
   FMT_1080P,
   FMT_1080P_EX,
   FMT_3M,
   FMT_4M,
   FMT_5M,
   FMT_5_3M,
   FMT_6M,
   FMT_8M_X,
   FMT_8M,
 
   FMT_H960_Btype_2EX_SP,
   FMT_720P_Btype_EX_SP,
 
   FMT_RESOL_MAX,
 
} NC_FORMAT_RESOLUTION;
 
typedef enum _dvp_mode
{
   BT601 = 0,
   BT656_1MUX,
   BT656_2MUX,
   BT656_4MUX,
   BT656I_TEST_MODES,
   BT1120_1MUX,
   BT1120_2MUX,
   BT1120_4MUX,
   NVP6158_DVP_MODES_END
} NVP6158_DVP_MODE;
 
typedef struct VDEC_DEV_INFORM_S{
 
   unsigned char nvp6158_chip_id[4];
   unsigned char chip_rev[4];
   unsigned char chip_addr[4];
 
   unsigned char Total_Port_Num;
   unsigned char Total_Chip_Cnt;
 
}VDEC_DEV_INFORM_S;
 
typedef struct _NVP6158_INFORMATION_S
{
   unsigned char            ch;
   NC_VIVO_CH_FORMATDEF     curvideofmt[ 16 ];
   NC_VIVO_CH_FORMATDEF     prevideofmt[ 16 ];
   unsigned char              curvideoloss[ 16 ];
   unsigned char            vfc[16];
   unsigned char            debounce[16][5];
   unsigned char            debounceidx[16];
   VDEC_DEV_INFORM_S         chipinform;
 
} NVP6158_INFORMATION_S;
 
#endif