/*
 * Time_Interval.c
 *
 *  Created on: 2024/09/30
 *      Author: egaono-electronics
 */

#include "Time_Interval.h"



//----------------------------------------------------------
// 時間待ち : 単位 mSec
//----------------------------------------------------------
// 戻り値が -1 以外になるまで、繰り返し呼び出してください。
//----------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

// struct sParam_Time_Interval *pstructParam_Time_Interval :
//              Time_Interval用パラメータの構造体のポインタ


// 戻り値:
//   -1 : 処理中 : 時間が経過していない。
//    0 : OK終了 : 時間が経過した。
//    1 : NG終了
//----------------------------------------------------------
int16_t Time_Interval(uint8_t *puint8_JobNum,
        struct sParam_Time_Interval *pstructParam_Time_Interval)
{
  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    pstructParam_Time_Interval->uint32_tikstart = HAL_GetTick();
                        // 時間待ち開始時のカウント数を取得


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //------------------------------------------------------
    // 時間経過待ち
    //------------------------------------------------------
    // カウント数を監視して
    //              指定された時間が経過したかを判定する。
    if((HAL_GetTick() - pstructParam_Time_Interval->uint32_tikstart)
        <= pstructParam_Time_Interval->uint32_Interval){
      // 時間が経過していない。
      int16_Return = -1;  // 処理継続
      break;  // 処理番号維持 : 現在の処理番号をループ
    }


    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 0;    // OK終了 : 時間経過
    break;

  default:
    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 1;    // NG終了
    break;
  }

  return(int16_Return);
}
