using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AGVControl
{
    /// <summary>
    /// 실제 AGV컨트롤러의 STS값에는 F,B의 값이 들어있고
    /// 아래 항목은 해당 문자의 ASCII코드값이다 첫자를 byte로 변경하고 변환하면 된다
    /// </summary>
    public enum AgvDir : byte
    {
        Forward = 0x46,
        Backward = 0x42,
    }

    public enum AGVMoveState
    {
        Stop = 0,
        Run
    }

    /// <summary>
    /// 실제 AGV컨트롤러의 STS값에는 H,L,M,S의 값이 들어있고
    /// 아래 항목은 해당 문자의 ASCII코드값이다 첫자를 byte로 변경하고 변환하면 된다
    /// </summary>
    public enum AgvSpeed : byte
    {
        High = 0x48,
        Middle = 0x4D,
        Low = 0x4C,
        MarkStop = 0x53,
    }

    /// <summary>
    /// STS : S,L,R
    /// </summary>
    public enum AgvSts : byte
    {
        Straight = 0x53,
        Left = 0x4c,
        Right = 0x052,
    }

    public enum AGVActionReasonCode
    {
        Unknown = 0,
        NoPosition,     // 위치 미확정(처음 기동)
        NoPath,         // 경로 없음 또는 현재 위치 미확정
        NotOnPath,      // 현재 위치가 경로에 없음
        Arrived,        // 경로의 마지막 지점(목적지 도달)
        Normal,          // 정상(다음 RFID 있음)

        /// <summary>
        /// 방향전환을 위한 턴이다
        /// </summary>
        NeedTurnMove,

        /// <summary>
        /// 지정된 RFID위치에서 TURN이 요청되었다
        /// </summary>
        NeedTurnPoint,
        NoTurnPoint,
        PathCalcError,
        NoDirection,
        MoveForTurn,
        busy,
        WaitForMarkStop,
    }
}