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

📄 hw_at2041_api.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 C
📖 第 1 页 / 共 5 页
字号:
	 * bits : bit width of output data	 *        '0' 8-bit, '1' 16-bit, '4' 32-bit	 *        default is '4'	 * delay_mode : delay mode, '0' no delay, '1' 1 bit delay, default is 0	 */        rx_id = RxID(GID_DA, 0x00, PID_DA_FMT, W_FLAG);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        ioctl(fd_at2041, WRITE_Rx_FIFO, &format);        ioctl(fd_at2041, WRITE_Rx_FIFO, &bits);        ioctl(fd_at2041, WRITE_Rx_FIFO, &delay_mode);        ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void dec_audio_clock_inversion(UNS16 type){	/* type : '0' use input clock, '1' use inverted clock, default is '0'	 *        This parameter is the same one that is in the audio encoder	 */        rx_id = RxID(GID_DA, 0x00, PID_DA_CLK_INV, W_FLAG);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        ioctl(fd_at2041, WRITE_Rx_FIFO, &type);        ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void dec_audio_interface_mode(UNS16 mode){	/* mode : '0' master mode, '1' slave mode, default is '0'	 *        This parameter is the same one that is in the audio encoder 	 */        rx_id = RxID(GID_DA, 0x00, PID_DA_IF_MODE, W_FLAG);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        ioctl(fd_at2041, WRITE_Rx_FIFO, &mode);        ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void dec_audio_frame_sync_width(UNS16 width){	/* width : '0' ~ '1024', default is '256'	 *         This parameter is the same one that is in the audio encoder 	 */        rx_id = RxID(GID_DA, 0x00, PID_DA_FSYNC_WIDTH, W_FLAG);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        ioctl(fd_at2041, WRITE_Rx_FIFO, &width);        ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void audio_decode_channel_id(UNS16 ID){	/* ID    : Channel ID, default is 0	 *         This value is valid only if decodng standard is 0 or 1	 */        rx_id = RxID(GID_DA, 0x00, PID_DA_CID, W_FLAG);        write_parm(rx_id, ID);}/* insert OSD parameters */void osd_on_off(UNS16 ch_id, UNS16 mode){	/* ch_id : channel ID	 * mode : '0' off, '1' on, default is '0'	 */        rx_id = RxID(GID_OSD, ch_id, PID_OSD_ON, W_FLAG);        write_parm(rx_id, mode);}// FOR TEXT FONT#if 1// set osd font palette// GID : 3, CID : 0, PID : 0x02 + palette_indexvoid set_osd_font_palette(UNS16 palette_index, UNS16 y, UNS16 cb, UNS16 cr, UNS16 transparency, UNS16 blink){	// y : 0 - 255	// cb : 0 - 255	// cr : 0 - 255	// transparency : 0(0%), 1(25%), 2(50%), 3(75%), 4(100%)	// blink : 0(off), 1(1 Hz), 2(0.5 Hz)		rx_id= RxID(GID_OSD, 0x00, (PID_OSD_PALETTE + palette_index), W_FLAG);	// y	rx_data= y & 0x00ff;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// cb	rx_data= cb & 0x00ff;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// cr	rx_data= cr & 0x00ff;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// transparency	rx_data= transparency & 0x000f;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// blink	rx_data= blink & 0x0003;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);    ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}#if 0// display font// GID : 3, CID : 0, PID : 0x12void display_font(UNS16 vert_offset, UNS16 horz_offset, UNS16 bg_palette_index, UNS16 fg_palette_index,	UNS16 string_size, UNS8 * string_data){	// vert_offset : 0 - 35 line	// horz_offset : 0 - 44 column	// bg_palette_index : 0 - 15	// fg_palette_index : 0 - 15	// string_size : 1 - 45	// string_data	UNS16 local_count;	rx_id= RxID(GID_OSD, 0x00, PID_OSD_DISPLAY_FONT, W_FLAG);	// vert_offset	rx_data= vert_offset & 0x00ff;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		// horz_offset		rx_data= horz_offset & 0x00ff;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// bg_palett_index, fg_palette_index	rx_data= (((bg_palette_index & 0x000f) << 4) | (fg_palette_index & 0x000f));    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	// string_size	rx_data= string_size & 0x00ff;    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	for(local_count=0; local_count < string_size; local_count++)	{		rx_data= string_data[local_count] & 0x00ff;    	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	}	ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}// fill screen font// GID : 3, CID : 0, PID : 0x13void fill_screen_font(UNS16 palette_index){	rx_id= RxID(GID_OSD, 0x00, PID_OSD_FILL_SCREEN_FONT, W_FLAG);	rx_data= palette_index & 0x000f;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);    ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}// fill line font// GID : 3, CID : 0, PID : 0x14void fill_line_font(UNS16 line_number, UNS16 palette_index){	// line_number : 0 - 35	// palette_index	rx_id= RxID(GID_OSD, 0x00, PID_OSD_FILL_LINE_FONT, W_FLAG);	rx_data= line_number & 0x00ff;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);    ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = palette_index & 0x000f;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}#endif#endif// FOR TEXT FONT// GRAPHIC OSD#if 1void set_palette(UNS8 *palette_data){	/* write OSD color palette(16 palette w/ transparency and blink) to AT204x	 * palette_data : 16 palette data	 */	S32 ii;	for (ii = 0; ii < 16; ii++) {		rx_id = RxID(GID_OSD, 0x00, PID_OSD_PALETTE + ii, W_FLAG);        	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        	rx_data = palette_data[(5 * ii) + 0];       		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);       		        	rx_data = palette_data[(5 * ii) + 1];       		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);        	rx_data = palette_data[(5 * ii) + 2];       		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);        	rx_data = palette_data[(5 * ii) + 3];       		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);        	rx_data = palette_data[(5 * ii) + 4];       		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	}	ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void at2041_load_font(UNS8 *font_data, UNS32 font_data_size){	/* write font_data to AT204x	 * font is binary image data	 * each line data should be aligned in byte-unit	 * the MSB of the first byte is aligned to the left-top pixel	 *	 * font_data[0] : font_set_id[3:0]	 * font_data[1] : ASCII code[14:0]	 * font_data[2] : H_size[9:0], max = 720, pixels	 * font_data[3] : V_size[9:0], max = 576, lines	 * font_data[4] ~ font_data[4+N-1] : real font_data[7:0]	 */	UNS16 h_size = (font_data[3] << 8) | font_data[4];	UNS16 v_size = (font_data[5] << 8) | font_data[6];	UNS32 font_size = ((h_size + 3) >> 2) * v_size;	S32 ii, jj;	rx_id = RxID(GID_OSD, 0x00, PID_OSD_LOAD_FONT, W_FLAG);	for (jj = 0; jj < font_data_size; jj += (font_size + 7)) {			ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);		/* font_set_id */		rx_data = font_data[0 + jj];				ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		/* ASCII code */		rx_data = (font_data[1 + jj] << 8) | font_data[2 + jj];		ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		/* H_size[9:0] */		ioctl(fd_at2041, WRITE_Rx_FIFO, &h_size);		/* V_size[9:0] */		ioctl(fd_at2041, WRITE_Rx_FIFO, &v_size);		/* font data */		for (ii = 0; ii < font_size; ii++) {			rx_data = font_data[(ii + 7) + jj];   	 	 	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		}			}	ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);} void set_font(UNS8 font_set_id, UNS8 fg_palette, UNS8 bg_palette, UNS8 border_palette){	/* set font(ASCII code) which has characteristic of fg_palette and bg_palette	 * font_set_id : 8 bits, {4'd0, font_set_id[3:0]},         *		 '0' : default font set, '1' ~ '2' : additional font set	 * fg_palette : foreground palette of ASCII characters	 * bg_palette : background palette of ASCII characters	 */	rx_id = RxID(GID_OSD, 0x00, PID_OSD_SET_FONT, W_FLAG);	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);	rx_data = font_set_id;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = fg_palette;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = bg_palette;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = border_palette;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void display_string(UNS16 x, UNS16 y, UNS8 *str, UNS8 attribute){	/* display string	 * x : x coordinate to display string, max = 720	 * y : y coordinate to display string, max = 576	 * str : string array	 * attribute : attribute of string, '0' : copy, '1' : or, '2' : xor	 */	S32 ii;	UNS16 string;	rx_id = RxID(GID_OSD, 0x00, PID_OSD_DISP_STR, W_FLAG);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);        ioctl(fd_at2041, WRITE_Rx_FIFO, &x);        ioctl(fd_at2041, WRITE_Rx_FIFO, &y);	rx_data = attribute;        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = strlen(str);        ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	for (ii = 0; ii < rx_data; ii++) {		string = str[ii];        	ioctl(fd_at2041, WRITE_Rx_FIFO, &string);	}		ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void load_image(UNS8 *image_data){	/* upload image data to AT204x	 * each line data should be aligned in byte-unit	 * 16 palette image data	 * the most significant 4 bits of the first byte is aligned to the left-top pixel	 *	 * image_data[0] : image_code[7:0]	 * image_data[1] : H_size[9:0], max = 720, pixels	 * image_data[2] : V_size[9:0], max = 576, lines	 * image_data[3] ~ font_data[3+N-1] : real image_data[7:0]	 */	UNS16 h_size = (image_data[1] << 8) | image_data[2];	UNS16 v_size = (image_data[3] << 8) | image_data[4];	UNS32 image_size = ((h_size + 1) >> 1) * v_size;	S32 ii;	rx_id = RxID(GID_OSD, 0x00, PID_OSD_LOAD_IMG, W_FLAG);	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);	/* image code */	rx_data = image_data[0];	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	/* H_size[9:0] */	ioctl(fd_at2041, WRITE_Rx_FIFO, &h_size);	/* V_size[9:0] */	ioctl(fd_at2041, WRITE_Rx_FIFO, &v_size);	/* image data */	for (ii = 0; ii < image_size; ii++) {		rx_data = image_data[ii + 5];        	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	}		ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void display_image(UNS16 x, UNS16 y, UNS8 image_code, UNS8 attribute){	/* display image to monitor at (x, y) position	 * x : x coordinate	 * y : y coordinate	 * image_code : image code, max = 255	 * attribute : attribute of image, '0' : copy, '1' : or, '2' : xor	 */	rx_id = RxID(GID_OSD, 0x00, PID_OSD_DISP_IMG, W_FLAG);	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);	ioctl(fd_at2041, WRITE_Rx_FIFO, &x);	ioctl(fd_at2041, WRITE_Rx_FIFO, &y);	rx_data = attribute;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);	rx_data = image_code;	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_data);		ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void save_image(UNS16 x, UNS16 y, UNS16 h_size, UNS16 v_size, UNS16 reserved){	/* save image 	 * x : x coordinate of left-top	 * y : y coordinate of left-top	 * h_size : horizontal size	 * v_size : vertical size	 * reserved : reserved for future use	 */	rx_id = RxID(GID_OSD, 0x00, PID_OSD_SAVE_IMG, W_FLAG);	ioctl(fd_at2041, WRITE_Rx_FIFO, &rx_id);	ioctl(fd_at2041, WRITE_Rx_FIFO, &x);	ioctl(fd_at2041, WRITE_Rx_FIFO, &y);	ioctl(fd_at2041, WRITE_Rx_FIFO, &h_size);	ioctl(fd_at2041, WRITE_Rx_FIFO, &v_size);	ioctl(fd_at2041, WRITE_Rx_FIFO, &reserved);		ioctl(fd_at2041, END_OF_WRITE_Rx_FIFO);}void restore_image(UNS16 reserved){	/* restore image which is

⌨️ 快捷键说明

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