📄 mmedev.c
字号:
#include <assert.h>
#include "iq.h"
#include "mem.h"
#include "inth.h"
#include "armio.h"
#include "spi_drv.h"
//#include "spi_drv_188.h"
#include "abb.h"
#include "general.h"
#include "mmedev.h"
#include "Rvf_target.h"
#include "lls_api.h"
#include "board.cfg"
static BOOL ledAIsOn = 0;
static BOOL backlightIsOn = 0;
#define _M188_
#if( MODEL == 1 )
unsigned short gl_mainboardtype=MAINBOARD_288;
#elif( MODEL == 3 )
unsigned short gl_mainboardtype=MAINBOARD_288B;
#elif( MODEL == 4 )
unsigned short gl_mainboardtype=MAINBOARD_288C;
#elif( MODEL == 5 )
unsigned short gl_mainboardtype=MAINBOARD_288S;
#endif
extern void MI_dbgPrintf(const char* const format, ...);
//#include "madebug.h"
extern void LCDBackLightControl(int level);
extern UINT8 g_pcsyncstatus;
unsigned g_HandsetPcsycMode = 0;
unsigned g_HeadsetMode=0;
unsigned g_PCSyncMode=0;
UINT8 offsetflag= 0 ; //0:lcd 1:backlight 2 :calling 3 :charging offset flag
static unsigned short status_fortest=0;
extern UINT32 driverFlag;
unsigned short IsHandsetPlugin(void){
if (g_HandsetPcsycMode == 2)
return 1;
else
return 0;
}
int IsPcsyncLinePlugin(void){
unsigned char i = 0;
i = (*((volatile unsigned short *)MEM_ARMIO)) & 0x2000;
if (i)
return 0;
else
return 1;
}
unsigned short IsHeadsetPlugin(void){
unsigned short i = 0;
i = (*((volatile unsigned short *)(0xFFFE4800) ) & 0x08);
#if( MODEL == 3 || MODEL ==4 || MODEL == 5 ) //M288B, M288C, M288S
if( i !=0 )
return 0;
else
return 1;
#elif( MODEL == 1 ) // M288
if( i !=0 )
return 1;
else
return 0;
#endif
}
unsigned short IsHeadsetKey(void){
unsigned short i = 0;
unsigned short stat;
#if( MODEL == 3 || MODEL ==4 || MODEL == 5 ) //M288, M288C, M288S
stat = ( *( (volatile unsigned short *)MEM_ARMIO ) & 0x08);
MI_dbgPrintf("IsHeadsetKey ---------1-- stat = 0x%x", stat);
if ((*( (volatile unsigned short *)MEM_ARMIO ) & 0x0008)==0) //headset is plugin
{
stat = (*((volatile unsigned short *)MEM_ARMIO ) & 0x2000);
MI_dbgPrintf("IsHeadsetKey ---------2-- stat = 0x%x", stat);
while (((*((volatile unsigned short *)MEM_ARMIO ) & 0x2000)==0x0000)&&(i < 256))
#elif( MODEL == 1 ) //M288
if ((*( (volatile unsigned short *)MEM_ARMIO ) & 0x0008)==1)
{
while (((*((volatile unsigned short *)MEM_ARMIO ) & 0x2000)==0x2000)&&(i < 256))
#endif
{
//stat = (* (volatile unsigned short *)MEM_ARMIO ) & 0x2000;
i ++;
}
if (i < 256)
return 0;
else
return 1;
} else
return 0;
}
unsigned short IsHandsetKey(void){
unsigned short i = 0;
unsigned short stat;
#if( MODEL == 3 || MODEL ==4 || MODEL == 5 ) //M288, M288C, M288S
stat = ( *( (volatile unsigned short *)MEM_ARMIO ) & 0x08);
MI_dbgPrintf("IsHeadsetKey ---------1-- stat = 0x%x", stat);
if ((*( (volatile unsigned short *)MEM_ARMIO ) & 0x0008)==0) //headset is plugin
{
stat = (*((volatile unsigned short *)MEM_ARMIO ) & 0x2000);
MI_dbgPrintf("IsHeadsetKey ---------2-- stat = 0x%x", stat);
while (((*((volatile unsigned short *)MEM_ARMIO ) & 0x2000)==0x0000)&&(i < 256))
#elif( MODEL == 1 ) //M288
if ((*( (volatile unsigned short *)MEM_ARMIO ) & 0x0008)==1)
{
while (((*((volatile unsigned short *)MEM_ARMIO ) & 0x2000)==0x2000)&&(i < 256))
#endif
{
//stat = (* (volatile unsigned short *)MEM_ARMIO ) & 0x2000;
i ++;
}
if (i < 256)
return 0;
else
return 1;
} else
return 0;
}
void QueryPcsyncHandsetStatus(void){
return;
}
void LED_ON(void)
{
volatile int status;
#if 0
/* Start spi clock */
Spi->SPI_SET_UN.SPI_SET_ST.SPI_REG_SET1 |= SpiClkOn;
//PAGE1
SPI_WriteTX_MSB(0x01<<6|PAGEREG);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
SPI_WriteTX_MSB(0x08<<6|0x05<<1);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
SPI_WriteTX_MSB(0x02<<6|PAGEREG);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
SPI_WriteTX_MSB(0x01<<6|0x18<<1);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
#endif
}
void LED_OFF(void)
{
volatile int status;
#if 0
/* Start spi clock */
Spi->SPI_SET_UN.SPI_SET_ST.SPI_REG_SET1 |= SpiClkOn;
SPI_WriteTX_MSB(0x02<<6|PAGEREG);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
SPI_WriteTX_MSB(0x00<<6|0x18<<1);
SPI_StartWrite();
while(((status = Spi->SPI_CTRL_STAT_UN.SPI_CTRL_STAT_ST.SPI_REG_STATUS) & WE_ST) == 0);
#endif
}
// brightness adjust
void LedLightnessAdjust(int value){
#if 0
int i;
voltageoffsetvalue[0] = (voltageoffsetvalue[0]/16)*value;
SPIWrite_ABB_Register(PAGE0,TOGBR1,0x20);
for(i = 0;i <1000; i++){;}
SPIWrite_ABB_Register (PAGE0, TOGBR2, 0x0008);
if (value==0)//zy 08/16/02
value=1023;
else
value=1024-value*64; //end of zy 08/16/02
SPIWrite_ABB_Register (PAGE0, AUXDAC, value);//0 to 0x03ff
#endif
#if 0
int i;
voltageoffsetvalue[0] = (voltageoffsetvalue[0]/16)*value;
spi_abb_write(PAGE0,TOGBR1,0x20);
for(i = 0;i <1000; i++){;}
spi_abb_write (PAGE0, TOGBR2, 0x0008);
if (value==0)//zy 08/16/02
value=1023;
else
value=1024-value*64; //end of zy 08/16/02
spi_abb_write(PAGE0, AUXDAC, value);//0 to 0x03ff
return;
#endif
#if( MODEL == 4) // M288C, OLD doesn't need backlight
if( HallStatus() ){
LCDBackLightControl(value );
}
else
{
if( value == 0)
sub_lcd_pwrCtrl(0);
}
#else
LCDBackLightControl(value );
#endif
return;
}
void CBBacklight_ON(UINT16* value){
UINT16 status ;
status =(*value)|0x02;
// spi_abb_write(PAGE1,ACDLED,status);
spi_abb_write(PAGE1,AUXLED, status);
return;
}
// Keypad backlight
void Backlight_ON(void)
{
UINT16 status;
offsetflag |= 0x2;
MI_dbgPrintf("glowing: mmedev -- Backlight_ON -enter");
#if 0
//glowing,2004-05-17, use the new SPI module
//spi_abb_read(PAGE1,ACDLED,CBBacklight_ON);
spi_abb_read(PAGE1, AUXLED, CBBacklight_ON);
#else
if(backlightIsOn== 0 ){
lls_switch_on( LLS_BACKLIGHT );
}
backlightIsOn = 1;
#endif
MI_dbgPrintf("glowing: mmedev -- Backlight_ON -leave");
return ;
}
void CBBacklight_OFF(UINT16 * value){
UINT16 status ;
status =(*value)&0x0fffd;
//glowing,2004-05-17,use the new SPI module
//spi_abb_write(PAGE1,ACDLED,status);
spi_abb_write(PAGE1,AUXLED,status);
return;
}
void Backlight_OFF(void)
{
UINT16 status;
offsetflag &= 0xfd;
MI_dbgPrintf("glowing: mmedev -- Backlight_OFF -enter");
#if 0
//glowing,2004-05-17, use the new SPI module
//spi_abb_read(PAGE1,ACDLED,CBBacklight_OFF);
spi_abb_read(PAGE1,AUXLED,CBBacklight_OFF);
#else
if( backlightIsOn == 1){
backlightIsOn= 0;
lls_switch_off(LLS_BACKLIGHT);
}
#endif
MI_dbgPrintf("glowing: mmedev -- Backlight_OFF -leave");
}
void LCD_ON(void)
{
offsetflag |= 0x1;
*((volatile UINT16*) ARMIO_OUT) |= 0X0100;//UWORD16
}
void LCD_OFF(void)
{
offsetflag &= 0xfe;
*((volatile UINT16 *) ARMIO_OUT) &= 0XFEFF;//UWORD16
}
void LEDC_OFF(void)
{////use message api
#if 0
MmiTrace("LEDC_OFF");
SPIWrite_ABB_Register(PAGE0,BCICTL2,0); //disable charger
MmiTraceInt( SPIRead_ABB_Register(PAGE1,BCICTL2)& 0xfdf);
SPIWrite_ABB_Register (PAGE0, BCICTL2, SPIRead_ABB_Register(PAGE0,BCICTL2)& 0xfdf);
*((volatile UINT16 *)0xfffe4804)&=0xdfff;//set GPIO13 0
*((volatile UINT16 *)0xfffe4802)&=0xdfff;
#endif
}
void LEDC_ON(void)
{
#if 0
MmiTrace("LEDC_ON");
if(ChargerPlugIn()){
MmiTrace("ChargerPlugIn");
SPIWrite_ABB_Register(PAGE0,BCICTL2,0); //disable charger
MmiTraceInt(SPIRead_ABB_Register(PAGE0,BCICTL2)| 0x020);
SPIWrite_ABB_Register (PAGE0, BCICTL2, SPIRead_ABB_Register(PAGE0,BCICTL2)| 0x020);
}
else{
MmiTrace("ChargerPlugOut");
*((volatile UINT16 *)0xfffe4804)&=0xdfff;
*((volatile UINT16 *)0xfffe4802)|=0x2000;
}
#endif
}
void Green_On()
{
*((volatile UINT16 *)ARMIO_OUT)|=0x0001;
driverFlag|=0x0040;
}
void Green_Off()
{
*((volatile UINT16 *)ARMIO_OUT)&= 0xfffe;
driverFlag&=0xffffffcf;
}
/*
* glowing,2004-05-21, the following function is special for 7 colors LED
* Blue_On, Blue_Off, Red_On, Red_Off, Green2_Off, Green2_On
*/
void Blue_On()
{
AI_ConfigBitAsOutput(1); // LCD_A0
AI_SETBIT(1);
driverFlag|=0x0040;
}
void Blue_Off()
{
//*((volatile UINT16 *)ARMIO_OUT)&=0xfffd;
AI_RESETBIT(1);
AI_ConfigBitAsInput(1); // LCD_A0
driverFlag|=0x0040;
}
void Green2_On()
{
AI_ConfigBitAsOutput(0); // LCD_A0
AI_SETBIT(0);
//*((volatile UINT16 *)ARMIO_OUT)|=0x0001;
driverFlag|=0x0040;
}
void Green2_Off()
{
//*((volatile UINT16 *)ARMIO_OUT)&= 0xfffe;
AI_RESETBIT(1);
driverFlag&=0xffffffcf;
AI_ConfigBitAsInput(0); // LCD_A0
}
void red_on_cb(UINT16* value)
{
UINT16 status ;
status =(*value)|0x01;
spi_abb_write(PAGE1,AUXLED,status);
}
void red_off_cb(UINT16* value)
{
UINT16 status ;
status =(*value)&0x0fffe;
spi_abb_write(PAGE1,AUXLED,status);
return;
}
void Red_On()
{
#if 0
spi_abb_read(PAGE1,AUXLED,red_on_cb);
#else
if( ledAIsOn== 0 ){
lls_switch_on( LLS_LED_A );
}
ledAIsOn = 1;
#endif
}
void Red_Off()
{
#if 0
spi_abb_read(PAGE1,AUXLED,red_off_cb);
#else
if( ledAIsOn == 1 ){
ledAIsOn = 0;
lls_switch_off( LLS_LED_A );
}
#endif
}
void CBOpenMic(UINT16* value){
UINT16 status;
status=(*value)&0xFFFC;
status=status|0x0002;
//glowing,2004-05-17, use the new SPI module
//spi_abb_write(1,0x0008,status);
spi_abb_write( PAGE0, TOGBR1, status );
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -