Esempio n. 1
0
//--------------------------------------------------------------------------------
void AVCLanHonda::checkWait()
//--------------------------------------------------------------------------------
{
  if ( isWait() && (getWaitTime() < millis()) ) {
    setWaitTime( 0L );
  }
}
Esempio n. 2
0
// process action
//--------------------------------------------------------------------------------
void AVCLanHonda::processAction( AvcActionID ActionID )
//--------------------------------------------------------------------------------
{
  if ( bFirstStart_20 ) {
    if ( (INIT2_TIME > millis()) && (ACT_CAM_ON == ActionID) ) {
      bShowRearCam = true;
      setHondaDisLast(false);
      bShowHondaDisp = true;
      bFirstStart_20 = false;
      setWaitTime(0L);
      return;
    }
    if ( INIT2_TIME < millis() ) bFirstStart_20 = false;
  }

  if ( bPrepareCamOff && (ACT_B_DISPOFF == ActionID) ) {
    ActionID = ACT_CAM_OFF;
  } else bPrepareCamOff = false;

  switch ( ActionID ) {
    case ACT_BUTTON_UP:
      {
        if ( !bShowRearCam || !isWait() )
        {
          if ( ULONG_MAX > (millis() + BUTT_WAIT) )
            setWaitTime( (unsigned long)((millis() + BUTT_WAIT)) );
          else setWaitTime( BUTT_WAIT );
        }
      }
      break;
    case ACT_CAM_ON:
      bShowRearCam = true;
      setHondaDisLast( isShowHondaDisp() );
      bShowHondaDisp = true;
      setWaitTime(0L);
      break;
    case ACT_B_DISPOFF:
    case ACT_B_DISPFULL_UP:
    case ACT_B_DISPHULF:
      if ( !bShowRearCam ) {
        // need freeze on 2000 sec after code receiving.
        bShowHondaDisp = false;
        setHondaDisLast( false );
        setWaitTime(0L);
        bFreeze = true;
        freezeTime = (millis() + FREEZE_TIME);
      }
      break;
    case ACT_CAM_OFF:
      bShowRearCam = false;
      bShowHondaDisp = bHondaDisLast;
      setWaitTime(0L);
      break;
    case ACT_PREP_CAMOFF:
      bPrepareCamOff = true;
      break;
  }
};
Esempio n. 3
0
void control( void )
{
	while (1)
	{
	 	if ( isWait() )
			waiting();	

		eleStat.dir = newDirection( eleStat.dir, eleStat.floor );

		if ( isStop( eleStat.dir, eleStat.floor ) )
			stop( eleStat.dir, eleStat.floor );


		showDir( eleStat.dir );

		if ( eleStat.dir != 0 && !isStop( eleStat.dir, eleStat.floor ) )
			move( eleStat.dir, &eleStat.floor );
	}			 
}
Esempio n. 4
0
void waiting( void )
{
	int waitTime = 0;
	eleStat.dir = 0;
	while ( isWait() )
	{
		//计时,等待超时则返回第一层
		if ( waitTime > maxWaitTime )
			if ( eleStat.floor != 1 )
			{
				eleStat.inRqst[1] = 1;
				break;
			}

		waitTime ++;
		fprintf( oPtr, "%-4d:Wait at Floor %d\n", Time, eleStat.floor );
		sprintf( msg, "%-4d:Wait at Floor %d\n", Time, eleStat.floor );
		drawInfo( msg );
		putClock( 1 );
	}
	return;
}
Esempio n. 5
0
/**
 * スレッドのメイン処理
 * @param diff 経過時間
 * @return スレッド実行終了なら true
 */
bool
Thread::_main(long diff)
{
	// スレッドとして動作できてない場合は即終了
	if (_status == THREAD_NONE) {
		return true;
	}

	if (_status == THREAD_LOADING_FILE) {
		// ファイル読み込み処理
		const char *dataAddr;
		int dataSize;
		if (sqobjCheckFile(_fileHandler, &dataAddr, &dataSize)) {
			_init();
			SQRESULT ret = sqstd_loadmemory(_thread, dataAddr, dataSize, _scriptName.getString(), SQTrue);
			sqobjCloseFile(_fileHandler);
			_fileHandler = NULL;
			if (SQ_SUCCEEDED(ret)) {
				_status = THREAD_RUN;
			} else {
				// exit相当
				printError();
				_exit();
				return true;
			}
		} else {
			// 読み込み完了待ち
			return false;
		}
	} else if (_status == THREAD_LOADING_FUNC) {
		// スクリプト読み込み処理
		_init();
		_func.push(_thread);
		_func.clear();
		_status = THREAD_RUN;
	}

	_currentTick += diff;
	
	// タイムアウト処理
	if (_waitTimeout >= 0) {
		_waitTimeout -= diff;
		if (_waitTimeout < 0) {
			_clearWait();
		}
	}
		
	// スレッド実行
	if (!isWait() && _status == THREAD_RUN) {
		SQRESULT result;
		if (sq_getvmstate(_thread) == SQ_VMSTATE_SUSPENDED) {
			_waitResult.push(_thread);
			_waitResult.clear();
			result = sq_wakeupvm(_thread, SQTrue, SQTrue, SQTrue, SQFalse);
		} else {
			sq_pushroottable(_thread);
			SQInteger n = _args.pushArray(_thread) + 1;
			_args.clear();
			result = sq_call(_thread, n, SQTrue, SQTrue);
		}
		if (SQ_FAILED(result)) {
			// スレッドがエラー終了
			printError();
			_exit();
		} else {
			// 終了コード取得。return/suspend の値が格納される
			_exitCode.getStack(_thread, -1);
			sq_pop(_thread, 1);
			if (sq_getvmstate(_thread) == SQ_VMSTATE_IDLE) {
				// スレッドが終了
				_exit();
			}
		}
	}
	
	return _status == THREAD_NONE;
}
Esempio n. 6
0
/**
 * @return 実行ステータス
 */
int
Thread::getStatus()
{
	return isWait() ? THREAD_WAIT : _status;
}