Beispiel #1
0
        public bool Save()
        {
            if (bActive)
            {
                setLocked(false);
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                NewRequest        = new cTexNET.cMessage();
                NewRequest.Msg    = new byte[1];
                NewRequest.Msg[0] = cMTDOpcodes.OPC_SAVE;
                NewRequest.Opcode = cMTDOpcodes.OPC_SAVE;
                NewRequest.Length = (byte)NewRequest.Msg.Length;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                setLocked(true);
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus == eRequestStatus.eSUCCESS)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #2
0
        public bool getI2CAddress(out byte Address)
        {
            if (bActive)
            {
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }
                NewRequest     = new cTexNET.cMessage();
                NewRequest.Msg = new byte[1];

                NewRequest.Opcode = cMTDOpcodes.OPC_GET_I2C_ADDRESS;
                NewRequest.Length = (byte)NewRequest.Msg.Length;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;

                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus != eRequestStatus.eSUCCESS)
                {
                    Address = 0;
                    return(false);
                }

                Address = (byte)NewRequest.Msg[0];
                return(true);
            }

            Address = 0;
            return(false);
        }
Beispiel #3
0
        public bool getVersion(out string version)
        {
            if (bActive)
            {
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }
                NewRequest     = new cTexNET.cMessage();
                NewRequest.Msg = new byte[1];

                NewRequest.Opcode = cMTDOpcodes.OPC_GET_VERSION;
                NewRequest.Length = (byte)NewRequest.Msg.Length;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;

                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus != eRequestStatus.eSUCCESS)
                {
                    version = "";
                    return(false);
                }

                version = Encoding.ASCII.GetString(NewRequest.Msg, 0, 10);

                return(true);
            }

            version = "";
            return(false);
        }
Beispiel #4
0
        public bool getSerialNumber(out string SerialNumber)
        {
            if (bActive)
            {
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }
                NewRequest     = new cTexNET.cMessage();
                NewRequest.Msg = new byte[1];

                NewRequest.Opcode = cMTDOpcodes.OPC_GET_SERIAL_NUMBER;
                NewRequest.Length = (byte)NewRequest.Msg.Length;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;

                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus != eRequestStatus.eSUCCESS)
                {
                    SerialNumber = "";
                    return(false);
                }

                SerialNumber = Encoding.ASCII.GetString(NewRequest.Msg, 0, 10);

                return(true);
            }

            SerialNumber = "";
            return(false);
        }
Beispiel #5
0
 public cFlowTEX()
 {
     TheSerialPort = new SerialPort();
     RequestMState = eRequestMState.eFLOW;
     bActive       = false;
     RequestStatus = eRequestStatus.eSTANDBY;
     SerialMode    = eSerialMode.eCLOSED;
     flow          = 0;
     temperature   = 0;
 }
Beispiel #6
0
        public bool setLocked(bool Locked)
        {
            if (bActive)
            {
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                NewRequest = new cTexNET.cMessage();


                byte[] lockMsg;
                int    len;

                if (Locked)
                {
                    lockMsg = Encoding.Default.GetBytes("FlowTEXLOCK");
                    len     = 11;
                }
                else
                {
                    lockMsg = Encoding.Default.GetBytes("FlowTEXUNLOCK");
                    len     = 13;
                }

                NewRequest.Msg = new byte[len];
                Buffer.BlockCopy(lockMsg, 0, NewRequest.Msg, 0, len);

                if (Locked)
                {
                    NewRequest.Opcode = cMTDOpcodes.OPC_LOCK;
                }
                else
                {
                    NewRequest.Opcode = cMTDOpcodes.OPC_UNLOCK;
                }

                NewRequest.Length = (byte)len;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;

                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus == eRequestStatus.eSUCCESS)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #7
0
        public bool getStatus(out UInt32 FwChks, out UInt32 FwCalcChks)
        {
            if (bActive)
            {
                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }
                NewRequest     = new cTexNET.cMessage();
                NewRequest.Msg = new byte[1];

                NewRequest.Opcode = cMTDOpcodes.OPC_STATUS;
                NewRequest.Length = (byte)NewRequest.Msg.Length;
                RequestStatus     = eRequestStatus.eNEW_REQUEST;

                while ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                {
                    Thread.Sleep(10);
                }

                if (RequestStatus != eRequestStatus.eSUCCESS)
                {
                    FwChks     = 0;
                    FwCalcChks = 0;
                }
                else
                {
                    FwChks     = BitConverter.ToUInt32(NewRequest.Msg, 0);
                    FwCalcChks = BitConverter.ToUInt32(NewRequest.Msg, 4);
                }

                return(true);
            }

            FwChks     = 0;
            FwCalcChks = 0;
            return(false);
        }
    private void OnServerRequestComplete(AsyncJSONRequest serverRequest)
    {
        Status = eRequestStatus.completed;

        if (serverRequest.GetRequestState() == AsyncJSONRequest.eRequestState.succeded)
        {
            ServerResponse = serverRequest.GetResult();

            string responseResult = JsonUtilities.ParseString(ServerResponse, "result");

            if (responseResult == "Success")
            {
                ResultCode = eResult.success;
                ResultDetails = "";
            }
            else
            {
                // Successfully got response back, but server said no.
                ResultCode = eResult.failed_server_denied;
                ResultDetails = "Server Response: " + responseResult;
            }
        }
        else
        {
            // Failed to get a response from the server
            ResultCode = eResult.failed_server_connection;
            ResultDetails = "Connection Failure: "+serverRequest.GetFailureReason();
        }

        // Notify the caller that the request is completed
        m_onCompleteCallback(this);
        m_onCompleteCallback = null;
    }
    private void OnPathComputed(PathComputer pathResult)
    {
        // If the path find succeeded, the entity will set the new destination and start walking toward it
        if (pathResult.ResultCode == PathComputer.eResult.success)
        {
            // Tell the server where we would like to go
            AsyncJSONRequest serverRequest = AsyncJSONRequest.Create(m_requestOwnerObject);
            Dictionary<string, object> requestPayload = new Dictionary<string, object>();

            requestPayload["character_id"] = m_entity.MyCharacterData.character_id;
            requestPayload["x"] = OriginPortalEntryPoint.x;
            requestPayload["y"] = OriginPortalEntryPoint.y;
            requestPayload["z"] = OriginPortalEntryPoint.z;
            requestPayload["angle"] = pathResult.DestinationFacingAngle;
            requestPayload["portal_id"] = OriginPortal.portal_id;

            Status = eRequestStatus.pending_server_response;

            serverRequest.POST(
                ServerConstants.characterPortalRequestURL,
                requestPayload,
                this.OnServerRequestComplete);
        }
        else
        {
            Status = eRequestStatus.completed;
            ResultCode = eResult.failed_path;
            ResultDetails = "Path Failure Code: " + pathResult.ResultCode.ToString();

            // Notify the caller that the request is completed
            m_onCompleteCallback(this);
        }
    }
    public void Execute(OnRequestCompleteDelegate onComplete)
    {
        if (Status != eRequestStatus.pending_path_find || Status != eRequestStatus.pending_server_response)
        {
            m_onCompleteCallback = onComplete;

            if (Point3d.DistanceSquared(OriginalPosition, OriginPortalEntryPoint) > WITHIN_PORTAL_TOLERANCE_SQUARED)
            {
                Status = eRequestStatus.pending_path_find;

                PathfindingSystem.AddPathRequest(
                    m_entity.CurrentRoomKey,
                    m_entity.Position,
                    OriginPortalEntryPoint,
                    this.OnPathComputed);
            }
            else
            {
                Status = eRequestStatus.pending_server_response;
            }
        }
    }
Beispiel #11
0
        void poll()
        {
            int data = -1;

            try
            {
                if (TheSerialPort.IsOpen)
                {
                    do
                    {
                        try
                        {
                            if (TheSerialPort.BytesToRead > 0)
                            {
                                data = TheSerialPort.ReadByte();
                            }
                            else
                            {
                                data = -1;
                            }
                        }
                        catch
                        {
                            data = -1;
                        }
                        finally
                        {
                            TexNET.messagePoll(data);
                            TexNET.process();
                            byte[] bufferTX = TexNET.getDataToSend();
                            if ((bufferTX != null) && (bufferTX.Length > 0))
                            {
                                TheSerialPort.Write(bufferTX, 0, bufferTX.Length);
                                TexNET.dataSent();
                            }
                        }
                    }while((data >= 0) && (TheSerialPort.IsOpen));
                }
            }
            catch
            {
            }

            if ((bError) && (RequestStatus == eRequestStatus.eNEW_REQUEST))
            {
                RequestStatus = eRequestStatus.eFAIL;
            }

            if (TheSerialPort.IsOpen)
            {
                switch (RequestMState)
                {
                default:
                case eRequestMState.eFLOW:
                {
                    TexNET.sendRequest(cMTDOpcodes.OPC_READ_FLOW, null);
                    RequestMState = eRequestMState.eFLOW_ANSWER;
                    break;
                }

                case eRequestMState.eFLOW_ANSWER:
                {
                    if (!TexNET.isWaitingAnswer())
                    {
                        if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length))
                        {
                            if ((opcode == cMTDOpcodes.OPC_READ_FLOW) && (length >= 8))
                            {
                                flow        = BitConverter.ToSingle(msg, 0);
                                temperature = BitConverter.ToSingle(msg, 4);
                                bError      = false;
                            }
                        }
                        else
                        {
                            if (SerialMode != eSerialMode.eCLOSED)
                            {
                                portOpenRetry = 3;
                                SerialMode    = eSerialMode.eSETUP;
                                bError        = true;
                            }
                        }

                        if (RequestStatus == eRequestStatus.eNEW_REQUEST)
                        {
                            RequestMState = eRequestMState.eUSER_REQUEST;
                        }
                        else
                        {
                            RequestMState = eRequestMState.eFLOW;
                        }
                    }
                    break;
                }

                case eRequestMState.eUSER_REQUEST:
                {
                    TexNET.sendRequest(NewRequest.Opcode, NewRequest.Msg);
                    RequestStatus = eRequestStatus.eWAITTING;
                    RequestMState = eRequestMState.eUSER_ANSWER;
                    break;
                }

                case eRequestMState.eUSER_ANSWER:
                {
                    if (!TexNET.isWaitingAnswer())
                    {
                        if (TexNET.getAnswer(out byte opcode, out byte[] msg, out int length))
                        {
                            if (opcode == NewRequest.Opcode)
                            {
                                NewRequest.Opcode = opcode;
                                NewRequest.Msg    = msg;
                                NewRequest.Length = (byte)length;
                                RequestStatus     = eRequestStatus.eSUCCESS;
                                bError            = false;
                            }
                            else
                            {
                                RequestStatus = eRequestStatus.eFAIL;
                                if (SerialMode != eSerialMode.eCLOSED)
                                {
                                    portOpenRetry = 3;
                                    SerialMode    = eSerialMode.eSETUP;
                                    bError        = true;
                                }
                            }
                        }
                        else
                        {
                            RequestStatus = eRequestStatus.eFAIL;
                            if (SerialMode != eSerialMode.eCLOSED)
                            {
                                portOpenRetry = 3;
                                SerialMode    = eSerialMode.eSETUP;
                                bError        = true;
                            }
                        }

                        RequestMState = eRequestMState.eFLOW;
                    }
                    break;
                }
                }
            }
        }
Beispiel #12
0
        void task()
        {
            while (!TaskEnd)
            {
                if (bDisconnect)
                {
                    SerialMode = eSerialMode.eCLOSED;
                }

                switch (SerialMode)
                {
                case eSerialMode.eCLOSED:
                {
                    if (TheSerialPort.IsOpen)
                    {
                        TheSerialPort.Close();
                    }
                    bError      = true;
                    bDisconnect = false;

                    if ((RequestStatus == eRequestStatus.eNEW_REQUEST) || (RequestStatus == eRequestStatus.eWAITTING))
                    {
                        RequestStatus = eRequestStatus.eFAIL;
                    }
                    break;
                }

                case eSerialMode.eSETUP:
                {
                    if (TheSerialPort.IsOpen)
                    {
                        TheSerialPort.Close();
                    }

                    if (AutoDetectPort)
                    {
                        try
                        {
                            List <string> Ports = new List <string>(System.IO.Ports.SerialPort.GetPortNames());

                            if (Ports.Count > 0)
                            {
                                Ports.Sort();

                                if (portIdx < 0)
                                {
                                    portIdx = 0;
                                }
                                else
                                {
                                    portIdx++;
                                }

                                if (portIdx >= Ports.Count)
                                {
                                    portIdx = 0;
                                }

                                TheSerialPort.PortName = Ports[portIdx];
                            }
                            else
                            {
                                portIdx = -1;
                            }
                        }
                        catch
                        {
                            portIdx = -1;
                        }
                    }

                    SerialMode = eSerialMode.eOPEN;
                    break;
                }

                case eSerialMode.eOPEN:
                {
                    if (!TheSerialPort.IsOpen)
                    {
                        try
                        {
                            TheSerialPort.BaudRate = 115200;
                            TheSerialPort.Open();
                        }
                        catch
                        {
                            bError = true;

                            if (portOpenRetry == 0)
                            {
                                portOpenRetry = 3;
                                SerialMode    = eSerialMode.eSETUP;
                            }
                            else
                            {
                                portOpenRetry--;
                            }
                        }
                    }
                    else
                    {
                        TheSerialPort.Close();
                    }

                    if (TheSerialPort.IsOpen)
                    {
                        SerialMode = eSerialMode.eTEXNET;
                        bError     = false;
                    }
                    break;
                }

                case eSerialMode.eTEXNET:
                {
                    if (!TheSerialPort.IsOpen)
                    {
                        portOpenRetry = 3;
                        SerialMode    = eSerialMode.eSETUP;
                        bError        = true;
                    }
                    else
                    {
                        poll();
                    }
                    break;
                }
                }

                Thread.Sleep(10);
            }
        }