📄 controller.h
字号:
/************************************************** * * controller.h * * CVS ID: $Id: controller.h,v 1.95 2007/09/21 05:25:45 hara Exp $ * Author: Ondrey Trubac [OT] - STM * Date: $Date: 2007/09/21 05:25:45 $ * Revision: $Revision: 1.95 $ * * Description: * * Main entry point for the controller task. * *************************************************** * * COPYRIGHT (C) ST Microelectronics 2005 * All Rights Reserved * ********************************************************************************************** * * \brief Controller * * \par Change History: * * * - DR060912 Play Mode / ROM Mode buffer access Flag Play_Mode(Declared In t_child_xfer_event) * ****************************************************************************** * * STM CVS Log: * * $Log: controller.h,v $ * Revision 1.95 2007/09/21 05:25:45 hara * Initial implementation for WMDRM feature into A+. * * Revision 1.94 2007/07/12 16:44:27 longauer * init/close usb controller cmd/status path partly implemented * * Revision 1.93 2007/07/09 11:10:35 longauer * preparation for forced closing * of the usb controller, preparation for iAP, total medium size info, * usb device serial number string length corrected, cleaning * * Revision 1.92 2007/06/04 16:58:44 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.91 2007/02/26 12:32:41 trubac * SDC defines not conditional to ease compilation problems when no SDC * * Revision 1.90 2007/02/21 20:18:13 longauer * usb states and error reorganization; usb state is propagated to player task = usb * state messaging * * Revision 1.89 2007/02/21 09:15:42 chlapik * new CTR - CAP interface: ESP history removed from CTR * * Revision 1.88 2007/01/03 09:52:14 chlapik * fixed bug - if fast seek cmd coming while prebuffering of next song for CDDA, modify cap_write_q_tno inside CAP from CTR to current played song * * Revision 1.87 2006/12/06 13:34:28 marcucci * Have Update Fix * * Revision 1.86 2006/12/04 16:43:41 chlapik * waiting for read ready in read tr. * * Revision 1.85 2006/11/27 19:39:45 belardi * Host Update protocol addition * * Revision 1.84 2006/11/21 15:34:37 sedmik * new macro def, checking all seek params * * Revision 1.83 2006/11/13 19:03:59 longauer * *** empty log message *** * * Revision 1.82 2006/10/17 14:19:36 chlapik * - multiple ready * - modified devices handling: type of last cmd from PLY to CTR stored for each device separately * - CTR checks if there is not wrong unforced cmd for prebuffering while old one is still not finished * - new CTR - CAP interface: * - CTR is able to process info about amount of really provided data from CAP, re-ask for rest of data again * - number of xfered data calculates CTR itself (temporarily) * - sector lba in read requests for CDDA added * - CTR doesn't use ctr_read_cmd() * - CTR has posibility to work without ESP_HISTORY * * Revision 1.81 2006/10/17 09:46:39 trubac * xfer_params struct, removed unused tag * * Revision 1.80 2006/10/10 12:03:29 belardi * Merge of m8_cav2_cm80507 * - removed buffering_mode from struct * * Revision 1.79 2006/09/26 09:41:20 belardi * Added function prototype * * Revision 1.78 2006/09/19 11:03:57 chlapik * solved misunderstanding of Play_Mode and buffering_mode bits in cmd to CAP - buffering_mode is again present in cmd structure * * Revision 1.77 2006/09/18 13:22:27 chlapik * fixed bug - if FF cmd cancelled by FB * - wrong determination of search mode in process_preevents (not only data params but also play params must be checked) * - again checking errors for read requests from CAP * * Revision 1.76 2006/09/15 19:32:15 belardi * Merged the m8_cav2_cm80506_cs3563. * - changed xfer_prameters fields * * ************************************************************************************************//* TODO* READY different types for different commands and force/unforced commands* controller configuration* search - silence between search chunks (configurable length)* insert pause (silence no mute) between songs (CA only)* fix offset MACROS and use it in controller* clean device ID* USB bug* error handling of unfinished write request to capture* add fade in/out* ESP prebuffering to check* Reset all tasks to be able to execute eject when everything fail* Recheck read ready from capture requirements to be not interrupted with new command*//* DONE* implement unforced to force command (search - play always forced)* finish PLAY_AT from current position* search - implement first play and than jump - capture communication to ignore only first jump track change* time after stop to be reported in relation with real begin of song* Add buffer mode to capture write command (TODO-1)*/#ifndef DEFINE_CONTROLLER_H#define DEFINE_CONTROLLER_H#include "capture.h"#include "decoder_defines.h"#include "decoder_task.h"#include "xdefines.h"#define END_OF_SONG 0x1#define END_OF_PLAY 0x3#define XFER_SPLIT 0x1#define DONT_DO_FIRST_JUMP 0x2#define BITRATE_DETECT_LENGTH (5*2048) // 5sectors// Used for Device data for other Task (FileSys / Player)#define CTR_FOR_FILESYS_TASK 0#define CTR_FOR_PLAYER_TASK 1// Controller events:#define CONTROLLER_NEW_CAPTURE_TOC_EVENT 0x020#define CONTROLLER_NEW_FILESYS_DATA_REQUEST_EVENT 0x040#define CONTROLLER_NEW_FILESYS_INIT_EVENT 0x080#define CONTROLLER_NEW_FILESYS_TAG_EVENT 0x100#define CONTROLLER_NEW_FILESYS_MOUNT_EVENT 0x200#define CONTROLLER_NEW_FILESYS_STOP_EVENT 0x400#if (0 != HAVE_HOST_UPDATE)#define UPDATE_LOAD_NEXT 0x80000#endif// controller's sub_fsm:#define CTR_TRANSITION_READ_TOC 0x001#define CTR_TRANSITION_MOUNT_FS 0x002#define CTR_TRANSITION_TAG_DECODE 0x004#define CTR_TRANSITION_STOP 0x008#define CTR_TRANSITION_CD_DATA_FOR_CTR 0x010#define CTR_TRANSITION_CD_DATA_FOR_TASK 0x020#define CTR_TRANSITION_PLAY 0x040#define CTR_TRANSITION_USB_DATA_FOR_CTR 0x080 // M.Ch#define CTR_TRANSITION_USB_DATA_FOR_TASK 0x100 // M.Ch#if (0 != HAVE_SDC)#define CTR_TRANSITION_SDC_DATA_FOR_CTR CTR_TRANSITION_USB_DATA_FOR_CTR#define CTR_TRANSITION_SDC_DATA_FOR_TASK CTR_TRANSITION_USB_DATA_FOR_TASK#endif /* HAVE_SDC */#define CTR_TRANSITION_STOP_FYSESYS 0x200#define CTR_TRANSITION_STOP_DECODER 0x400#define CTR_TRANSITION_CD_EXTENT 0x800#define CTR_TRANSITION_STOP_USB 0x1000#define CTR_TRANSITION_INIT_DISC 0x2000#define CTR_TRANSITION_DATA 0x4000#define CTR_TRANSITION_STOP_CD 0x8000#define CTR_TRANSITION_STOP_DEVICE 0x8000 // TBD would need return values to be uint32#define CTR_TRANSITION_ESP 0x8000 // TBD would need return values to be uint32#define CTR_TRANSITION_READ 0x8000 // TBD would need return values to be uint32#if (0 != HAVE_UPDATE)#define CTR_TRANSITION_UPDATE CTR_TRANSITION_PLAY#endif /* HAVE_UPDATE *///#if (0 != HAVE_SDC)#define SDC_MOUNT 0x20000 //originally USB_MOUNT#define SDC_UMOUNT 0x40000 //originally USB_UMOUNT//#endif /* HAVE_SDC */#define PREPARE_IOREAD(ev,dev,lba,stp,ofs,ssz,buf,cnt,flg) do { \ ev.command = CHILD_CMD_XFER_DATA; \ ev.did=dev; \ ev.command_params.xfer_params.sector_start=lba; \ ev.command_params.xfer_params.sector_stop=stp; \ ev.command_params.xfer_params.offset=ofs; \ ev.command_params.xfer_params.sector_size=ssz; \ ev.command_params.xfer_params.dest=buf; \ ev.command_params.xfer_params.count=cnt; \ ev.command_params.xfer_params.flags=flg; } while(0)#define COPY_CAP_CMD(dst,src) do { \ dst.command = CAP_CMD_XFER_DATA; \ dst.did=DEV_CD_ID; \ dst.command_params.xfer_params.sector_start=src.sector_start; \ dst.command_params.xfer_params.sector_stop=src.sector_stop; \ dst.command_params.xfer_params.end_mode = src.end_mode; \ dst.command_params.xfer_params.force_execution=src.force_execution; \ dst.command_params.xfer_params.Play_Mode = src.Play_Mode; \ dst.command_params.xfer_params.data_type=src.data_type; \ dst.command_params.xfer_params.dont_ignore_first_track_change=src.dont_ignore_first_track_change; \ dst.command_params.xfer_params.FB_mode=src.FB_mode; \ dst.command_params.xfer_params.update_process = src.update_process; \ dst.command_params.xfer_params.cur_TNO = src.cur_TNO; \ } while(0)#if 0 dst.command_params.xfer_params.offset=src.command_params.xfer_params.offset; \ dst.command_params.xfer_params.sector_size=src.command_params.xfer_params.sector_size; \ dst.command_params.xfer_params.dest=src.command_params.xfer_params.dest; \ dst.command_params.xfer_params.count=src.command_params.xfer_params.count; \ dst.command_params.xfer_params.flags=flg;#endif// internal run states of FSM data_acquisition#define CTR_GET_DATA_FSM_IDLE 0#define CTR_GET_DATA_FSM_WAIT_READ_READY 1#define CTR_GET_DATA_FSM_CHECK_FB 2#define CTR_GET_DATA_FSM_WAIT_FB 3#define CTR_GET_DATA_FSM_READ_CACHE 4#define CTR_GET_DATA_FSM_READ 5#define CTR_GET_DATA_FSM_WAIT 6#define CTR_GET_DATA_FSM_WAIT_DMA 7#define CTR_GET_DATA_FSM_WAIT_NEXT_SONG 8#define CTR_GET_DATA_FSM_SONG_TOO_SHORT 9#define CTR_GET_DATA_FSM_READ_CACHE_NEXT 10#define CTR_GET_DATA_FSM_WAIT_WAKE_UP 11// states of FSM tag decode#define CTR_TAG_FSM_BITRATE 0#define CTR_TAG_FSM_TAG 1#define CTR_TAG_FSM_WAIT 2// states of FSM mount FS#define CTR_MOUNT_FSM_WAIT_READ_READY 0#define CTR_MOUNT_FSM_IDLE 1#define CTR_MOUNT_FSM_WAIT_START 2#define CTR_MOUNT_FSM_CHECK_TOC 3#define CTR_MOUNT_FSM_WAIT_FOR_TOC 4#define CTR_MOUNT_FSM_WAIT_READ_READY_2 5#define CTR_MOUNT_FSM_WAIT_SPEED 6#define CTR_MOUNT_FSM_START_MOUNT 7#define CTR_MOUNT_FSM_WAIT_FOR_MOUNT 8// states of FSM init new disc#define CTR_INIT_DISC_FSM_WAIT_READ_READY 0#define CTR_INIT_DISC_FSM_IDLE 1#define CTR_INIT_DISC_FSM_WAIT_STOP 2#define CTR_INIT_DISC_FSM_WAIT_READ_READY_2 3#define CTR_INIT_DISC_FSM_INIT 4#define CTR_INIT_DISC_FSM_WAIT_INIT 5// states of FSM toc read#define CTR_TOC_FSM_WAIT_READ_READY 0#define CTR_TOC_FSM_IDLE 1#define CTR_TOC_FSM_WAIT_START 2#define CTR_TOC_FSM_READ_TOC 3#define CTR_TOC_FSM_READING 4#define CTR_TOC_FSM_WAIT_READ_READY_2 5#define CTR_TOC_FSM_SET_SPEED 6#define CTR_TOC_FSM_WAIT_SPEED 7// states of FSM CD_EXTENT#define CTR_CD_EXTENT_FSM_IDLE 0#define CTR_CD_EXTENT_FSM_WAIT_READ_READY_OR_ESP_NOT_FULL 1#define CTR_CD_EXTENT_FSM_WAIT_ESP 2#define CTR_CD_EXTENT_FSM_WAIT_EXTENT 3// states of FSM PLAY#define CTR_PLAY_FSM_IDLE 0#define CTR_PLAY_FSM_WAIT_STOP 1#define CTR_PLAY_FSM_SERVO_START 2#define CTR_PLAY_FSM_WAIT_START 3#define CTR_PLAY_FSM_UNKNOW_SONG 4#define CTR_PLAY_FSM_WAIT_OLD_SONG_FINISHED 5#define CTR_PLAY_FSM_SELECT_DEVICE 6#define CTR_PLAY_FSM_WAIT_FB_BUFFERED 7#define CTR_PLAY_FSM_WAIT_FOR_BITRATE 8#define CTR_PLAY_FSM_TAG 9#define CTR_PLAY_FSM_WAIT_FOR_TAG 10#define CTR_PLAY_FSM_FEED_DATA 11#define CTR_PLAY_FSM_WAIT_DEC_RESET 12#define CTR_PLAY_FSM_WAIT_READ_READY 13// states of FSM data for Decoder#define CTR_DATA_FSM_IDLE 0#define CTR_DATA_FSM_FEED_DATA 1#define CTR_DATA_FSM_WAIT_FOR_DATA 2#define CTR_DATA_FSM_START_NEW_SONG 3#define CTR_DATA_FSM_WAIT_START_NEW_SONG 4#define CTR_DATA_FSM_WAIT_FOR_DECODER_EOS 5#if (1 == HAVE_WMDRM)#define CTR_DATA_FSM_WAIT_FOR_CLOSE 6#endif// ESP FSM#define CTR_ESP_FSM_BITRATE 0#define CTR_ESP_FSM_WAIT_BITRATE 1#define CTR_ESP_FSM_ID3V1 2#define CTR_ESP_FSM_WAIT_ID3V1 3#define CTR_ESP_FSM_SONG 4// READ FSM#define CTR_READ_FSM_IDLE 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -