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

📄 loader.c

📁 本程序为ST公司开发的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    }    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 + -