📄 hw_at2041_api.c
字号:
* 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 + -