hostif_high.c

来自「本程序为ST公司开发的源代码」· C语言 代码 · 共 2,071 行 · 第 1/5 页

C
2,071
字号
  	case CMD_BIN_TRANSFER_READ:  	  /* check preconditions for all modes*/       if (binary_trasfer_mode == NO_TRANSFER)  	  {  	        	    report_msg_error_mode(ERM_NA_STATE_ERROR);  	    return;  	  }        	  switch (binary_trasfer_mode)  	  {  	    case HOST_UPDATE_MODE:#if (0!=HAVE_HOST_UPDATE_NEW)            if (player_mode == PLM_UPDATE)          {#if (0 != IPOD_PASSTHROUGH)            saved_BinaryUpstreamParameters.send_msg_now = b_TRUE;#endif /*IPOD_PASSTHROUGH*/          }          else /*no data available, or no next data were available, player went to mode stop */            hostifAppSendMsgOneParameter(response_msg, HOSTIF_GROUP_MSG_BINARY_TRANSFER, MSG_ACK_BINARY_PACKET, ACK_NO_DATA);#endif  	      break;  	      	    case RESUME_MODE:#if (0!=IPOD_PASSTHROUGH)  	      if (saved_BinaryUpstreamParameters.data_cnt || saved_BinaryUpstreamParameters.saved_data_count)            saved_BinaryUpstreamParameters.send_msg_now = b_TRUE;          else /*no data available, or no next data were available, player went to mode stop */#endif /*IPOD_PASSTHROUGH*/            hostifAppSendMsgOneParameter(response_msg, HOSTIF_GROUP_MSG_BINARY_TRANSFER, MSG_ACK_BINARY_PACKET, ACK_NO_DATA);          break;#if (0 != HAVE_USB)#if (0 != IPOD_PASSTHROUGH)            	    case IPOD_MODE:  	      /* messages are in this mode sent automatically, see new spec. */   	      break;#endif /* IPOD_PASSTHROUGH */#endif /*HAVE_USB*/  	    default:           report_msg_error_mode(ERM_NA_STATE_ERROR);  	      break;          	  }      break;  	/* Host writes data packet */  	case CMD_BIN_TRANSFER_WRITE:  	  switch (binary_trasfer_mode)  	  {  	    case IPOD_MODE:#if (0 != IPOD_PASSTHROUGH)#if (0 != HAVE_USB)  	      if (hostif_process_binary_downstream(cmd, cmd_len, &saved_BinaryDownstreamParameters, &downstream_cmd_struct))  	      {#if (0 != IPOD_AP)  	        player_downstream_command(&downstream_cmd_struct);#else /* IPOD_AP */    	        usb_downstream_command(&downstream_cmd_struct);#endif /* IPOD_AP */  	      }  	      else#endif /*HAVE_USB*/#endif /* IPOD_PASSTHROUGH */      	  {  	            	    report_msg_error_mode(ERM_NA_STATE_ERROR);      	  }  	      break;  	      	    case RESUME_MODE:#if (0 != IPOD_PASSTHROUGH)  	      /* resume data are processed locally, no need to send any command to another task */  	      if (hostif_process_binary_downstream(cmd, cmd_len, &saved_BinaryDownstreamParameters, &downstream_cmd_struct))    	      hostif_process_resume_data(&saved_BinaryDownstreamParameters, &downstream_cmd_struct);#endif /*IPOD_PASSTHROUGH*/  	      break;  	      	    case HOST_UPDATE_MODE:  	    default:           report_msg_error_mode(ERM_NA_STATE_ERROR);  	      break;          	  }      break;    default:      hostifAppSendMsgCmdEval(CMDE_ILLEGAL_COMMAND, HOSTIF_GROUP_CMD_BINARY_TRANSFER, cmd_id);      break;  }  }#endif/************************************************** * * process_cmd_power_mode() *  * Parameters: *  TBD, *  * Description: *  **************************************************/extern t_player_time_info    player_q_subcode;extern t_player_resume_info  player_resume_info[];uint8 process_cmd_power_mode(void){  uint8 i;	if (power_mode == PWM_POWER_ON)	{    report_msg_power_mode(PWM_GOING_TO_POWER_OFF);#if (0 != HAVE_POSITION)	if (module_config.data.size_of_flash != 0)	{    //this part would be used inside player    //store current playback position    player_store_resume_info(player_song, recalc_time_to_position(player_q_subcode.min, player_q_subcode.sec, player_q_subcode.frame), &player_params);  		    //copy to hostif storage structure    for (i=0;i<DEV_SLOTS;i++)    {      hostifStoredData.f.v.resume_info[i] = player_resume_info[i];    }    //player_resume_stored_in_flash = b_FALSE;    //singnal to hostif, store current resume info to NVRAM    send_hostif_inevent(HOSTIF_STORE_DATA);	}#endif        	      if (loader_mode != LDM_STOP)    {      report_msg_loader_mode(LDM_INSERTING,LDMA_NONE);    }    if (player_mode != PLM_STOP)    {  	    report_msg_player_mode(PLM_STOP, PLTS_RUNNING, player_current_resume_info_available,0);    }	}	else	{		report_msg_power_mode(power_mode);	}	return PCMD_POWER_MODE;}/************************************************** * * process_cmd_stop() *  * Parameters: *  TBD, *  * Description: *  **************************************************/uint8 process_cmd_stop(void){	//common for all devices	  if (b_FALSE == check_preconditions())    return PCMD_NONE;    else if (player_mode == PLM_STOP)	{    report_msg_player_mode(PLM_STOP, player_transition_state, player_current_resume_info_available,0);		return PCMD_NONE;						}	else if ((player_mode == PLM_STARTUP) ||(player_mode == PLM_MOUNT))	{	  report_msg_error_mode(ERM_NA_STATE_ERROR);		report_msg_player_mode(player_mode, player_transition_state, player_current_resume_info_available,player_seek.speed);		return PCMD_NONE;						}	report_msg_player_mode(PLM_STOP, PLTS_RUNNING, player_current_resume_info_available,0);  //play_mode switching will be done in player 	return PCMD_STOP;}/************************************************** * * process_cmd_load() *  * Parameters: *  TBD, *  * Description: *  **************************************************/uint8 process_cmd_load(void){	if (power_mode != PWM_POWER_ON)	{		report_msg_error_mode(ERM_NA_STATE_ERROR);		report_msg_power_mode(power_mode);	}	else if ((loader_mode == LDM_NO_DISC) && (START_INSERT_ACTION_IN_NO_CD_POSITION == 0) && (CONSERVATIVE_BEHAVIOR_SHINWA_CDC02 == 0))	{		set_and_report_disc_type(DT_NO_DISC);	}	else if (loader_mode == LDM_STOP)	{		report_msg_loader_mode(loader_mode, LDMA_NONE);	}	else	{		report_msg_loader_mode(LDM_INSERTING, LDMA_INSERTING_BY_COMMAND);		return PCMD_LOAD;	}	return PCMD_NONE;}/************************************************** * * process_cmd_eject() *  * Parameters: *  TBD, *  * Description: *  **************************************************/uint8 process_cmd_eject(void){	if (power_mode != PWM_POWER_ON)	{		report_msg_error_mode(ERM_NA_STATE_ERROR);		report_msg_power_mode(power_mode);	}	else if ((loader_mode == LDM_NO_DISC) && (START_EJECT_ACTION_IN_NO_CD_POSITION == 0) && (CONSERVATIVE_BEHAVIOR_SHINWA_CDC02 == 0))	{		set_and_report_disc_type(DT_NO_DISC);	}	else if ((loader_mode == LDM_EJECT) && (HAVE_EJECT_REPOSITIONING == 0))	{		report_msg_loader_mode(LDM_EJECT, LDMA_NONE);	}	else	{		report_msg_loader_mode(LDM_EJECTING, LDMA_NONE);		return PCMD_EJECT;	}	return PCMD_NONE;}/************************************************** * * process_cmd_em_eject() *  * Parameters: *  TBD, *  * Description:b *  **************************************************/uint8 process_cmd_em_eject(void){	if (power_mode != PWM_POWER_ON)	{		report_msg_error_mode(ERM_NA_STATE_ERROR);		report_msg_power_mode(power_mode);	}	else	{		report_msg_loader_mode(LDM_EM_EJECTING, LDMA_NONE);		return PCMD_EM_EJECT;	}	return PCMD_NONE;}/************************************************** * * process_cmd_play(uint8 play_current, uint16 trackNr) *  * Parameters: *  TBD, *  * Description: *  **************************************************/uint8 process_cmd_play(uint8 current, uint8 data_tracks, uint16 trackNr, uint8 Second){  //int16 tempvol = 0; // [RB] unused  //t_volume_selection_struct volume_selection_struct; // [RB] unused    if (b_FALSE == check_preconditions())    return PCMD_NONE;    else if ((player_mode == PLM_STOP)         || (player_mode == PLM_PLAY) //allow to play cmd during playback        || (player_mode == PLM_PAUSE)         || (player_mode == PLM_FAST_FW)         || (player_mode == PLM_FAST_BW))   {    if ((current == CMD_PARAM_TIME_POSITION) || (current == CMD_PARAM_LBA_POSITION))    {      if (0 == data_tracks)      //audio      {        if ((player_playlist.enabled) || (player_params.device != DEV_CD_ID))   //requesting audio file when playlist enabled not allowed        {          report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);    		  return PCMD_NONE;        }                if ((trackNr > CountFilesForVolume(1 /*DEV_CD_ID*/,SEARCH_PLAYABLE)) || (trackNr == 0))         {          report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);    		  return PCMD_NONE;        }           if (TRACK_TYPE_DATA == TOC_TRACK_TYPE(trackNr))    //temporary solution - Visteon requests this functionality         {          report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);    		  return PCMD_NONE;        }              }      else                          //data      {        //check playlist content                 if ((player_playlist.enabled) && (player_playlist.parsed) && (trackNr > player_playlist.array_items ))            {          report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);    		  return PCMD_NONE;        }        if ((trackNr > CountFilesForDevice(player_params.device,b_FALSE,SEARCH_PLAYABLE)) || (trackNr == 0))        {          report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);    		  return PCMD_NONE;        }                        }      if (Second > 59)      {                    report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);  		  return PCMD_NONE;      }  		report_msg_player_mode(PLM_PLAY, PLTS_RUNNING, player_current_resume_info_available,0);  		return PCMD_PLAY;            }    else if (current == CMD_PARAM_CURRENT_POSITION)    {      //check num of files on device       if ((0 == player_song) && (0 == CountFilesForDevice(player_params.device,b_TRUE,SEARCH_PLAYABLE)))  //check playable items on media      {      	report_msg_error_mode(ERM_NA_STATE_ERROR);    		report_msg_player_mode(player_mode, player_transition_state, player_current_resume_info_available, player_seek.speed);        return PCMD_NONE;          }      //check if playback already in progress      if (player_mode == PLM_PLAY)      {                  report_msg_player_mode(PLM_PLAY, PLTS_IDLE, player_current_resume_info_available,0);         return PCMD_PLAY;     //JS send commmand anyway (task priorities vs. global vars)      }      else      {    		report_msg_player_mode(PLM_PLAY, PLTS_RUNNING, player_current_resume_info_available,0);    		return PCMD_PLAY;      }    }      }	else 	{		report_msg_error_mode(ERM_NA_STATE_ERROR);		report_msg_player_mode(player_mode, player_transition_state, player_current_resume_info_available, player_seek.speed);  }	return PCMD_NONE;}/************************************************** * * process_cmd_play_continue() *  * Parameters: *  TBD, *  * Description: *  **************************************************/uint8 process_cmd_play_continue(uint8 cancel_previous,uint8 data_tracks, uint16 trackNr){  char response_msg[3];  if ((cancel_previous !=0) && (cancel_previous !=1))     //param prechecking  {	  report_msg_error_mode(ERM_INVALID_PARAMETER_ERROR);   	  return PCMD_NONE;   }      if (b_FALSE == check_preconditions())    return PCMD_NONE;    else if  ((player_mode == PLM_PLAY)         || (player_mode == PLM_FAST_FW)          || (player_mode == PLM_FAST_BW))	{	    if (cancel_previous != 0)    {      if (0 == data_tracks)      //audio      {        if ((player_playlist.enabled) || (player_params.device != DEV_CD_ID))   //requesting audio file when playlist enabled not allowed        {

⌨️ 快捷键说明

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