⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loader.c

📁 本程序为ST公司开发的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
      ldrPrepareError((LOADER_S_INSERT_1 == ldr_state) ? LOADER_ERROR_INSERT_NO_GRIP : LOADER_ERROR_INSERT_REMOVED);    }    else if (SW_S_111_TRANSITION == SW_VALUE(ldr_switch_state))    {      StartInsertTo(LOADER_S_INSERT_2, (LOADER_S_INSERT_1 == ldr_state) ? T3s5 : T0ms);    }    else if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    break;      case LOADER_S_INSERT_2:    if (!timer_in_progress(LOADER_TIMER))    {      ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED);    }    else if (SW_S_011_STOP == SW_VALUE(ldr_switch_state))    {      start_timer(LOADER_TIMER, T180ms);      ldr_state = LOADER_S_INSERT_3;    }    else if (SW_S_101_INSERT_EJECT == SW_VALUE(ldr_switch_state))    {      StartInsertTo(LOADER_S_INSERT_5, T0ms);    }    else if (SW_S_110_8CM == SW_VALUE(ldr_switch_state))    {      ldrSendEvent(LOADER_ERROR_8CM);      StartEjectTo(LOADER_S_EJECT_8CM_1, T1s);    }    break;      case LOADER_S_INSERT_3:    if (SW_S_011_STOP != SW_VALUE(ldr_switch_state))    {      ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED);    }    else if (!timer_in_progress(LOADER_TIMER))    {      ldrSetMotor(LOADER_DIR_IDLE);      start_timer(LOADER_TIMER, T30ms);      ldr_state = LOADER_S_INSERT_4;    }    break;  case LOADER_S_INSERT_4:    if (SW_S_011_STOP != SW_VALUE(ldr_switch_state))    {      ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED);    }    else if (!timer_in_progress(LOADER_TIMER))    {      IdleMode(READY, LOADER_S_STOP_POSITION);    }       break;  case LOADER_S_STOP_POSITION:    break;  case LOADER_S_INSERT_REPOSITIONING:    if (!timer_in_progress(LOADER_TIMER))    {      ldrPrepareError(LOADER_ERROR_INSERT_BLOCKED);    }    else if (SW_S_111_TRANSITION == SW_VALUE(ldr_switch_state))    {      StartInsertTo(LOADER_S_INSERT_2, T1s);    }    break;  case LOADER_S_EJECT_12CM_1:    if (!timer_in_progress(LOADER_TIMER))    {      ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED);    }    else if (SW_S_101_INSERT_EJECT == SW_VALUE(ldr_switch_state))    {      ldrSetMotor(LOADER_DIR_INSERT);      start_timer(LOADER_TIMER, T10ms);      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))    {      ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED);    }    else if (SW_S_101_INSERT_EJECT == SW_VALUE(ldr_switch_state))    {      if (0 != CNF_EJECT_TIME_8CM_SHINWA_CLC01)      {        start_timer(LOADER_TIMER, CNF_EJECT_TIME_8CM_SHINWA_CLC01);        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_110_8CM == SW_VALUE(ldr_switch_state))    {      StartEjectTo(LOADER_S_EJECT_8CM_1, T1s);    }    else if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    else if (!timer_in_progress(LOADER_TIMER))    {      if (SW_S_101_INSERT_EJECT == 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))    {      IdleMode(READY, LOADER_S_EJECT_POSITION);    }    break;  case LOADER_S_EJECT_POSITION:    if (SW_S_111_TRANSITION == SW_VALUE(ldr_switch_state))    {      StartInsertTo(LOADER_S_INSERT_2, T3s5);      ldrSendEvent(LOADER_INSERT_BY_PUSHBACK);    }    else if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    break;  case LOADER_S_EJECT_REPOSITIONING:    if (!timer_in_progress(LOADER_TIMER))    {      ldrPrepareError(LOADER_ERROR_EJECT_REPOSITIONING);    }    else if (SW_S_111_TRANSITION == SW_VALUE(ldr_switch_state))    {      if (DISC_SIZE_8CM == disc_size)      {        StartEjectTo(LOADER_S_EJECT_8CM_1, T1s);      }      else      {        StartEjectTo(LOADER_S_EJECT_12CM_1, T1s);      }    }    else if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    break;  case LOADER_S_EMERGENCY_EJECT:    if (!timer_in_progress(LOADER_TIMER))    {      if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))      {        IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);      }      else      {        if (SW_S_011_STOP == SW_VALUE(ldr_switch_state))        {          disc_size = DISC_SIZE_12CM;        }        else if (SW_S_110_8CM == SW_VALUE(ldr_switch_state))        {          disc_size = DISC_SIZE_8CM;        }        else        {          disc_size = DISC_SIZE_UNKNOWN;        }        ldrPrepareError(LOADER_ERROR_EJECT_BLOCKED);      }    }    break;  case LOADER_S_NOCD_INSERTING:  case LOADER_S_NOCD_EJECTING:    if (SW_S_101_INSERT_EJECT == SW_VALUE(ldr_switch_state))    {      StartInsertTo(LOADER_S_INSERT_1, T5s);      ldrSendEvent(LOADER_INSERT_BY_USER);    }    else if (!timer_in_progress(LOADER_TIMER))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    break;  //case LOADER_S_ERROR:  default:    if (SW_S_100_NOCD == SW_VALUE(ldr_switch_state))    {      IdleMode(LOADER_ERROR_NO_DISC, LOADER_S_NO_CD_POSITION);    }    break;  }  previous_ldr_switch_state = ldr_switch_state;}/******************************************************************************//******************************************************************************//*****************************************************************************//*                                                                           *//*                           M4_TANASHIN_TN2001_12CM                         *//*                           M5_TANASHIN_TN2001_8CM                          *//*                           M6_TANASHIN_TN2007_JVC                          *//*                           M7_TANASHIN_TN2007_BP                           *//*                                                                           *//*****************************************************************************//******************************************************************************//* Function:  StartInsert_Tanashin                                            *//*                                                                            *//*! \brief    Start disc insertion according to current position *            (implementation for mechanisms: *            M4_TANASHIN_TN2001_12CM, *            M5_TANASHIN_TN2001_8CM, *            M6_TANASHIN_TN2007_JVC, *            M7_TANASHIN_TN2007_BP) *  \param    void *  \return   void *  \remark *//******************************************************************************/void StartInsert_Tanashin(void){  switch (SW_VALUE(ldr_switch_state))  {  case SW_S_PLY_2:    IdleMode(READY, LOADER_S_STOP_POSITION_12CM);    break;  case SW_S_PL8_8:    IdleMode(READY, LOADER_S_STOP_POSITION_8CM);    break;  case SW_S_INP_7:  case SW_S_ULD_5:    if (DISC_SIZE_8CM_INTERNAL == disc_size)    {      StartInsertTo(LOADER_S_INSERT_4, T3s5);    }    else    {      StartInsertTo(LOADER_S_INSERT_1, T6s);    }    break;  case SW_S_LOD_1:    StartInsertTo(LOADER_S_INSERT_4, T3s5);    break;  case SW_S_OUT_3:    StartInsertTo(LOADER_S_INSERT_5, T3s5);    break;  //SW_S_ILL_4:  //SW_S_ILL_6:  default:    ldrSendEvent(LOADER_ERROR_SW_ILLEGAL);    StartEjectTo(LOADER_S_EMERGENCY_EJECT, T5s);    break;  }}/******************************************************************************//* Function:  StartEject_Tanashin                                             *//*                                                                            *//*! \brief    Start disc ejection according to current position *            (implementation for mechanisms: *            M4_TANASHIN_TN2001_12CM, *            M5_TANASHIN_TN2001_8CM, *            M6_TANASHIN_TN2007_JVC, *            M7_TANASHIN_TN2007_BP) *  \param    void *  \return   void *  \remark *//******************************************************************************/void StartEject_Tanashin(void){  switch (SW_VALUE(ldr_switch_state))  {  case SW_S_PLY_2:  case SW_S_LOD_1:    StartEjectTo(LOADER_S_EJECT_12CM_1, T5s);    break;  case SW_S_ULD_5:    if (DISC_SIZE_UNKNOWN == disc_size)    {      StartInsertTo(LOADER_S_EJECT_REPOSITIONING_UNKNOWN, T1s);    }    else if (DISC_SIZE_12CM == disc_size)    {      StartInsertTo(LOADER_S_EJECT_REPOSITIONING_12CM, T1s);    }    else    {      StartEjectTo(LOADER_S_EJECT_8CM_3, T1s);    }    break;     case SW_S_INP_7:    if (DISC_SIZE_UNKNOWN == disc_size)    {      StartInsertTo(LOADER_S_EJECT_REPOSITIONING_UNKNOWN, T1s);    }    else if (DISC_SIZE_12CM == disc_size)    {      StartInsertTo(LOADER_S_EJECT_REPOSITIONING_12CM, T1s);    }    else if (DISC_SIZE_8CM == disc_size)    {      StartInsertTo(LOADER_S_EJECT_REPOSITIONING_8CM, T1s);    }    else    {      StartEjectTo(LOADER_S_EJECT_8CM_2, T1s);    }    break;  case SW_S_OUT_3:  case SW_S_PL8_8:    StartEjectTo(LOADER_S_EJECT_8CM_1, (DISC_SIZE_8CM_INTERNAL == disc_size) ? T5s : T3s5);    break;  //SW_S_ILL_4:  //SW_S_ILL_6:  default:    ldrSendEvent(LOADER_ERROR_SW_ILLEGAL);    StartEjectTo(LOADER_S_EMERGENCY_EJECT, T5s);    break;  }}/******************************************************************************//* Function:  ldrCommandEval_Tanashin                                         *//*                                                                            *//*! \brief    Start actions for a new Loader Command *            (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 ldrCommandEval_Tanashin(void){  t_bool illegal_switch_detected = b_FALSE;  if ((SW_VALUE(ldr_switch_state) != SW_VALUE(previous_ldr_switch_state))   && (LOADER_S_STOP_POSITION_12CM != ldr_state)   && (LOADER_S_STOP_POSITION_8CM != ldr_state)   && (LOADER_S_EMERGENCY_EJECT != ldr_state))  {    if ((SW_INVALID_VAL != SW_VALUE(previous_ldr_switch_state))     && ((SW_S_ILL_4 == SW_VALUE(ldr_switch_state))      || (SW_S_ILL_6 == SW_VALUE(ldr_switch_state))      || ((DISC_SIZE_UNKNOWN == disc_size)       && ((SW_S_PLY_2 == SW_VALUE(ldr_switch_state))        || ((SW_S_LOD_1 == SW_VALUE(ldr_switch_state))         && (SW_S_ULD_5 != SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_PL8_8 == SW_VALUE(ldr_switch_state))         && (SW_S_OUT_3 != SW_VALUE(previous_ldr_switch_state)))))      || ((DISC_SIZE_12CM == disc_size)       && ((SW_S_PL8_8 == SW_VALUE(ldr_switch_state))        || (((SW_S_OUT_3 == SW_VALUE(ldr_switch_state))          || (SW_S_INP_7 == SW_VALUE(ldr_switch_state)))         && ((SW_S_LOD_1 == SW_VALUE(previous_ldr_switch_state))          || (SW_S_PLY_2 == SW_VALUE(previous_ldr_switch_state))))        || ((SW_S_ULD_5 == SW_VALUE(ldr_switch_state))         && (SW_S_PLY_2 == SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_LOD_1 == SW_VALUE(ldr_switch_state))         && (SW_S_INP_7 == SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_PLY_2 == SW_VALUE(ldr_switch_state))         && (SW_S_LOD_1 != SW_VALUE(previous_ldr_switch_state)))))      || (((DISC_SIZE_8CM == disc_size)        || (DISC_SIZE_8CM_INTERNAL == disc_size))       && ((SW_S_LOD_1 == SW_VALUE(ldr_switch_state))        || (SW_S_PLY_2 == SW_VALUE(ldr_switch_state))        || ((SW_S_OUT_3 == SW_VALUE(ldr_switch_state))         && (SW_S_ULD_5 == SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_INP_7 == SW_VALUE(ldr_switch_state))         && (SW_S_PL8_8 == SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_ULD_5 == SW_VALUE(ldr_switch_state))         && (SW_S_INP_7 != SW_VALUE(previous_ldr_switch_state)))        || ((SW_S_PL8_8 == SW_VALUE(ldr_switch_state))         && (SW_S_OUT_3 != SW_VALUE(previous_ldr_switch_state)))))))    {      // on illegal SW state      illegal_switch_detected = b_TRUE;    }    else if ((DISC_SIZE_UNKNOWN == disc_size)          && ((SW_S_LOD_1 == SW_VALUE(ldr_switch_state))           || (SW_S_PLY_2 == SW_VALUE(ldr_switch_state))))    {      disc_size = DISC_SIZE_12CM;    }    else if ((DISC_SIZE_UNKNOWN == disc_size)          && (SW_S_PL8_8 == SW_VALUE(ldr_switch_state)))    {      disc_size = DISC_SIZE_8CM_INTERNAL;    }    else if ((DISC_SIZE_8CM_INTERNAL == disc_size)          && (SW_S_INP_7 == SW_VALUE(ldr_switch_state))          && (SW_S_ULD_5 == SW_VALUE(previous_ldr_switch_state)))    {      disc_size = DISC_SIZE_8CM;    }

⌨️ 快捷键说明

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