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

📄 hwctxt.cpp.bak

📁 包含了大量文件
💻 BAK
📖 第 1 页 / 共 4 页
字号:
				
				//----- 6. Retrieve the next chunk of recorded data from the non-playing buffer -----
				InputTransferred = TransferInputBuffers(m_InputDMAStatus);
			}
			
			//----- 7. Handle any interrupts on the output source -----
			//		   NOTE: The InterruptDone() call below automatically clears the interrupt.
			//			if((m_OutputDMARunning) && (dmaInterruptSource == DMA_CH_OUT))
			//			if((dmaInterruptSource == DMA_CH_OUT))
			else
			{	
				//----- Determine which buffer just completed the DMA transfer -----
				if(m_OutputDMAStatus & DMA_BIU)
				{
					m_OutputDMAStatus &= ~DMA_STRTB;						// Buffer A just completed...
					m_OutputDMAStatus |= DMA_DONEB;
					
					m_OutputDMAStatus &= ~DMA_BIU;							// Buffer B is in use
					
					delay_count = 0;
					while((v_pDMAregs->rDSTAT2&0xfffff)==0){
						if( delay_count++ > DELAY_COUNT )	break;
					} 
					
					//SELECT_AUDIO_DMA_OUTPUT_BUFFER_B();		// charlie. B => A
					v_pDMAregs->rDISRC2 = (int)(AUDIO_DMA_BUFFER_PHYS+AUDIO_DMA_PAGE_SIZE);
					
				}else
				{
					m_OutputDMAStatus &= ~DMA_STRTA;						// Buffer B just completed...
					m_OutputDMAStatus |= DMA_DONEA;
					
					m_OutputDMAStatus |= DMA_BIU;							// Buffer A is in use
					
					delay_count = 0;
					while((v_pDMAregs->rDSTAT2&0xfffff)==0){
						if( delay_count++ > DELAY_COUNT )	break;
					} 
					
					//SELECT_AUDIO_DMA_OUTPUT_BUFFER_A();		// charlie. B => A
					v_pDMAregs->rDISRC2 = (int)(AUDIO_DMA_BUFFER_PHYS);
					
				}
				//----- 9. Fill the non-playing buffer with the next chunk of audio data to play -----
				OutputTransferred = TransferOutputBuffers(m_OutputDMAStatus);			
			}
			
		}
		__except(EXCEPTION_EXECUTE_HANDLER) 
		{
			DEBUGMSG(ZONE_ERROR, (TEXT("WAVDEV2.DLL:InterruptThread() - EXCEPTION: %d"), GetExceptionCode()));
		}
		
		//----- 10. Give up the lock ----- 
		Unlock();
	}  
}
/////////////////////////////////////////////////
/*void HardwareContext::HeadsetInterruptThread()
{   
	int HP_level_pro=0,HP_level_now=0;
		  
	v_pIOPregs->rGPFCON &= ~(0x3 << 2);//input
	//v_pIOPregs->rGPFCON |= (0x2 << 2);  //int1
	v_pIOPregs->rGPFUP &=0xfd;  //pull-up
   
	while(TRUE)
	{  
		Lock();
		
		if((v_pIOPregs->rGPFDAT)&0x02)//HP
		{
			HP_level_pro=1;
			
      gHP_flag=true;
      
			//RETAILMSG(1,(TEXT("----------------HP!-----------------\r\n")));
		}else
		{	
			HP_level_pro=0;
			
			gHP_flag=false;  //no HP
			
			//RETAILMSG(1,(TEXT(" -----------------no HP!--------------------\r\n")));
		}
	  Unlock();
	  
	  Sleep(3000);   //2 second sample!!!
	  
	  Lock();
		
		if((v_pIOPregs->rGPFDAT)&0x02)//HP
		{
			HP_level_now=1;

      gHP_flag=true;
      
			//RETAILMSG(1,(TEXT("----------------HP!-----------------\r\n")));
		}else
		{	
			HP_level_now=0;
	
			gHP_flag=false;  //no HP
			
			//RETAILMSG(1,(TEXT(" -----------------no HP!--------------------\r\n")));
		}
		
		if(HP_level_now-HP_level_pro)
			  gb_changed=true;
			 //MAX_AudioMuted(IIC_OUTPUT_CHANNEl,gHP_flag);
		else
			 gb_changed=false;
			 
	  Unlock();
	  
	  //Sleep(2000);
	  //Delay(40000);
		//RETAILMSG(1,(TEXT("---------****************----------\r\n")));
	
	}
}*/

BOOL HardwareContext::AudioMute(AUDIO_CHANNLE channel, BOOL bMute)
{
	
	//MAX_AudioMuted(channel,bMute);
	
	return TRUE;
}

/*CreatThread function 
*/
void CallInterruptThread(HardwareContext *pHWContext)
{
    pHWContext->InterruptThread();
}

/*void MAX_CallHeadsetInterruptThread()
{
	SoundControlInit();
	//pHWContext->HeadsetInterruptThread();
}*/

DWORD HardwareContext::Open(void)
{
    DWORD mmErr = MMSYSERR_NOERROR;
    
    // Don't allow play when not on, if there is a power constraint upon us.
    if ( D0 != m_Dx )
    {
        // Tell the Power Manager we need to power up.
        // If there is a power constraint then fail.
        DWORD dwErr = DevicePowerNotify(_T("WAV1:"), D0, POWER_NAME);
        if ( ERROR_SUCCESS !=  dwErr ) {
            RETAILMSG(1, (TEXT("WAVEDEV::Open:DevicePowerNotify ERROR: %u\r\n"), dwErr ));
            mmErr = MMSYSERR_ERROR;
        }
    }
    
    return mmErr;
}


DWORD HardwareContext::Close(void)
{
    DWORD mmErr = MMSYSERR_NOERROR;
    //DWORD dwErr;
    
    // we are done so inform Power Manager to power us down, 030711
	//    dwErr = DevicePowerNotify(_T("WAV1:"), (_CEDEVICE_POWER_STATE)D4, POWER_NAME);
    /*if ( ERROR_SUCCESS !=  dwErr ) {
	RETAILMSG(1, (TEXT("WAVEDEV::Close:DevicePowerNofify ERROR: %u\r\n"), dwErr ));
	mmErr = MMSYSERR_ERROR;
}*/
    
    return mmErr;
}


BOOL HardwareContext::IOControl( 
								DWORD  dwOpenData,
								DWORD  dwCode,
								PBYTE  pBufIn,
								DWORD  dwLenIn,
								PBYTE  pBufOut,
								DWORD  dwLenOut,
								PDWORD pdwActualOut)
{
    DWORD dwErr = ERROR_SUCCESS;    
    BOOL  bRc = TRUE;
	
    UNREFERENCED_PARAMETER(dwOpenData);
    
    switch (dwCode) {
        //
        // Power Management
        //
	case IOCTL_POWER_CAPABILITIES: 
        {
            PPOWER_CAPABILITIES ppc;
            
            if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(POWER_CAPABILITIES)) ) 
			{
                bRc = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                break;
            }
            
            ppc = (PPOWER_CAPABILITIES)pBufOut;
            
            memset(ppc, 0, sizeof(POWER_CAPABILITIES));
			
            // support D0, D4
            ppc->DeviceDx = 0x11;
			
            // no wake
            // no inrush
			
            // Report our nominal power consumption in uAmps rather than mWatts.
            ppc->Flags = POWER_CAP_PREFIX_MICRO | POWER_CAP_UNIT_AMPS;
			
            // REVIEW: Do we enable all these for normal playback?
            // D0: SPI + I2S + CODEC (Playback) + Headphone= 
            //     0.5 mA + 0.5 mA + (23 mW, into BUGBUG ohms ) + (30 mW, into 32 ohms)
            //     500 uA + 500 uA + 23000 uA + 32000 uA
            ppc->Power[D0] = 56000;
            
            *pdwActualOut = sizeof(POWER_CAPABILITIES);
        } break;
		
	case IOCTL_POWER_SET: 
        {
            CEDEVICE_POWER_STATE NewDx;
            
            if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) 
			{
                bRc = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
                break;
            }
            
            NewDx = *(PCEDEVICE_POWER_STATE)pBufOut;
			
            if ( VALID_DX(NewDx) )
			{
                // grab the CS since the normal Xxx_PowerXxx can not.
                Lock();
                switch ( NewDx )
				{
				case D0:
					if (m_Dx != D0) 
					{
						PowerUp();
						m_Dx = D0;
					}
					break;
					
				default:
					if (m_Dx != (_CEDEVICE_POWER_STATE)D4) 
					{
						PowerDown();
						m_Dx = (_CEDEVICE_POWER_STATE)D4;
					}
					break;
                }
                
                // return our state
                *(PCEDEVICE_POWER_STATE)pBufOut = m_Dx;
				//RETAILMSG(1, (TEXT("WAVEDEV: IOCTL_POWER_SET: D%u => D%u \r\n"), NewDx, m_Dx));
				
                Unlock();
                
                *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
            } 
			else 
			{
                bRc = FALSE;
                dwErr = ERROR_INVALID_PARAMETER;
            }
            
        } break;
		
	case IOCTL_POWER_GET: 
		if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) {
			bRc = FALSE;
			dwErr = ERROR_INVALID_PARAMETER;
			break;
		}
		
		*(PCEDEVICE_POWER_STATE)pBufOut = m_Dx;
		
		RETAILMSG(1, (TEXT("WAVEDEV: IOCTL_POWER_GET: D%u \r\n"), m_Dx));
		
		*pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
		break;
		
	default:
		bRc = FALSE;
		dwErr = ERROR_INVALID_FUNCTION;
		DEBUGMSG (ZONE_FUNCTION, (TEXT(" Unsupported ioctl 0x%X\r\n"), dwCode));
		break;            
    }
    
    if ( !bRc ) 
	  {
        SetLastError(dwErr);
    }
    
    return(bRc);
}

//void CallInterruptThreadIncreaseVolume(HardwareContext *pHWContext)
/*void CallInterruptThreadReduceVolume(HardwareContext *pHWContext)
{
	while(1)
	{
		 //RETAILMSG(1,(TEXT("----------ReduceVolume--------------- WaitForSingleObject!!! \r\n")));

	   WaitForSingleObject(m_hVolumeReduEvent, INFINITE);
     
     v_pIOPregs->rGPFCON  &= ~(0x3 << 14);
     v_pIOPregs->rGPFUP&=0x00;
     //Sleep(100);
     
     if(!(v_pIOPregs->rGPFDAT&0x80 ))
     {
        CeEventHasOccurred (NOTIFICATION_EVENT_VOLUME_CHANGE,NULL);
     
        SetEvent(m_hBKLightEvent);
        //U8  data0,data1;
        //pHWContext->Lock();
        DWORD data0=MAX_RegesterRead();
        
        if(data0<5)
           data0++;
     
     	  
        
         MAX_RegesterWrite(data0);
         RETAILMSG(1,(TEXT("--------------reduce--------------------%d\r\n"),MAX_RegesterRead()));			
     
     }
     Sleep(400);
     
     v_pIOPregs->rGPFCON  &= ~(0x3<<14); // eint  3 7           	   
     v_pIOPregs->rGPFCON  |= (0x2<<14);
     v_pIOPregs->rGPFUP&=0x0;  //pull-up enable!
     
     v_pIOPregs->rEXTINT0&=~(0x7<<28);
    
     v_pIOPregs->rEXTINT0|=(0x2<<28); 
     
     InterruptDone(SYSINTR_REDVOLUME);
     
     //pHWContext->Unlock();
     //RETAILMSG(1,(TEXT("----------------------------------%d\r\n"),MAX_RegesterRead()));			

  }
}
//void CallInterruptThreadReduceVolume(HardwareContext *pHWContext)
void CallInterruptThreadIncreaseVolume(HardwareContext *pHWContext)
{
	while(1)
	{  
		 //RETAILMSG(1,(TEXT("----------IncreaseVolume--------------- WaitForSingleObject!!! \r\n")));

	   WaitForSingleObject(m_hVolumeIncrEvent, INFINITE);
     
     
     v_pIOPregs->rGPFCON  &= ~(0x3 << 6);
     v_pIOPregs->rGPFUP&=0x00;
     
     //Sleep(100);
     
     if(!(v_pIOPregs->rGPFDAT&0x08 ))
     {
        CeEventHasOccurred (NOTIFICATION_EVENT_VOLUME_CHANGE,NULL);
     
        SetEvent(m_hBKLightEvent);
        //pHWContext->Lock();
        //U8  data0,data1;
        DWORD data1=MAX_RegesterRead();
        
        if(data1<6&& data1>0 )
          data1--; 
     
  
        MAX_RegesterWrite(data1); 
        RETAILMSG(1,(TEXT("--------------Increase--------------------%d\r\n"),MAX_RegesterRead()));			
     }
     Sleep(400);
     
     v_pIOPregs->rGPFCON  &= ~(0x3<<6); // eint  3 7           	   
     v_pIOPregs->rGPFCON  |= (0x2<<6);
     v_pIOPregs->rGPFUP&=0x0;  //pull-up enable!
    
     v_pIOPregs->rEXTINT0&=~(0x7<<12);
    
     v_pIOPregs->rEXTINT0|=(0x2<<12); 
     
     InterruptDone(SYSINTR_INCVOLUME);
     //pHWContext->Unlock();
     //RETAILMSG(1,(TEXT("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")));			

  }
}

void CallBKLight()
{
	while(1)
	{  
   	 WaitForSingleObject(m_hBKLightEvent, INFINITE);
	
	   //v_pIOPregs->rGPGCON&=~(0x3<<22); //GPG11
	   //v_pIOPregs->rGPGCON|=(0x1<<22);  //output!
     //v_pIOPregs->rGPGUP&=~(0x1<<22);   //pull-up enable!
     v_pIOPregs->rGPGDAT&=~(0x1<<11);   //output 0
     Sleep(8000);
     v_pIOPregs->rGPGDAT|=(0x1<<11);   //disable keybutyton light!
     RETAILMSG(1,(TEXT("------------BKLight----------------\r\n")));			

     ResetEvent(m_hBKLightEvent);   //nosignal  stat!
  }
  
  
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -