📄 st9306.c
字号:
#include "tv_glob.h"
#include "st92196.h"
#include "register.h"
#include "osdconst.h"
#include "osdchar.h"
#include "osddrv.h"
#include "st9306.h"
#include "eeprom.h"
#include "i2c_bus.h"
#include "osdutil.h"
#include "utility.h"
unsigned char v_amp_60_ec;
unsigned char v_sh_60_ec;
unsigned char v_amp_50_ec ;
unsigned char v_sh_50_ec ;
unsigned char v_sc ;
unsigned char v_cc ;
unsigned char ew_wth ;
unsigned char ew_amp ;
unsigned char ew_shape ;
unsigned char ew_trap ;
void write_st9306(unsigned char subaddr,unsigned char value)
{
unsigned char repeaterr;
repeaterr = I2C_REPEAT_NUM;
while(repeaterr--)
{
if(!I2cCheck()) continue; /* the bus can use or not */
I2cSendByte(ST9306_DEVICE_ADDRESS,STARTTRUE,STOPFALSE);
I2cSendByte(subaddr,STARTFALSE,STOPFALSE);
I2cSendByte(value,STARTFALSE,STOPTRUE);
if( I2cOK() ) break; /* if the operation is done correctly ,exit loop */
}
}
void write_st9306_all(void)
{
unsigned char tmp;
write_st9306(0,v_amp_50_ec|0x01);
if(v_sh_50_ec<0x80)
tmp = (~v_sh_50_ec)&(0x78);
else
tmp = v_sh_50_ec;
write_st9306(0x20,tmp|0x01);
write_st9306(0x40,v_sc|0x01);
if(v_cc<0x80)
tmp = (~v_cc)&(0x70);
else
tmp = v_cc;
write_st9306(0x60,tmp|0x01|0x08);
tmp = (~ew_wth)&0xf8;
write_st9306(0x80,tmp|0x01);
write_st9306(0xa0,ew_amp|0x01);
write_st9306(0xc0,ew_shape|0x01);
if(ew_trap<0x80)
tmp = (~ew_trap)&0x78;
else
tmp = ew_trap;
write_st9306(0xe0,tmp|0x01);
}
void write_eeprom_st9306(void)
{
write_eeprom(EEPROM_V_AMP_60,v_amp_60_ec);
write_eeprom(EEPROM_V_SH_60,v_sh_60_ec);
write_eeprom(EEPROM_V_AMP_50,v_amp_50_ec);
write_eeprom(EEPROM_V_SH_50,v_sh_50_ec);
write_eeprom(EEPROM_V_SC,v_sc);
write_eeprom(EEPROM_V_CC,v_cc);
write_eeprom(EEPROM_EW_WTH,ew_wth);
write_eeprom(EEPROM_EW_AMP,ew_amp);
write_eeprom(EEPROM_EW_SHAPE,ew_shape);
write_eeprom(EEPROM_EW_TRAP,ew_trap);
}
void read_eeprom_st9306(void)
{
v_amp_60_ec=read_eeprom(EEPROM_V_AMP_60);
v_sh_60_ec =read_eeprom(EEPROM_V_SH_60);
v_amp_50_ec =read_eeprom(EEPROM_V_AMP_50);
v_sh_50_ec =read_eeprom(EEPROM_V_SH_50);
v_sc =read_eeprom(EEPROM_V_SC);
v_cc =read_eeprom(EEPROM_V_CC);
ew_wth =read_eeprom(EEPROM_EW_WTH);
ew_amp =read_eeprom(EEPROM_EW_AMP);
ew_shape =read_eeprom(EEPROM_EW_SHAPE);
ew_trap =read_eeprom(EEPROM_EW_TRAP);
}
void st9306_high_low(unsigned char *value,unsigned char max,unsigned char min,unsigned char step)
{
if(menu_item & MENU_DIRECTION)
{
if(*value < max)
*value +=step;
}
else
if(*value > min )
*value -=step;
}
void init_st9306(void)
{
v_amp_50_ec=0x0;
v_sh_50_ec=0x0;
v_sc=0x0;
v_cc=0x0;
ew_wth=0x0;
ew_amp=0x0;
ew_shape=0x0;
ew_trap=0x0;
}
void st9306_left_right(void)
{
switch( menu_item & ~MENU_DIRECTION)
{
case ITEM_V_AMP :
st9306_high_low(&v_amp_50_ec,V_AMP_MASK,0x0,0x4);
break;
case ITEM_V_SH :
st9306_high_low(&v_sh_50_ec,V_SH_MASK,0x0,0x8);
break;
case ITEM_V_SC :
st9306_high_low(&v_sc,V_SC_MASK,0x0,0x10);
break;
case ITEM_V_CC :
st9306_high_low(&v_cc,V_CC_MASK,0x0,0x10);
break;
case ITEM_EW_WTH :
st9306_high_low(&ew_wth,EW_WTH_MASK,0x0,0x8);
break;
case ITEM_EW_AMP :
st9306_high_low(&ew_amp,EW_AMP_MASK,0x0,0x8);
break;
case ITEM_EW_SHAPE :
st9306_high_low(&ew_shape,EW_SHAPE_MASK,0x0,0x8);
break;
case ITEM_EW_TRAP :
st9306_high_low(&ew_trap,EW_TRAP_MASK,0x0,0x8);
break;
}
write_st9306_all();
write_eeprom_st9306();
menu_item &= ~MENU_DIRECTION;
}
void show_theme_9306(void)
{
display_value(0,13,(v_amp_50_ec>>2)&0x3F);
display_value(1,13,(v_sh_50_ec>>3)& 0x1f);
display_value(2,13,(v_sc>>4)&0x0f);
display_value(3,13,(v_cc>>4)& 0x0f);
display_value(4,13,(ew_wth>>3)& 0x1f);
display_value(5,13,(ew_amp>>3)& 0x1f);
display_value(6,13,(ew_shape>>3)& 0x1f);
display_value(7,13,(ew_trap>>3) & 0x1f);
}
void show_st9306_menu(void)
{
unsigned char i;
reset_current_screen();
for(i=0;i<=ITEM_EW_TRAP;i++)
{
append_line_to_buffer(&block_service[i]);
}
for(i=0;i<=ITEM_EW_TRAP;i++)
{
fill_string_in_line(i,0x6,(unsigned char *)ST9306_STRING[i]);
}
fill_char_in_line(menu_item,5,0xD0,1);
show_theme_9306();
set_current_screen();
osd_enabled();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -