📄 smart.c
字号:
/*******************************************************************************
SMART.C
Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
extern void IIC_Start(void);
extern void IIC_Stop(void);
extern bit IIC_Data_In(unsigned char bytedata);
extern unsigned char IIC_Data_Out(void);
extern void Send_Acknowledge(bit ack);
idata unsigned char
IDATA_START _at_ 0x08;
pdata unsigned char
PDATA_START _at_ 0x80;
xdata unsigned char
XDATA_START _at_ 0x800;
/*==============================================================================
==============================================================================*/
unsigned int Chip_Byte_Read(unsigned char device, unsigned char address) {
unsigned int error, bytedata;
error=0;
IIC_Start();
if(IIC_Data_In(device))
error=1;
if(IIC_Data_In(address))
error=1;
IIC_Start();
if(IIC_Data_In(device|1))
error=1;
bytedata=IIC_Data_Out();
Send_Acknowledge(1);
IIC_Stop();
if(error==1)
return 256;
else
return bytedata;
}
/*==============================================================================
==============================================================================*/
unsigned int Chip_Byte_Write(unsigned char device, unsigned char address, unsigned char bytedata) {
unsigned int error;
error=0;
IIC_Start();
if(IIC_Data_In(device))
error=1;
if(IIC_Data_In(address))
error=1;
if(IIC_Data_In(bytedata))
error=1;
IIC_Stop();
return error;
}
/*==============================================================================
==============================================================================*/
void Print_Hex(unsigned char row, unsigned char col,
unsigned char value, unsigned char color) {
if((value/16)>9)
Print_Icon(row, col, ((value/16)-10)+'A', color);
else
Print_Icon(row, col, (value/16)+'0', color);
if((value%16)>9)
Print_Icon(row, col+1, ((value%16)-10)+'A', color);
else
Print_Icon(row, col+1, (value%16)+'0', color);
}
/*==============================================================================
==============================================================================*/
void Print_Int(unsigned char row, unsigned char column,
unsigned int value, unsigned char attribute) {
Print_Icon(row, column++, (value/10000)+'0', attribute);
value%=10000;
Print_Icon(row, column++, (value/1000)+'0', attribute);
value%=1000;
Print_Icon(row, column++, (value/100)+'0', attribute);
value%=100;
Print_Icon(row, column++, (value/10)+'0', attribute);
value%=10;
Print_Icon(row, column, value+'0', attribute);
}
/*==============================================================================
==============================================================================*/
void Smart(void) {
switch(SmartASIC) {
case(0):
if(bkey_code_now==KEY_CH_PLUS)
SmartASIC=1;
else
SmartASIC=0;
break;
case(1):
if(bkey_code_now==KEY_CH_PLUS)
SmartASIC=2;
else
SmartASIC=0;
break;
case(2):
if(bkey_code_now==KEY_CH_MINUS)
SmartASIC=3;
else
SmartASIC=0;
break;
case(3):
if(bkey_code_now==KEY_CH_MINUS)
SmartASIC=4;
else
SmartASIC=0;
break;
case(4):
if(bkey_code_now==KEY_VOL_PLUS)
SmartASIC=5;
else
SmartASIC=0;
break;
case(5):
if(bkey_code_now==KEY_VOL_MINUS)
SmartASIC=6;
else
SmartASIC=0;
break;
case(6):
if(bkey_code_now==KEY_VOL_PLUS)
SmartASIC=7;
else
SmartASIC=0;
break;
case(7):
if(bkey_code_now==KEY_VOL_MINUS)
SmartASIC=8;
else
SmartASIC=0;
break;
}
if(SmartASIC==8) {
OSD_Show(0,0,0,0,0);
bsmart=1;
SmartASIC=0;
Smart_Win();
OSD_Show(1,0,0,0,0);
}
}
/*==============================================================================
==============================================================================*/
void Smart_Win(void) {
code unsigned char S_AV1[]="AV1 [AV]",
S_AV2[]="AV2 [S1]",
S_AV3[]="AV3 [S2]",
S_TV[]="TV ";
code unsigned char *SOURCE_HEADER[]={S_AV1,S_AV2,S_AV3,S_TV};
Page=Item=0;
Device=Address=Data=0;
OSD_Position(20, 20);
Clear_Screen();
Window_Control(3, 0, 7, 0, 20, BLUE);
Print_String(1, 1, "Device", WHITE);
Print_String(2, 1, "Address", WHITE);
Print_String(3, 1, "Data", WHITE);
Print_String(4, 1, "Read", WHITE);
Print_String(5, 1, "Write", WHITE);
Print_String(6, 1, "Exit", WHITE);
Print_Hex(1, 12, Device, WHITE);
Print_Char(1, 17, Device, WHITE);
Print_Hex(2, 10, Address/0x100, WHITE);
Print_Hex(2, 12, Address%0x100, WHITE);
Print_Char(2, 17, Address, WHITE);
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
Window_Control(2, Item+1, Item+1, 1, 19, CYAN);
Print_String(8, 0, *(SOURCE_HEADER+Source), GREEN);
}
/*==============================================================================
==============================================================================*/
void Smart_OSD(void) {
idata unsigned char *idataptr;
pdata unsigned char *pdataptr;
xdata unsigned char *xdataptr;
unsigned char ret;
switch(bkey_code_now) {
//&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
case(KEY_CH_PLUS)://bsw1(MENU)
Item=(Item+5)%6;
Window_Control(2, Item+1, Item+1, 1, 19, CYAN);
break;
//&&&&&&&&&&&&&&&&&&&&&&&&&&& SELECT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
case(KEY_CH_MINUS)://bsw2(SELECT)
Item=(Item+1)%6;
Window_Control(2, Item+1, Item+1, 1, 19, CYAN);
break;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&& LEFT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
case(KEY_VOL_MINUS)://bsw3(LEFT)
switch(Item) {
case(0):
Device=(Device+0xff)%0x100;
Print_Hex(1, 12, Device, WHITE);
Print_Char(1, 17, Device, WHITE);
Address=Data=0;
if(Device==1)//PDATA
Address=0x80;
if(Device==2)//XDATA
Address=0x800;
Print_Hex(2, 10, Address/0x100, WHITE);
Print_Hex(2, 12, Address%0x100, WHITE);
Print_Int(2, 15, Address, WHITE);
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
break;
case(1):
switch(Device) {
case(0)://IDATA
Address=(Address+0xff)%0x100;
if(Address==0x07)
Address=0xff;
break;
case(1)://PDATA
Address=(Address+0xff)%0x100;
if(Address==0x7f)
Address=0xff;
break;
case(2)://XDATA
Address=(Address+0xfff)%0x1000;
if(Address==0x800)
Address=0xfff;
break;
default://Other Device
Address=(Address+0xff)%0x100;
break;
}
Print_Hex(2, 10, Address/0x100, WHITE);
Print_Hex(2, 12, Address%0x100, WHITE);
Print_Int(2, 15, Address, WHITE);
break;
case(2):
Data=(Data+255)%256;
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
break;
case(3):
switch(Device) {
case(0)://IDATA
idataptr=&IDATA_START+(Address-0x00);
Data=*idataptr;
break;
case(1)://PDATA
pdataptr=&PDATA_START+(Address-0x80);
Data=*pdataptr;
break;
case(2)://XDATA
xdataptr=&XDATA_START+(Address-0x800);
Data=*xdataptr;
break;
default://Other Device
Data=Chip_Byte_Read(Device, Address);
break;
}
if(Data!=256) {
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
Print_String(4, 10, "OK ", RED|BLINK);
DelayX10ms(100);
Print_String(4, 10, " ", RED|BLINK);
}
else {
Print_String(4, 10, "Error", RED|BLINK);
DelayX10ms(100);
Print_String(4, 10, " ", RED|BLINK);
}
break;
case(4):
switch(Device) {
case(0)://IDATA
idataptr=&IDATA_START+(Address-0x00);
*idataptr=Data;
ret=0;
break;
case(1)://PDATA
pdataptr=&PDATA_START+(Address-0x80);
*pdataptr=Data;
ret=0;
break;
case(2)://XDATA
xdataptr=&XDATA_START+(Address-0x800);
*xdataptr=Data;
ret=0;
break;
default://Other Device
ret=Chip_Byte_Write(Device, Address, Data);
break;
}
if(ret==1) {
Print_String(5, 10, "Error", RED|BLINK);
DelayX10ms(100);
Print_String(5, 10, " ", RED|BLINK);
}
else {
Print_String(5, 10, "OK ", RED|BLINK);
DelayX10ms(100);
Print_String(5, 10, " ", RED|BLINK);
}
break;
case(5):
bsmart=Page=Item=0;
OSD_Show(0,0,0,0,0);
break;
}
break;
//&&&&&&&&&&&&&&&&&&&&&&&&&&& RIGHT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
case(KEY_VOL_PLUS)://bsw4(RIGHT)
switch(Item) {
case(0):
Device=(Device+0x01)%0x100;
Print_Hex(1, 12, Device, WHITE);
Print_Char(1, 17, Device, WHITE);
Address=Data=0;
if(Device==1)//PDATA
Address=0x80;
if(Device==2)//XDATA
Address=0x800;
Print_Hex(2, 10, Address/0x100, WHITE);
Print_Hex(2, 12, Address%0x100, WHITE);
Print_Int(2, 15, Address, WHITE);
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
break;
case(1):
switch(Device) {
case(0)://IDATA
Address=(Address+0x01)%0x100;
if(Address==0x00)
Address=0x08;
break;
case(1)://PDATA
Address=(Address+0x01)%0x100;
if(Address==0x00)
Address=0x80;
break;
case(2)://XDATA
Address=(Address+0x01)%0x1000;
if(Address==0x00)
Address=0x800;
break;
default://Other Device
Address=(Address+0x01)%0x100;
break;
}
Print_Hex(2, 10, Address/0x100, WHITE);
Print_Hex(2, 12, Address%0x100, WHITE);
Print_Int(2, 15, Address, WHITE);
break;
case(2):
Data=(Data+1)%256;
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
break;
case(3):
switch(Device) {
case(0)://IDATA
idataptr=&IDATA_START+(Address-0x00);
Data=*idataptr;
break;
case(1)://PDATA
pdataptr=&PDATA_START+(Address-0x80);
Data=*pdataptr;
break;
case(2)://XDATA
xdataptr=&XDATA_START+(Address-0x800);
Data=*xdataptr;
break;
default://Other Device
Data=Chip_Byte_Read(Device, Address);
break;
}
if(Data!=256) {
Print_Hex(3, 12, Data, WHITE);
Print_Char(3, 17, Data, WHITE);
Print_String(4, 10, "OK ", RED|BLINK);
DelayX10ms(100);
Print_String(4, 10, " ", RED|BLINK);
}
else {
Print_String(4, 10, "Error", RED|BLINK);
DelayX10ms(100);
Print_String(4, 10, " ", RED|BLINK);
}
break;
case(4):
switch(Device) {
case(0)://IDATA
idataptr=&IDATA_START+(Address-0x00);
*idataptr=Data;
ret=0;
break;
case(1)://PDATA
pdataptr=&PDATA_START+(Address-0x80);
*pdataptr=Data;
ret=0;
break;
case(2)://XDATA
xdataptr=&XDATA_START+(Address-0x800);
*xdataptr=Data;
ret=0;
break;
default://Other Device
ret=Chip_Byte_Write(Device, Address, Data);
break;
}
if(ret==1) {
Print_String(5, 10, "Error", RED|BLINK);
DelayX10ms(100);
Print_String(5, 10, " ", RED|BLINK);
}
else {
Print_String(5, 10, "OK ", RED|BLINK);
DelayX10ms(100);
Print_String(5, 10, " ", RED|BLINK);
}
break;
case(5):
bsmart=Page=Item=0;
OSD_Show(0,0,0,0,0);
break;
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -