?? loader.c
字號:
else if ((DISC_SIZE_8CM == disc_size) && (SW_S_OUT_3 == SW_VALUE(ldr_switch_state))) { disc_size = DISC_SIZE_UNKNOWN; } } if (illegal_switch_detected == b_TRUE) { ldrSendEvent(LOADER_ERROR_SW_ILLEGAL); StartEjectTo(LOADER_S_EMERGENCY_EJECT, T5s); } else if (LOADER_S_INIT == LOADER_GSTATE(ldr_state)) // on init { // do nothing } else if (ldr_command == LC_INIT) { // on init command ldr_command = LC_NONE; ldrSetMotor(LOADER_DIR_IDLE); loader_switch_init(); start_timer(LOADER_TIMER, T1s); ldr_state = LOADER_S_INIT; } else if (ldr_command == LC_EM_EJECT) { // on emergency eject command ldr_command = LC_NONE; StartEjectTo(LOADER_S_EMERGENCY_EJECT, T5s); } else if ((LC_INSERT == ldr_command) // on insert command && ((0 != ALLOW_REVERSE_DIRECTION) || (LOADER_DIR_EJECT != ldr_motor_dir))) { if (LOADER_S_EMERGENCY_EJECT != ldr_state) { /* if em eject execute command when em eject is finished */ ldr_command = LC_NONE; if (LOADER_S_STOP_POSITION != LOADER_GSTATE(ldr_state)) { StartInsert_Tanashin(); } } } else if ((LC_EJECT == ldr_command) // on eject command && ((0 != ALLOW_REVERSE_DIRECTION) || (LOADER_DIR_INSERT != ldr_motor_dir))) { if (LOADER_S_EMERGENCY_EJECT != ldr_state) { /* if em eject execute command when em eject is finished */ ldr_command = LC_NONE; if (LOADER_S_EJECT_POSITION == LOADER_GSTATE(ldr_state)) { if (0 != HAVE_EJECT_REPOSITIONING) { if (LOADER_S_EJECT_POSITION_12CM == ldr_state) { StartInsertTo(LOADER_S_EJECT_REPOSITIONING_12CM, T1s); } else if (LOADER_S_EJECT_POSITION_8CM == ldr_state) { StartInsertTo(LOADER_S_EJECT_REPOSITIONING_8CM, T1s); } } } else { StartEject_Tanashin(); } } }}/******************************************************************************//* Function: ldrFSM_Tanashin *//* *//*! \brief Finite State Machine of Loader * (implementation for mechanisms: * M4_TANASHIN_TN2001_12CM, * M5_TANASHIN_TN2001_8CM, * M6_TANASHIN_TN2007_JVC, * M7_TANASHIN_TN2007_BP) * \param void * \return void * \remarks *//******************************************************************************/void ldrFSM_Tanashin(void){ switch (ldr_state) { case LOADER_S_IDLE: break; case LOADER_S_INIT: if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_ERROR_NO_DISC); ldr_state = LOADER_S_NO_CD_POSITION; } else if (SW_S_PLY_2 == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_INIT_STOP); ldr_state = LOADER_S_STOP_POSITION_12CM; } else if (SW_S_PL8_8 == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_INIT_STOP); ldr_state = LOADER_S_STOP_POSITION_8CM; } else if ((SW_S_INP_7 == SW_VALUE(ldr_switch_state)) || (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) || (SW_S_LOD_1 == SW_VALUE(ldr_switch_state))) { ldrSendEvent(LOADER_INIT_TRANSITION); ldr_state = LOADER_S_ERROR; } break; case LOADER_S_NO_CD_POSITION: if ((SW_S_INP_7 == SW_VALUE(ldr_switch_state)) || (SW_S_ULD_5 == SW_VALUE(ldr_switch_state))) { start_timer(LOADER_TIMER, T50ms); ldr_state = LOADER_S_INSERT_BY_USER; } break; case LOADER_S_INSERT_BY_USER: if (!timer_in_progress(LOADER_TIMER)) { StartInsert_Tanashin(); ldrSendEvent(LOADER_INSERT_BY_USER); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_NO_CD_POSITION; } break; case LOADER_S_INSERT_1: case LOADER_S_INSERT_4: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError((LOADER_S_INSERT_1 == ldr_state) ? LOADER_ERROR_INSERT_NO_GRIP : LOADER_ERROR_INSERT_REMOVED); } else if (SW_S_LOD_1 == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_2, T0ms); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { if (DISC_SIZE_12CM == disc_size) { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } else if ((!IS_TANASHIN_MECHANISM_8CM(mechanism_model)) || (REJECT_8CM_DISC)) { StartEjectTo(LOADER_S_EJECT_8CM_1, T3s5); ldrSendEvent(LOADER_ERROR_8CM); } else { StartInsertTo(LOADER_S_INSERT_5, T3s5); } } break; case LOADER_S_INSERT_2: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED); } else if (SW_S_PLY_2 == SW_VALUE(ldr_switch_state)) { ldrSetMotor(LOADER_DIR_EJECT); start_timer(LOADER_TIMER, T10ms); ldr_state = LOADER_S_INSERT_3; } else if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_4, T0ms); } break; case LOADER_S_INSERT_3: if (!timer_in_progress(LOADER_TIMER)) { IdleMode(READY, LOADER_S_STOP_POSITION_12CM); } break; case LOADER_S_INSERT_5: if (!timer_in_progress(LOADER_TIMER)) { if (DISC_SIZE_8CM_INTERNAL == disc_size) { ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED); } else { if (CONSERVATIVE_BEHAVIOR_TANASHIN) { StartEjectTo(LOADER_S_EJECT_8CM_1, T3s5); ldrSendEvent(LOADER_ERROR_INSERT_BLOCKED_8CM); } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } } else if (SW_S_PL8_8 == SW_VALUE(ldr_switch_state)) { ldrSetMotor(LOADER_DIR_EJECT); start_timer(LOADER_TIMER, T10ms); ldr_state = LOADER_S_INSERT_6; } else if ((SW_S_INP_7 == SW_VALUE(ldr_switch_state)) || (SW_S_ULD_5 == SW_VALUE(ldr_switch_state))) { if ((DISC_SIZE_8CM == disc_size) || (DISC_SIZE_8CM_INTERNAL == disc_size)) { StartInsertTo(LOADER_S_INSERT_4, T0ms); } else { StartInsertTo(LOADER_S_INSERT_1, T6s); ldrSendEvent(LOADER_INSERT_BY_USER); } } break; case LOADER_S_INSERT_6: if (!timer_in_progress(LOADER_TIMER)) { IdleMode(READY, LOADER_S_STOP_POSITION_8CM); } break; case LOADER_S_STOP_POSITION_12CM: case LOADER_S_STOP_POSITION_8CM: break; case LOADER_S_EJECT_12CM_1: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { ldrSetMotor(LOADER_DIR_INSERT); start_timer(LOADER_TIMER, T16ms); ldr_state = LOADER_S_EJECT_12CM_2; } break; case LOADER_S_EJECT_12CM_2: if (!timer_in_progress(LOADER_TIMER)) { IdleMode(READY, LOADER_S_EJECT_POSITION_12CM); } break; case LOADER_S_EJECT_POSITION_12CM: if (SW_S_LOD_1 == SW_VALUE(ldr_switch_state)) { start_timer(LOADER_TIMER, T200ms); ldr_state = LOADER_S_PUSHBACK_12CM; } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } break; case LOADER_S_PUSHBACK_12CM: if (!timer_in_progress(LOADER_TIMER)) { StartInsertTo(LOADER_S_INSERT_2, T3s5); ldrSendEvent(LOADER_INSERT_BY_PUSHBACK); } else if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_EJECT_POSITION_12CM; } break; case LOADER_S_EJECT_8CM_1: if (!timer_in_progress(LOADER_TIMER)) { if (DISC_SIZE_8CM_INTERNAL == disc_size) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if (SW_S_INP_7 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_EJECT_8CM_2; } break; case LOADER_S_EJECT_8CM_2: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_EJECT_8CM_1; } else if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_EJECT_8CM_3; } break; case LOADER_S_EJECT_8CM_3: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else if (SW_S_LOD_1 == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_1, T6s); ldrSendEvent(LOADER_INSERT_BY_USER); } else if (SW_S_INP_7 == SW_VALUE(ldr_switch_state)) { ldrSetMotor(LOADER_DIR_INSERT); start_timer(LOADER_TIMER, T16ms); ldr_state = LOADER_S_EJECT_8CM_4; } break; case LOADER_S_EJECT_8CM_4: if (!timer_in_progress(LOADER_TIMER)) { if (DISC_SIZE_UNKNOWN == disc_size) { disc_size = DISC_SIZE_8CM; } IdleMode(READY, LOADER_S_EJECT_POSITION_8CM); } break; case LOADER_S_EJECT_POSITION_8CM: if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { start_timer(LOADER_TIMER, T35ms); ldr_state = LOADER_S_PUSHBACK_8CM; } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } break; case LOADER_S_PUSHBACK_8CM: if (!timer_in_progress(LOADER_TIMER)) { StartInsertTo(LOADER_S_INSERT_4, T3s5); ldrSendEvent(LOADER_INSERT_BY_PUSHBACK); } else if (SW_S_INP_7 == SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_EJECT_POSITION_8CM; } break; case LOADER_S_EJECT_REPOSITIONING_12CM: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_REPOSITIONING); } else if (SW_S_LOD_1 == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_12CM_1, T1s); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } break; case LOADER_S_EJECT_REPOSITIONING_8CM: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_REPOSITIONING); } else if (SW_S_ULD_5 == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_8CM_3, T1s); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); } break; case LOADER_S_EJECT_REPOSITIONING_UNKNOWN: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_REPOSITIONING); } else if (SW_S_LOD_1 == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_12CM_1, T1s); } else if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); } break; case LOADER_S_EMERGENCY_EJECT: if (!timer_in_progress(LOADER_TIMER)) { if (SW_S_OUT_3 == SW_VALUE(ldr_switch_state)) { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } else { if ((SW_S_PLY_2 == SW_VALUE(ldr_switch_state)) || (SW_S_LOD_1 == SW_VALUE(ldr_switch_state))) { disc_size = DISC_SIZE_12CM; } else if (SW_S_PL8_8 == SW_VALUE(ldr_switch_state)) { disc_size = DISC_SIZE_8CM_INTERNAL; } else { disc_size = DISC_SIZE_UNKNOWN; } ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -