⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw_tw2834_api.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 C
📖 第 1 页 / 共 2 页
字号:
#else	ioctl_arg.addr = sub_addr;	ioctl_arg.bank = page+1;	ioctl_arg.len = length;	for(ii=0; ii < length; ii++) 		ioctl_arg.data[ii] = *(data+ii);		if (ioctl(fd_tw2834, REGISTER_WRITE, &ioctl_arg) < 0) {		m_ERROR("tw2834.c: local bus write error\n");		sem_post(&tw2834_sem);				return FAILURE;	}#endif	sem_post(&tw2834_sem);		return SUCCESS;}RETURN tw2834_read_reg(UNS8 page, UNS8 sub_addr, UNS8 *data, UNS16 length){#ifdef I2C_INTERFACE	UNS8	buf[4];	#else	IOCTL_TW283X ioctl_arg;#endif	sem_wait(&tw2834_sem);#ifdef I2C_INTERFACE		if(ioctl(fd_tw2834, I2C_SLAVE_FORCE, TW2834_READ_CMD) < 0)	{		m_ERROR("tw2834.c: set slave addr error\n");		sem_post(&tw2834_sem);				return FAILURE;	}#else	ioctl_arg.addr = sub_addr;	ioctl_arg.bank = page+1;	ioctl_arg.len = length;	if (ioctl(fd_tw2834, REGISTER_READ, &ioctl_arg) < 0) {		m_ERROR("tw2834.c: local bus read error\n");		sem_post(&tw2834_sem);				return FAILURE;	}	memcpy(data, ioctl_arg.data, length);#endif#ifdef I2C_INTERFACE	buf[0] = page;	buf[1] = sub_addr;    		if(write(fd_tw2834, buf, 2) != 2)	{		m_ERROR("tw2834.c: sub addr write data error %x\n", sub_addr);		sem_post(&tw2834_sem);				return FAILURE;	}		if(read(fd_tw2834, data, length) != length)	{		m_ERROR("tw2834.c: read data error1\n");		sem_post(&tw2834_sem);				return FAILURE;	}#endif	sem_post(&tw2834_sem);		return SUCCESS;}/* only one font write */RETURN tw2834_write_font(S16 path, S16 posx, S16 posy, S16 color, S16 property, S16 font_index)	{	UNS8 buf[4];			posy |= CHAR_WR_MODE;  /* Write 1 Character Line Attribute (bit[6:5]) */	if(path == Y_PATH)	                 /* Write the display RAM of display(X_PATH) path or record path(Y_PATH) */		posy |=BIT7;                      /* display to the record path */	buf[0] = (UNS8)posy;	buf[1] = (UNS8) ( CHAR_RD_FLD | FONT_PAGE0);	buf[2] = CHAR_VF_SIZE | CHAR_HF_SIZE;	buf[3] = (UNS8)posx;	buf[4] = (UNS8)(color | property);		IfBitSet(property,OSD_CLEAR)			buf[5] = 0x00;	else										 		buf[5] = (UNS8)font_index;			tw2834_burst_write_reg(TW2834_PAGE1, 0x9b, buf, 6);    return SUCCESS;}/* string write to the fontRAM */RETURN tw2834_write_string(S16 path, S16 posx, S16 posy, S16 color, S16 property, UNS8 *str){	UNS8 buf[256], ii=0;	UNS8 count, len;	len = GetCodeLength(str);	if(!len)		return SUCCESS;	posy |= CHAR_WR_MODE;  /* Write 1 Character Line Attribute (bit[6:5]) */	if(path == Y_PATH)	           /* Write the display RAM of display(X_PATH) path or record path(Y_PATH) */		posy |=BIT7;                /* display to the record path */	buf[0] = (UNS8)posy;	buf[1] = (UNS8) ( CHAR_RD_FLD | FONT_PAGE0);	buf[2] = CHAR_VF_SIZE | CHAR_HF_SIZE;	buf[3] = (UNS8)posx;	for(count=0; count<len; count++) {		buf[4+ii] = (UNS8)(color | property);		++ii;		IfBitSet(property, OSD_CLEAR)			buf[4+ii] = 0x00;			else IfBitSet(property,OSD_MODE_BMP)   			buf[4+ii] = OSD_MODE_BMP|(*str - ' '); /* font index */		else			buf[4+ii]= *str - ' ';		ii++;		str++;	}	tw2834_burst_write_reg(TW2834_PAGE1, 0x9b, buf, 4 + ( len * 2)); 	return SUCCESS;}RETURN tw2834_osd_clear(S16 path){	/* display RAM clear  ( x-path and y-path ) */	tw2834_write_reg(TW2834_PAGE1, 0xa0, (UNS8)path); 	/* must be delay */	usleep(100);			return SUCCESS;}// pentamicro 2006.01.11/* for record path */RETURN tw2834_set_mux_rec(VIDEO_SIZE size, VIDEO_MODE mode) {	int ii;#if 1//filter test 	UNS8 buf, peak_reg=0x00, anti_alia_reg=0x00, comb_reg=0x00, pal_delay_reg;#endif	switch(size) {		case D1: /* for D1 size */			/* frame capture */			tw2834_write_reg(TW2834_PAGE1, 0x56, 0xe0);			/* mode : set to 720 mode in case of D1 */ 			tw2834_write_reg(TW2834_PAGE1, 0x51, 0x00);			/* size: '0x00':quad, '0xFF':full */			tw2834_write_reg(TW2834_PAGE1, 0x6c, 0xff);				/* position all ch : 0 */			tw2834_write_reg(TW2834_PAGE1, 0x6d, 0x00);				for(ii=0; ii < 4; ii++)			{				/* switch mode */				tw2834_write_reg(TW2834_PAGE1, 0x60 + 0x03 * ii, 0xa0 | ii);					/* horizontal size */				tw2834_write_reg(TW2834_PAGE0, 0x1e + 0x40 * ii, 0xff);					/* vertical size */				tw2834_write_reg(TW2834_PAGE0, 0x1a + 0x40 * ii, 0xff);	#if 1//filter test				pal_delay_reg = mode==NTSC ? 0x07: 0x0f;  /* pal delay line mode */				tw2834_read_reg(TW2834_PAGE0, 0x14 + 0x40*ii, &buf, 1);					tw2834_write_reg(TW2834_PAGE0, 0x14 + 0x40*ii, (buf & 0x34) | peak_reg);					tw2834_read_reg(TW2834_PAGE0, 0x15 + 0x40*ii, &buf, 1);					tw2834_write_reg(TW2834_PAGE0, 0x15 + 0x40*ii, (buf & 0x33) | anti_alia_reg);					tw2834_write_reg(TW2834_PAGE0, 0x17 + 0x40*ii, comb_reg);					tw2834_write_reg(TW2834_PAGE0, 0x21 + 0x40*ii, pal_delay_reg);	#else //org				/* vertical anti-aliasing mode set for y-path( full bandwidth ) */				tw2834_write_reg(TW2834_PAGE0, 0x15 + 0x40 * ii, 0x00);	#endif			}			/* PEIROD = 2 field update */			tw2834_write_reg(TW2834_PAGE1, 0x58, 0x01);				break;		case CIF: /* for CIF size */			/* frame capture */			tw2834_write_reg(TW2834_PAGE1, 0x56, 0xe0);			/* mode : set to 704 mode in case of CIF */ 			tw2834_write_reg(TW2834_PAGE1, 0x51, 0x01);				/* size: '0x00':quad, '0xFF':full */			tw2834_write_reg(TW2834_PAGE1, 0x6c, 0x00);				/* position ch1: 0, ch2: 1, ch3: 2, ch4: 3 */			tw2834_write_reg(TW2834_PAGE1, 0x6d, 0xe4);									for(ii=0; ii < 4; ii++)			{				/* live mode */				tw2834_write_reg(TW2834_PAGE1, 0x60 + 0x03 * ii, 0x80 | ii);					/* horizontal size ( 1/2 ) */				tw2834_write_reg(TW2834_PAGE0, 0x1e + 0x40 * ii, 0x7f);					/* vertical size ( 1/2 ) */				tw2834_write_reg(TW2834_PAGE0, 0x1a + 0x40 * ii, 0x7f);	#if 1//filter test				peak_reg 	= mode==NTSC ? 0xc8: 0x40;/* NTSC= 93.75% peaking, 2~4MHz band, 	PAL= 31.25% peaking, 4~5MHz band */				anti_alia_reg = mode==NTSC ? 0x84: 0x80;/* NTSC= 0.25 line band, 2MHz band, 		PAL= 0.25 line band, full band */				comb_reg 	= mode==NTSC ? 0x40: 0xc0;/* NTSC= Force trap filter mode, 			PAL= Wide band, Force trap */				pal_delay_reg = 0x07; /* vertical scaling mode */								tw2834_read_reg(TW2834_PAGE0, 0x14 + 0x40*ii, &buf, 1);					tw2834_write_reg(TW2834_PAGE0, 0x14 + 0x40*ii, (buf & 0x34) | peak_reg);					tw2834_read_reg(TW2834_PAGE0, 0x15 + 0x40*ii, &buf, 1);					tw2834_write_reg(TW2834_PAGE0, 0x15 + 0x40*ii, (buf & 0x33) | anti_alia_reg);					tw2834_write_reg(TW2834_PAGE0, 0x17 + 0x40*ii, comb_reg);					tw2834_write_reg(TW2834_PAGE0, 0x21 + 0x40*ii, pal_delay_reg);	#else //org				/* vertical anti-aliasing mode set for y-path ( 0.25 line-rate bandwidth ) */				tw2834_write_reg(TW2834_PAGE0, 0x15 + 0x40 * ii, 0x80);	#endif							}			/* PEIROD = 2 field update */			tw2834_write_reg(TW2834_PAGE1, 0x58, 0x01);				break;		default:			break;	}			return SUCCESS;	      } RETURN tw2834_motion_block_init(UNS16 ch, VIDEO_MODE mode, BOOL flag) {	if(flag) {		if(mode == NTSC)			tw2834_burst_write_reg(TW2834_PAGE2,0x60 + (ch * 8),tbl_ntsc_page2_ary_box, sizeof(tbl_ntsc_page2_ary_box));		else			tw2834_burst_write_reg(TW2834_PAGE2,0x60 + (ch * 8),tbl_pal_page2_ary_box, sizeof(tbl_pal_page2_ary_box));	}else {		tw2834_write_reg(TW2834_PAGE2, 0x60 + (ch * 8), 0x00); 	}	return SUCCESS;	      } /* 2dbox position set for motion block */RETURN tw2834_cursor_set_pos(UNS16 ch, UNS16 posx, UNS16 posy) {	unsigned char buf;	buf = (posx << 4 ) & 0xf0;	buf |= (posy & 0x0f);	tw2834_write_reg(TW2834_PAGE2, 0x67 + (ch * 8), buf); 	return SUCCESS;	      } /* 2dbox position set for motion block */RETURN tw2834_cursor_select(S16 ch, S16 posx, S16 posy, S16 color, BOOL flag){	unsigned char buf[2] = { 0x00, 0x00 };	UNS16 read_reg;	tw2834_read_reg(TW2834_PAGE2, 0x86 + (ch * 0x20) + (posy * 2), buf, 2); 	read_reg = (UNS16)((buf[0]<<8) | buf[1]); /* typecasting */	if(flag) 		read_reg |= (1 <<  posx);	else 		read_reg &= ~(1 <<  posx);	*(UNS16 *)buf = read_reg; /* typecasting */	tw2834_burst_write_reg(TW2834_PAGE2, 0x86 + (ch * 0x20) + (posy * 2), buf, 2); 	return SUCCESS;	      }#if 0//org codevoid tw2834_set_blink_time(S16 property){	/* set to the font blink time	[5-4]bit : 00 : 0.25 sec (default)	              01 : 0.5 sec	              10 : 1 sec	              11 : 2 sec  */	tw2834_write_reg(TW2834_PAGE1, 0xa6, property & 0xf0); }#endif/* 2dbox draw */RETURN tw2834_bg_box_draw(S16 box_num, S16 draw_flag, S16 mode, S16 posx, S16 posy, S16 sizex, S16 sizey){	/*  box_num : 0 ~ 15 	 *   pos_x     : 0 ~ 360,   				pos_y     : 0 ~ 288	 *	size_x : 0 ~ 180( 0 ~ 720 pixel ),  size_y : 0 ~ 144( 0 ~ 288 line ) */	tw2834_write_reg(TW2834_PAGE2, 0x10 + ( box_num * 5 ), (draw_flag<<7) | mode | BOX_PLNMIX | BOX_PLN_EN);	if(!draw_flag)		return SUCCESS;		tw2834_write_reg(TW2834_PAGE2, 0x11 + ( box_num * 5 ), posx);	tw2834_write_reg(TW2834_PAGE2, 0x12 + ( box_num * 5 ), sizex);	tw2834_write_reg(TW2834_PAGE2, 0x13 + ( box_num * 5 ), posy);	tw2834_write_reg(TW2834_PAGE2, 0x14 + ( box_num * 5 ), sizey);		return SUCCESS;}RETURN tw2834_initialize(VIDEO_MODE *mode){	UNS16 ii;	UNS8 data, buf;#ifdef MANUAL_VIDEO_MODE	switch(*mode) {		case NTSC:			data = 0x00;			buf = 0xc4;			break;		case PAL:			data = 0x80;			buf = 0x94;			break;	}#else//auto video mode	/* get current mode (NTSC/PAL) */	tw2834_read_reg(TW2834_PAGE0, 0x00, &buf, 1); 	buf >>= 5;	switch(buf) {		case 0:		case 1:		case 2:		case 3:			*mode = PAL;			data = 0x80;						break;		case 4:		case 5:		case 6:			*mode = NTSC;			data = 0x00;			break;		default:			*mode = NTSC;			data = 0x00;			break;	}	buf <<= 4;	buf |= 0x84;#endif	/* set for current mode */	tw2834_write_reg(TW2834_PAGE1, 0x00, data);	/* current video mode */	m_MSG("\nCurrent Video Mode = %s\n\n", *mode ? "PAL": "NTSC");	// TW2834 page 0 part init	if(*mode == NTSC) { /* NTSC set */		for(ii=0; ii<4; ii++) {			tw2834_burst_write_reg(TW2834_PAGE0, 0x00+0x40*ii, tbl_ntsc_page0_common, sizeof(tbl_ntsc_page0_common));			tw2834_write_reg(TW2834_PAGE0, 0x22+0x40*ii, ii);		}		tw2834_burst_write_reg(TW2834_PAGE0, 0x38, tbl_ntsc_page0_sfr1, sizeof(tbl_ntsc_page0_sfr1));		tw2834_burst_write_reg(TW2834_PAGE0, 0x78, tbl_ntsc_page0_sfr2, sizeof(tbl_ntsc_page0_sfr2)); 		tw2834_burst_write_reg(TW2834_PAGE0, 0xb8, tbl_ntsc_page0_sfr3, sizeof(tbl_ntsc_page0_sfr3));		tw2834_burst_write_reg(TW2834_PAGE0, 0xf8, tbl_ntsc_page0_sfr4, sizeof(tbl_ntsc_page0_sfr4));	} else {                       /* PAL set */		for(ii=0; ii<4; ii++) {			tw2834_burst_write_reg(TW2834_PAGE0, 0x00+0x40*ii, tbl_pal_page0_common, sizeof(tbl_pal_page0_common));			tw2834_write_reg(TW2834_PAGE0, 0x22+0x40*ii, ii);		}		tw2834_burst_write_reg(TW2834_PAGE0, 0x38, tbl_pal_page0_sfr1, sizeof(tbl_pal_page0_sfr1));		tw2834_burst_write_reg(TW2834_PAGE0, 0x78, tbl_pal_page0_sfr2, sizeof(tbl_pal_page0_sfr2)); 		tw2834_burst_write_reg(TW2834_PAGE0, 0xb8, tbl_pal_page0_sfr3, sizeof(tbl_pal_page0_sfr3));		tw2834_burst_write_reg(TW2834_PAGE0, 0xf8, tbl_pal_page0_sfr4, sizeof(tbl_pal_page0_sfr4));	}	// TW2834 page 1 part init	tw2834_burst_write_reg(TW2834_PAGE1, 0x01, tbl_page1_x_com, sizeof(tbl_page1_x_com));	tw2834_burst_write_reg(TW2834_PAGE1, 0x10, tbl_page1_x_ch_nrml, sizeof(tbl_page1_x_ch_nrml)); 	tw2834_burst_write_reg(TW2834_PAGE1, 0x50, tbl_page1_y_com, sizeof(tbl_page1_y_com)); 	tw2834_burst_write_reg(TW2834_PAGE1, 0x60, tbl_page1_y_ch_nrml_pic_quad, sizeof(tbl_page1_y_ch_nrml_pic_quad)); 	tw2834_burst_write_reg(TW2834_PAGE1, 0x70, tbl_page1_cas_popup, sizeof(tbl_page1_cas_popup)); 	if(*mode == NTSC) { /* NTSC set */		tw2834_burst_write_reg(TW2834_PAGE1, 0x30, tbl_ntsc_page1_x_pic_quad, sizeof(tbl_ntsc_page1_x_pic_quad)); 		tw2834_burst_write_reg(TW2834_PAGE1, 0x40, tbl_ntsc_page1_dumy, sizeof(tbl_ntsc_page1_dumy)); 		tw2834_burst_write_reg(TW2834_PAGE1, 0x80, tbl_ntsc_page1_enc, sizeof(tbl_ntsc_page1_enc)); 	} else {                       /* PAL set */		tw2834_burst_write_reg(TW2834_PAGE1, 0x30, tbl_pal_page1_x_pic_quad, sizeof(tbl_pal_page1_x_pic_quad)); 		tw2834_burst_write_reg(TW2834_PAGE1, 0x40, tbl_pal_page1_dumy, sizeof(tbl_pal_page1_dumy)); 		tw2834_burst_write_reg(TW2834_PAGE1, 0x80, tbl_pal_page1_enc, sizeof(tbl_pal_page1_enc)); 	}	// Channel ID controller init 	tw2834_burst_write_reg(TW2834_PAGE1, 0xc0, tbl_page1_channel_id_ctrl, sizeof(tbl_page1_channel_id_ctrl)); 	// TW2834 page 2 part init	/* motion sens&mask register initializing */	for(ii=0;ii<4;ii++){		tw2834_burst_write_reg(TW2834_PAGE2,0x80+0x20*ii,tbl_page2_motn_sens, sizeof(tbl_page2_motn_sens));			tw2834_burst_write_reg(TW2834_PAGE2,0x86+0x20*ii,tbl_page2_motn_mask, sizeof(tbl_page2_motn_mask));		}	/* 2d box set  for color */	tw2834_burst_write_reg(TW2834_PAGE2, 0x05, tbl_page2_2dbox_color, sizeof(tbl_page2_2dbox_color));      // Page 1: sdram clock and initialize      // start initializing operation mode of SDRAM	tw2834_write_reg(TW2834_PAGE1, REG_CLK_CTL, 0x81);		// enable MIX    ( character and bitmap mode )	tw2834_write_reg(TW2834_PAGE1,0xa5,0xff);	// enable BLINK ( character and bitmap mode )	tw2834_write_reg(TW2834_PAGE1,0xa6,0xff);      // OSD color init	tw2834_burst_write_reg(TW2834_PAGE1,0xa7,tbl_page1_osd_color, sizeof(tbl_page1_osd_color));	// OSD user color init	tw2834_burst_write_reg(TW2834_PAGE1,0xae,tbl_page1_osd_user_color, sizeof(tbl_page1_osd_user_color));// pentamicro 2006.01.11	tw2834_write_string(X_PATH, 14, 9, 0x00, 0x00, "                    ");	tw2834_write_string(X_PATH, 14,10, 0x00, 0x00, "                    ");	tw2834_write_string(X_PATH, 14,11, 0x00, 0x00, "                    ");	tw2834_write_string(X_PATH, 14,12, 0x00, 0x00, "                    ");			// Font Data Upload routine	tw2834_font_upload();	// display RAM clear  ( x-path and y-path )	tw2834_osd_clear(ALL_PATH);		SelFont(ALL_PATH,OSD_PROP_ALL,OSD_PAGE0,OSD_EN_ODD|OSD_EN_EVEN);	SetFontSpace(ALL_PATH,0,0);	SetFontDelay(ALL_PATH,0,OSD_DELAY_V);		/* clear to booting logo box */	tw2834_bg_box_draw(2, FALSE, 0, 0, 0, 0, 0);	tw2834_bg_box_draw(3, FALSE, 0, 0, 0, 0, 0);		return SUCCESS;      }/* end of hw_tw2834_api.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -