📄 events.c
字号:
/******************************************************************************* * CONFIDENTIAL - PHILIPS APM * * This is unpublished work is a trade secret. Philips APM owns all rights * to this work and intends to maintain it in confidence to preserve its * trade secret status. Philips Automotive Playback Modules reserves the * right to protect this work as an unpublished copyrighted work in the * event of an inadvertent Automotive Systems also reserves its right. * Those having access to this work mayor deliberate unauthorized publication. * Do not copy it, use it, or disclose the information contained in it * without the written authorization of Philips Automotive Playback Modules. ******************************************************************************//******************************************************************************//*! \file * * Project Scope: CDM M8 * * Organization: Philips APM-DS * * Version Control: * \source sources/player/events.c * \version 0.1 * \author Bernard Bosnjak * \date 08.02.2005 * * Target Hardware: Accordo ******************************************************************************* * \brief Event handling * * \par Change History: * *************************************************** * * STM CVS Log: * * $Log: events.c,v $ * Revision 1.48 2007/11/15 14:41:48 marcucci * Added Protection in event_in_shedule() and event_out_shedule() * * Revision 1.47 2007/11/09 09:13:53 sedmik * fix for compilation directive (#elif) * * Revision 1.46 2007/11/08 17:32:37 sedmik * new cmd/status channels on IPOD_AP added * * Revision 1.45 2007/10/22 15:23:28 trubac * Safer events scheduling, first copies data then signal new event. * Improved synchronous tasks events exchange * * Revision 1.44 2007/09/26 15:08:07 dellorto * dsp hf event replaced with hf event (generated by check hf fsm) * * Revision 1.43 2007/09/20 21:35:52 longauer * virtual iPod authentication is working * * Revision 1.42 2007/08/14 15:28:26 dellorto * multiple mechanisms * * Revision 1.41 2007/08/10 12:33:29 longauer * IPOD_AP compilation switch enables future iAP * * Revision 1.40 2007/07/10 13:54:03 longauer * usb events renaming * * Revision 1.39 2007/06/04 16:58:45 longauer * USBtask rearrangement in order to support more logical units; new file usb_pri.h added with USBtask private declarations; USB compilation switches added; constants renaming; * * Revision 1.38 2007/04/11 14:20:13 belardi * Integration of HAVE_CD_MECHA modification by [GP] * * Revision 1.37 2007/02/21 20:18:14 longauer * usb states and error reorganization; usb state is propagated to player task = usb * state messaging * * Revision 1.36 2007/02/21 09:15:43 chlapik * new CTR - CAP interface: ESP history removed from CTR * * Revision 1.35 2007/02/13 11:04:38 sedmik * player status changed to big event (used for host update "data prepared" signalling) * * Revision 1.34 2007/02/09 14:14:47 longauer * minor passthrough events reorganization * * Revision 1.33 2007/02/09 12:12:54 belardi * First integration of iPod pass-through * - new hostif-usb events * * Revision 1.32 2007/01/29 14:32:00 chlapik * support for USB devices with any block size (not only 512B) * * Revision 1.31 2006/11/27 19:52:43 belardi * Host Update protocol addition * - new Controller command/events * * Revision 1.30 2006/09/18 09:55:24 belardi * Corrected CVS keyword usage * * Revision 1.29 2006/09/18 09:24:52 belardi * Added Log CVS keyword into file header * * ******************************************************************************/#include <string.h>#include "gendef.h"#include "osal.h"#include "player.h"#include "controller.h"#include "capture.h"#include "xfile.h"#include "filesys.h"#include "srvcmd.h"#include "bkdhdl.h"#if (0 != HAVE_USB)#include "usb.h"#if (0 != IPOD_PASSTHROUGH)#include "hostif_high.h"#endif /*IPOD_PASSTHROUGH*/#if (0 != IPOD_AP) //[LL]new#include "ACP.h" //[LL]new#include "iAP.h" //[LL]new#endif /*IPOD_AP*/ //[LL]new#endif#if (HAVE_CD_MECHA == 1)void *get_servo_subcode_event_data(t_event_stage i);#endifvoid *get_controller_cmd_event_data(t_event_stage i);void *get_controller_usb_status_event_data(t_event_stage i);void *get_decoder_cmd_event_data(t_event_stage i);void *get_capture_cmd_event_data(t_event_stage i);void *get_capture_bd_event_data(t_event_stage i);void *get_capture_subcode_event_data(t_event_stage i);void *get_capture_pre_endplay_event_data(t_event_stage i);void *get_capture_read_event_data(t_event_stage i);#if (HAVE_CD_MECHA == 1)void *get_servo_cmd_event_data(t_event_stage i);void *get_acq_subcode_event_data(t_event_stage i);#endif#if ((0!=IPOD_PASSTHROUGH) && (0 != IPOD_AP))void * get_player_downstream_cmd_event_data(t_event_stage i);void * get_player_downstream_status_event_data(t_event_stage i);void * get_player_upstream_status_event_data(t_event_stage i);void * get_player_upstream_cmd_event_data(t_event_stage i);#endif /* ((0!=IPOD_PASSTHROUGH) && (0 != IPOD_AP))*/void *get_usb_cmd_event_data(t_event_stage i);void *get_usb_status_event_data(t_event_stage i);void *get_player_subcode_event_data(t_event_stage i);void *get_player_status_event_data(t_event_stage i);void *get_decoder_time_event_data(t_event_stage i);#if (0 != HAVE_SDC)void *get_sdc_cmd_event_data(t_event_stage i);#endif /* HAVE_SDC */void *get_player_cmd_event_data(t_event_stage i);void *get_filesys_cmd_event_data(t_event_stage i);#if ((0!=IPOD_PASSTHROUGH) || (0!=IPOD_AP)) //[LL]newvoid * get_usb_downstream_cmd_event_data(t_event_stage i);void * get_usb_upstream_cmd_event_data(t_event_stage i);void * get_usb_downstream_status_event_data(t_event_stage i);void * get_usb_upstream_status_event_data(t_event_stage i);#endif /* IPOD_PASSTHROUGH || IPOD_AP */#if (0!=IPOD_AP) //[LL]newvoid* get_acp_cmd_event_data(t_event_stage i); //[LL]newvoid* get_acp_status_event_data(t_event_stage i); //[LL]new#endif /*IPOD_AP*/ //[LL]newt_event_union event_out[OSAL_MAX_EVENT];t_event_union event_pending[OSAL_MAX_EVENT];t_event_union event_in[OSAL_MAX_EVENT];typedef enum{ EVENT_TYPE_SIMPLE, EVENT_TYPE_BITMAP, EVENT_TYPE_BIG,} t_event_type;typedef struct{ OSAL_THREAD_ID_t thread_to_shedule; t_event_type event_type; Int size; void *(* get_event)(t_event_stage);} t_event_data;static const t_event_data event_data[OSAL_MAX_EVENT] ={#if (HAVE_CD_MECHA == 1) {OSAL_THREAD_LoaderTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* LOADER_CMD_EVENT */#endif#ifdef APM_PICKUP {OSAL_THREAD_HostIfTask, EVENT_TYPE_BITMAP, 0, NULL}, /* MSG_SET_REQUEST_PENDING */ {OSAL_THREAD_HostIfTask, EVENT_TYPE_BITMAP, 0, NULL}, /* MSG_DELPHI_REQUEST_PENDING */#endif {OSAL_THREAD_PlayerTask, EVENT_TYPE_BIG, sizeof(t_player_cmd_event), get_player_cmd_event_data}, /* PLAYER_CMD_EVENT */#if ((0!=IPOD_PASSTHROUGH) && (0 != IPOD_AP)) {OSAL_THREAD_PlayerTask, EVENT_TYPE_BIG, sizeof(t_usb_downstream_cmd_event), get_player_downstream_cmd_event_data}, /* PLAYER_DOWNSTREAM_CMD_EVENT */ {OSAL_THREAD_PlayerTask, EVENT_TYPE_BIG, sizeof(t_usb_upstream_cmd_event), get_player_upstream_cmd_event_data}, /* PLAYER_UPSTREAM_CMD_EVENT */ #endif /* ((0!=IPOD_PASSTHROUGH) && (0 != IPOD_AP))*/ {OSAL_THREAD_ControllerTask, EVENT_TYPE_BIG, sizeof(t_controller_cmd_event), get_controller_cmd_event_data}, /* CONTROLLER_CMD_EVENT */ {OSAL_THREAD_CaptureTask, EVENT_TYPE_BIG, sizeof(t_cap_cmd_event), get_capture_cmd_event_data}, /* CAPTURE_CMD_EVENT */#if (HAVE_CD_MECHA == 1) {OSAL_THREAD_ServoTask, EVENT_TYPE_BIG, sizeof(t_servo_cmd_event), get_servo_cmd_event_data}, /* SERVO_CMD_EVENT */#endif {OSAL_THREAD_DecoderTask, EVENT_TYPE_BIG, sizeof(t_decoder_cmd_event), get_decoder_cmd_event_data}, /* DECODER_CMD_EVENT */ {OSAL_THREAD_FilesysTask, EVENT_TYPE_BIG, sizeof(t_filesys_cmd_event), get_filesys_cmd_event_data}, /* FILESYS_CMD_EVENT */#if (0 != HAVE_USB) {OSAL_THREAD_USBTask, EVENT_TYPE_BIG, sizeof(t_child_cmd_event), get_usb_cmd_event_data}, /* EVENT_USB_CMD */#if ((0!=IPOD_PASSTHROUGH) || (0!=IPOD_AP)) //[LL]new {OSAL_THREAD_USBTask, EVENT_TYPE_BIG,sizeof(t_usb_downstream_cmd_event), get_usb_downstream_cmd_event_data}, /* USB_DOWNSTREAM_CMD_EVENT */ {OSAL_THREAD_USBTask, EVENT_TYPE_BIG, sizeof(t_usb_upstream_cmd_event), get_usb_upstream_cmd_event_data}, /* USB_UPSTREAM_CMD_EVENT */#endif /*IPOD_PASSTHROUGH || IPOD_AP*/#if (0!=IPOD_AP) //[LL]new {OSAL_THREAD_ACPTask, EVENT_TYPE_BIG, sizeof(t_acp_cmd_event), get_acp_cmd_event_data}, /* ACP_CMD_EVENT */ //[LL]new#endif /*IPOD_AP*/ //[LL]new #endif /*HAVE_USB*/#if (0 != HAVE_SDC) {OSAL_THREAD_SDCTask, EVENT_TYPE_BIG, sizeof(t_child_cmd_event), get_sdc_cmd_event_data}, /* SDC_CMD_EVENT */#endif /* HAVE_SDC */#if (HAVE_CD_MECHA == 1) {OSAL_THREAD_LoaderTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* LOADER_SW_EVENT */#endif {OSAL_THREAD_PlayerTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* LOADER_STATUS_EVENT */#ifndef APM_PICKUP {OSAL_THREAD_PlayerTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* HW_EJECT_EVENT */#endif#if (HAVE_CD_MECHA == 1) {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_AGC_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_FOCUS_EVENT */#ifdef APM_PICKUP {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_TTM_FG_EVENT */#endif#ifdef ECC_WORKAROUND {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_CLV_BUFFER_EVENT */#endif {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_RAMP_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* DSP_SHORT_JUMP_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* TRACKING_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* HF_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* SLEDGE_SW_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* SLEDGE_STATUS_EVENT */ {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* TTM_EVENT */#ifdef ECC_WORKAROUND {OSAL_THREAD_ServoTask, EVENT_TYPE_SIMPLE, 0, NULL}, /* CLV_IRQ_EVENT */#endif#endif // HAVE_CD_MECHA#ifdef APM_PICKUP {OSAL_THREAD_HostIfTask, EVENT_TYPE_BITMAP, 0, NULL}, /* I2C_EVENTBIT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -