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

📄 mmedev.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -