📄 loader.c
字号:
} else if ((DISC_SIZE_UNKNOWN == disc_size) && ((SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) || (SW_S_000_STOP == SW_VALUE(ldr_switch_state)))) { disc_size = DISC_SIZE_12CM; } else if (((DISC_SIZE_UNKNOWN == disc_size) && (SW_S_111_8CM == SW_VALUE(ldr_switch_state))) || ((DISC_SIZE_8CM_SUSPICIOUS == disc_size) && ((SW_S_111_8CM == SW_VALUE(ldr_switch_state)) || ((SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) && (SW_S_011_NOCD == SW_VALUE(previous_ldr_switch_state))))) || (((DISC_SIZE_8CM_SUSPICIOUS == disc_size) || (DISC_SIZE_UNKNOWN == disc_size)) && ((SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) && (SW_S_110_EJECT == SW_VALUE(previous_ldr_switch_state))))) { disc_size = DISC_SIZE_8CM; } } 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_1; } 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) || ((LOADER_S_EJECT_8CM_1 == ldr_state) && (DISC_SIZE_8CM_SUSPICIOUS == disc_size)))) { if (LOADER_S_EMERGENCY_EJECT != ldr_state) { /* if em eject execute command when em eject is finished */ ldr_command = LC_NONE; if ((LOADER_S_NO_CD_POSITION == ldr_state) || (LOADER_S_NOCD_INSERTING == ldr_state) || (LOADER_S_NOCD_EJECTING == ldr_state) || ((LOADER_S_EJECT_8CM_1 == ldr_state) && (DISC_SIZE_8CM_SUSPICIOUS == disc_size))) { if (0 != CONSERVATIVE_BEHAVIOR_SHINWA_CDC02) { if (LOADER_S_EJECT_8CM_1 != ldr_state) { StartEjectTo(LOADER_S_EJECT_8CM_SUSPICIOUS, T1s); ldrSendEvent(LOADER_ERROR_8CM); } } else if (0 != START_INSERT_ACTION_IN_NO_CD_POSITION) { if (LOADER_S_NOCD_INSERTING != ldr_state) { StartInsertTo(LOADER_S_NOCD_INSERTING, T2s); } } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if (LOADER_S_STOP_POSITION != LOADER_GSTATE(ldr_state)) { StartInsert_Shinwa_CDC02(); } } } else if ((LC_EJECT == ldr_command) // on eject command && ((0 != ALLOW_REVERSE_DIRECTION) || ((LOADER_DIR_INSERT != ldr_motor_dir) && (LOADER_S_INSERT_REPOSITIONING != ldr_state)))) { if (LOADER_S_EMERGENCY_EJECT != ldr_state) { /* if em eject execute command when em eject is finished */ ldr_command = LC_NONE; if ((LOADER_S_NO_CD_POSITION == ldr_state) || (LOADER_S_NOCD_INSERTING == ldr_state) || (LOADER_S_NOCD_EJECTING == ldr_state) || ((LOADER_S_EJECT_8CM_1 == ldr_state) && (DISC_SIZE_8CM_SUSPICIOUS == disc_size))) { if (0 != CONSERVATIVE_BEHAVIOR_SHINWA_CDC02) { if (LOADER_S_EJECT_8CM_1 != ldr_state) { StartEjectTo(LOADER_S_EJECT_8CM_SUSPICIOUS, T1s); } } else if (0 != START_EJECT_ACTION_IN_NO_CD_POSITION) { if (LOADER_S_NOCD_EJECTING != ldr_state) { StartEjectTo(LOADER_S_NOCD_EJECTING, T2s); } } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if (LOADER_S_EJECT_POSITION == LOADER_GSTATE(ldr_state)) { if ((LOADER_S_EJECT_POSITION == ldr_state) && (0 != HAVE_EJECT_REPOSITIONING)) { StartInsertTo(LOADER_S_EJECT_REPOSITIONING, T1s); } } else { StartEject_Shinwa_CDC02(); } } }}/******************************************************************************//* Function: ldrFSM_Shinwa_CDC02 *//* *//*! \brief Finite State Machine of Loader * (implementation for mechanism: M0_SHINWA_CDC02) * \param void * \return void * \remarks *//******************************************************************************/void ldrFSM_Shinwa_CDC02(void){ switch (ldr_state) { case LOADER_S_IDLE: break; case LOADER_S_INIT_1: if (!timer_in_progress(LOADER_TIMER)) { ldrSendEvent(LOADER_ERROR_SW_ILLEGAL); StartEjectTo(LOADER_S_EMERGENCY_EJECT, T5s); } else if (SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_INIT_2, T30ms); } else if (SW_INVALID_VAL != SW_VALUE(ldr_switch_state)) { ldr_state = LOADER_S_INIT_3; } break; case LOADER_S_INIT_2: if (!timer_in_progress(LOADER_TIMER)) { ldrSetMotor(LOADER_DIR_IDLE); ldr_state = LOADER_S_INIT_3; } break; case LOADER_S_INIT_3: if (SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_ERROR_NO_DISC); ldr_state = LOADER_S_NO_CD_POSITION; } else if (SW_S_000_STOP == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_INIT_STOP); ldr_state = LOADER_S_STOP_POSITION; } else if (SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_INIT_TRANSITION); ldr_state = LOADER_S_ERROR; } else if ((SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) || (SW_S_110_EJECT == SW_VALUE(ldr_switch_state))) { ldrSendEvent(LOADER_INIT_EJECT); ldr_state = LOADER_S_EJECT_POSITION; } else if (SW_S_111_8CM == SW_VALUE(ldr_switch_state)) { StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); ldrSendEvent(LOADER_INIT_8CM); } break; case LOADER_S_NO_CD_POSITION: if (SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_1, T5s); ldrSendEvent(LOADER_INSERT_BY_USER); } break; case LOADER_S_INSERT_1: case LOADER_S_INSERT_7: 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_110_EJECT == SW_VALUE(ldr_switch_state)) { StartInsertTo((LOADER_S_INSERT_1 == ldr_state) ? LOADER_S_INSERT_2 : LOADER_S_INSERT_8, T0ms); } else if (SW_S_000_STOP == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_3, (LOADER_S_INSERT_1 == ldr_state) ? T3s5 : T0ms); } else if (SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_4, (LOADER_S_INSERT_1 == ldr_state) ? T3s5 : T0ms); } else if (SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) { if ((0 != CONSERVATIVE_BEHAVIOR_SHINWA_CDC02) && (DISC_SIZE_12CM != disc_size)) { ldrSendEvent(LOADER_ERROR_8CM); StartEjectTo(LOADER_S_EJECT_8CM_SUSPICIOUS, T1s); } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if (SW_S_111_8CM == SW_VALUE(ldr_switch_state)) { ldrSendEvent(LOADER_ERROR_8CM); StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); } break; case LOADER_S_INSERT_2: case LOADER_S_INSERT_8: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError((LOADER_S_INSERT_2 == ldr_state) ? LOADER_ERROR_INSERT_NO_GRIP : LOADER_ERROR_INSERT_REMOVED); } else if (SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) { StartInsertTo((LOADER_S_INSERT_2 == ldr_state) ? LOADER_S_INSERT_1 : LOADER_S_INSERT_7, T0ms); } else if (SW_S_000_STOP == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_3, (LOADER_S_INSERT_2 == ldr_state) ? T3s5 : T0ms); } else if (SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_4, (LOADER_S_INSERT_2 == ldr_state) ? T3s5 : T0ms); } else if ((SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) || (SW_S_111_8CM == SW_VALUE(ldr_switch_state))) { ldrSendEvent(LOADER_ERROR_8CM); StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); } break; case LOADER_S_INSERT_3: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED); } else if (SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_7, T0ms); } else if (SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_8, T0ms); } else if (SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_4, T0ms); } break; case LOADER_S_INSERT_4: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED); } else if (SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_7, T0ms); } else if (SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_8, T0ms); } else if (SW_S_000_STOP == SW_VALUE(ldr_switch_state)) { start_timer(LOADER_TIMER, T0ms); ldr_state = LOADER_S_INSERT_5; } break; case LOADER_S_INSERT_5: if (!timer_in_progress(LOADER_TIMER)) { ldrSetMotor(LOADER_DIR_EJECT); start_timer(LOADER_TIMER, T2ms); ldr_state = LOADER_S_INSERT_6; } break; case LOADER_S_INSERT_6: if (!timer_in_progress(LOADER_TIMER)) { IdleMode(READY, LOADER_S_STOP_POSITION); } break; case LOADER_S_STOP_POSITION: if (SW_S_000_STOP != SW_VALUE(ldr_switch_state)) { ldrPrepareError(LOADER_IMPROPER_STOP); } break; case LOADER_S_INSERT_REPOSITIONING: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED); } else if (SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_7, T3s5); } else if (SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_8, T3s5); } else if (SW_S_100_TRANSITION == SW_VALUE(ldr_switch_state)) { StartInsertTo(LOADER_S_INSERT_4, T3s5); } break; case LOADER_S_EJECT_12CM_1: if (!timer_in_progress(LOADER_TIMER)) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else if ((SW_S_010_INSERT == SW_VALUE(ldr_switch_state)) || (SW_S_110_EJECT == SW_VALUE(ldr_switch_state))) { ldrSetMotor(LOADER_DIR_INSERT); start_timer(LOADER_TIMER, T14ms); 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); } break; case LOADER_S_EJECT_8CM_1: if (!timer_in_progress(LOADER_TIMER)) { if (DISC_SIZE_8CM == disc_size) { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if ((SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) || (SW_S_010_INSERT == SW_VALUE(ldr_switch_state))) { if (0 != CNF_EJECT_TIME_8CM_SHINWA_CDC02) { start_timer(LOADER_TIMER, CNF_EJECT_TIME_8CM_SHINWA_CDC02); ldr_state = LOADER_S_EJECT_8CM_2; } else { ldrSetMotor(LOADER_DIR_INSERT); start_timer(LOADER_TIMER, T14ms); ldr_state = LOADER_S_EJECT_8CM_3; } } break; case LOADER_S_EJECT_8CM_2: if ((SW_S_111_8CM == SW_VALUE(ldr_switch_state)) || ((SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) && (SW_S_110_EJECT == SW_VALUE(previous_ldr_switch_state)))) { StartEjectTo(LOADER_S_EJECT_8CM_1, T1s); } else if (SW_S_011_NOCD == SW_VALUE(ldr_switch_state)) { if (0 != CONSERVATIVE_BEHAVIOR_SHINWA_CDC02) { StartEjectTo(LOADER_S_EJECT_8CM_SUSPICIOUS, T1s); } else { IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION); } } else if (!timer_in_progress(LOADER_TIMER)) { if ((SW_S_110_EJECT == SW_VALUE(ldr_switch_state)) || (SW_S_010_INSERT == SW_VALUE(ldr_switch_state))) { ldrSetMotor(LOADER_DIR_INSERT); start_timer(LOADER_TIMER, T14ms); ldr_state = LOADER_S_EJECT_8CM_3; } else { ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED); } } break; case LOADER_S_EJECT_8CM_3: if (!timer_in_progress(LOADER_TIMER))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -