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

📄 headset_button_handler.c

📁 实现蓝牙立体声耳机功能。。可以接收并播放来自有蓝牙功能的手机
💻 C
📖 第 1 页 / 共 2 页
字号:
                        {
                        	if (app->profile_connected == hfp_handsfree_profile)
                        	{
                                hfpHeadsetHangUpCall(app);
                            }
                            else
                            {
                                /* Send an HSP button press */
                                HfpSendHsButtonPress(app->hsp);
							}
                            playButtonTone = TRUE;
                        }
                        break;

                        case headsetActiveCall:
                        {
                            if (app->profile_connected == hfp_handsfree_profile)
                            {
                                hfpHeadsetHangUpCall(app);
                            }
                            else
                            {    /* Send an HSP button press */
                                HfpSendHsButtonPress(app->hsp);
							}
                            playButtonTone = TRUE;
                    	}
						break;


                        case headsetConnecting:
						case headsetInitialising:
                        default:
                        break ;
					}
                    
					if (!playButtonTone && (current_hfp_state != headsetReady))
                            playErrorTone = TRUE;
                }
            }
   		}         
        break;

        default:
        break;                
    }
    
    if (playErrorTone)
       headsetPlayTone(app, tone_type_error); 
    if (playButtonTone)
        headsetPlayTone(app, tone_type_button_press);         

}

/****************************************************************************
*/
void button_handle_mfb_long_held(  headsetTaskData *app  ) 
{   

	switch (app->headset_power_state)
	{
		case power_state_off:
		case power_state_off_charging:
		    headsetPowerOn(app);
		break;
			
		case power_state_on:
		case power_state_on_charging:
		default:
		    /* We act on the button release - play tone to indicate button has been 
		        held for required time.*/
			headsetPlayTone(app, tone_type_button_press);  
	    break;
	}
}

/****************************************************************************
*/
void button_handle_mfb_long_release(  headsetTaskData *app  ) 
{
    bool playErrorTone = FALSE ;
    bool playButtonTone = FALSE ;
    
    headsetHfpState current_hfp_state = app->hfp_state;   
    
            switch (app->headset_power_state)
            {
            case power_state_off:
                /* Update the local state to show we're now powered on */
                headsetSetPowerState(app, power_state_on);
                /* Check to see if page scanning should be enabled */
  				updateHeadsetScanning(app);
                /* Auto connect to the last used devices if functionality is enabled */
                headsetConnectToLastDevices(app);
                break;
            case power_state_off_charging:
                /* Update the local state to show we're now powered on */
                headsetSetPowerState(app, power_state_on_charging);
                /* Check to see if page scanning should be enabled */
  				updateHeadsetScanning(app);
                /* Auto connect to the last used devices if functionality is enabled */
                headsetConnectToLastDevices(app);
                break;

            case power_state_on:
            case power_state_on_charging:
                if (!app->headset_connecting_hfp)
                {
                    if (isHeadsetPairing(app))
                    {
                        playErrorTone = TRUE;
                    }
                    else
                    {
                        /* Headset not idle, must have some connection active */
                        switch(current_hfp_state)
                        {
                            case headsetReady:
                                /* If we're already streaming music pause it. */
                                if (app->a2dp_state == avHeadsetA2dpStreaming)
                                {
                                    avHeadsetAvStreamStop(app, TRUE);
                                    (void) MessageCancelAll(getAppTask(), APP_MUSIC_RESTART_IND);
                                }

                                /* Headset is idle initiate Last number redial */
                                app->headset_connecting_hfp = 1;
                        
                                /* Requeue the message so we can act on it on SLC connect */
                                MessageSendConditionally(&app->task, BUTTON_MFB_LONG_RELEASE, 0, &app->headset_connecting_hfp);
                        
                                /* Initiate the HFP SLC */
                                hfpHeadsetHandleSlcConnectRequest(app, hfp_handsfree_profile);
                                break;

                            case headsetConnecting:
                                break;

                            case headsetConnected:
                                if (app->profile_connected == hfp_handsfree_profile) 
                                {
                                    hfpHeadsetLastNumberRedial(app);
                                }
                                else
                                {
                                    playErrorTone = TRUE;
                                }
                                break;
                
                            case headsetIncomingCallEstablish:
                                if (app->profile_connected == hfp_handsfree_profile)
                                {
                                    hfpHeadsetRejectCall(app);
                                }
                                else
                                {
                                    playErrorTone = TRUE;
                                }
                                break;

                            case headsetOutgoingCallEstablish:
                                if (app->profile_connected == hfp_handsfree_profile)
                                {
                                    /* Transfer the audio */
                                    if (!app->sco_sink)
                                        hfpHeadsetTransferAudio(app, hfp_audio_to_hfp);
                                    else
                                        hfpHeadsetTransferAudio(app, hfp_audio_to_ag);
                                }
                                else
                                {
                                    playErrorTone = TRUE;
                                }
                                break;

                            case headsetActiveCall:
                                if (app->profile_connected == hfp_handsfree_profile)
                                {
                                    /* Transfer the audio */
                                    if (!app->sco_sink)
                                        hfpHeadsetTransferAudio(app, hfp_audio_to_hfp);
                                    else
                                        hfpHeadsetTransferAudio(app, hfp_audio_to_ag);
                                }              
                                else
                                {
                                    playErrorTone = TRUE;
                                }
                                break;

                            case headsetInitialising:
                            default:
/*                                unhandledHfpState(current_hfp_state, id);*/
                            break ;
                        }
                    }
                }
                break;
            default:
                break;
            }
            

    if (playErrorTone)
       headsetPlayTone(app, tone_type_error); 
    if (playButtonTone)
        headsetPlayTone(app, tone_type_button_press);  
}

/****************************************************************************
*/
void button_handle_mfb_very_long(  headsetTaskData *app  ) 
{
	uint16 prevent_power_on = 0;
                
	if ((app->headset_power_state == power_state_off) ||
        (app->headset_power_state == power_state_off_charging )) 
	{
		prevent_power_on = MessageCancelAll(getAppTask(), APP_PREVENT_POWER_ON);
        
		if (prevent_power_on==0)
		{
            	/* Update the loacl state to show we're now powered on */
			if (app->headset_power_state == power_state_off)
            {
	        	headsetSetPowerState(app, power_state_on);
			}
			else
			{
				headsetSetPowerState(app, power_state_on_charging);
			}
            	/*Check to see if page scanning should be enabled*/
			updateHeadsetScanning(app);
            	/* Go into pairing mode. */
            headsetEnterPairingMode(app);
        }
	}
    else 
    {
    	headsetPowerOff(app);
    }
}

/****************************************************************************
*/
void button_handle_play_pause_press(  headsetTaskData *app  ) 
{
	headsetPowerAmp (app , TRUE);
}

/****************************************************************************
*/
void button_handle_play_pause_short(  headsetTaskData *app  ) 
{
	MessageSendLater(&app->task, APP_PLAY_PAUSE_SHORT, 0, 200);
}

/****************************************************************************
*/
void button_handle_play_pause_long(  headsetTaskData *app  ) 
{
    bool playErrorTone = FALSE ;
    bool playButtonTone = FALSE ;

    headsetAvrcpState current_avrcp_state = app->avrcp_state;
    headsetHfpState current_hfp_state = app->hfp_state;  
    
	switch (app->headset_power_state)
    {
	    case power_state_off:
	    case power_state_off_charging: 
        break;

	    case power_state_on:
    	case power_state_on_charging:
    	{
			if (isHeadsetPairing(app))
        	{
            	playErrorTone = TRUE;
				break;
       	 	}
        	if (isHeadsetIdle(app))
        	{
            		/* Connect the AV. */                    
				playButtonTone = TRUE;
            	avHeadsetHandleAvConnectRequest(app);
        	}
        	else
			{
				if (current_hfp_state == headsetActiveCall)
            	{
					/* Mute or un-mute the microphone */
					headsetMicrophoneMuteToggle(app);
            	}
				else if ((current_hfp_state == headsetIncomingCallEstablish) ||
				         (current_hfp_state == headsetOutgoingCallEstablish) || 
				         (app->voice_recognition_enabled))
				{
					playErrorTone = TRUE;
				}
            	else if (current_avrcp_state == avHeadsetAvrcpConnected)
            	{
                	avHeadsetSendStop(app);                     
					playButtonTone = TRUE;
            	}
            	else if (app->active_profile == av_active)
            	{
                	avHeadsetAvStreamStop(app, TRUE);
                	playButtonTone = TRUE;
            	}
            	else
            	{                    
					playButtonTone = TRUE;
                	avHeadsetHandleAvConnectRequest(app);
            	}                        
        	}
        	break;
    	}
    
    	default:
    	break ;
	}
        
    if (playErrorTone)
       headsetPlayTone(app, tone_type_error); 
    if (playButtonTone)
        headsetPlayTone(app, tone_type_button_press);  
}

/****************************************************************************
*/
void button_handle_forward_backward_held(  headsetTaskData *app  ) 
{
	if ( (app->headset_power_state == power_state_on) ||
	     (app->headset_power_state == power_state_on_charging))
	{
		headsetPlayTone(app, tone_type_pairing);
		ledsPlay(BLUE_FOUR_FLASHES_FAST);				
		headsetClearPairedDevices(app);
	}	
}


            

⌨️ 快捷键说明

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