コード例 #1
0
ファイル: MainForm.cs プロジェクト: StephenGenusa/CresnetMon
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (m_fIsRunning)
            {
                m_serCresnet.Close();
                btnStart.Text = "Start";
                m_fIsRunning  = false;
            }
            else
            {
                if (string.IsNullOrEmpty(txtDeviceId.Text))
                {
                    m_bDevId = 0;
                }

                else if (!byte.TryParse(txtDeviceId.Text, NumberStyles.AllowHexSpecifier, null, out m_bDevId))
                {
                    MessageBox.Show("Invalid Device ID", "Cresnet Monitor", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (!OpenPort((string)selComPort.SelectedItem, ref m_serCresnet))
                {
                    return;
                }

                m_lstMessage  = new List <byte>(MessageSize);
                m_state       = SerialState.Searching;
                btnStart.Text = "Stop";
                m_fIsRunning  = true;
                new Thread(CresNetProcessByte).Start();
            }
        }
コード例 #2
0
ファイル: State.cs プロジェクト: nus-mtp/ar-design-tool
 public State(SerialState ss, ObjectCollection objectCollection)
 {
     stateObjects = new Dictionary<int, StateObject>();
     grid = GameObject.FindGameObjectWithTag(GRID_TAG);
     stateObjectButtonTemplate = (GameObject)Resources.Load(STATE_OBJECT_BUTTON_NAME);
     name = ss.name;
     id = ss.id;
     InitializeStateObjects(ss, objectCollection);
 }
コード例 #3
0
        public WiFiTracker(int trackerID)
        {
            TrackerID = trackerID;
            ComPort   = null;
            Serial    = null;

            serialState         = SerialState.Idle;
            countMacsForReceive = 0;
            macList             = new List <PhysicalAddress>();
            data = "";
        }
コード例 #4
0
ファイル: MainForm.cs プロジェクト: StephenGenusa/CresnetMon
        void ShowMessage()
        {
            byte bDest;

            bDest = m_bDestId == MasterAddr ? m_bSendId : m_bDestId;

            if (m_bDevId == 0 || bDest == m_bDevId)
            {
                BeginInvoke(DisplayMessageDelegate, FormatMessage(m_lstMessage), bDest, m_bDestId == MasterAddr);
            }
            m_lstMessage.Clear();
            m_state = SerialState.Ready;
        }
コード例 #5
0
ファイル: State.cs プロジェクト: nus-mtp/ar-design-tool
 public void SetUp(SerialState s)
 {
     stateObjects = new List<GameObject>();
     name = s.name;
     id = s.id;
     foreach (SerialStateObject sso in s.stateObjects)
     {
         GameObject currentStateObjectGO = FileLoader.loadPrefab(sso.modelName);
         currentStateObjectGO = Instantiate(currentStateObjectGO);
         StateObject currentStateObject = currentStateObjectGO.AddComponent<StateObject>();
         currentStateObjectGO.transform.SetParent(transform);
         currentStateObject.SetUp(sso);
         stateObjects.Add(currentStateObjectGO);
     }
 }
コード例 #6
0
ファイル: State.cs プロジェクト: nus-mtp/ar-design-tool
 private void InitializeStateObjects(SerialState serialState, ObjectCollection objectCollection)
 {
     foreach (SerialStateObject s in serialState.stateObjects)
     {
         foreach (GameObject g in objectCollection.GetUserObjects())
         {
             if (g.name.Equals(s.modelName))
             {
                 GameObject toSpawn = MonoBehaviour.Instantiate(g);
                 StateObject stateObject = new StateObject(toSpawn);
                 s.InitializeStateObject(stateObject);
                 AddToState(stateObject);
                 nextStateObjectId = Mathf.Max(s.id, nextStateObjectId);
                 Debug.Log(id + ", "  +s.id);
                 break;
             }
         }
     }
     nextStateObjectId++;
 }
コード例 #7
0
 public List <PhysicalAddress> Collect()
 {
     macList.Clear();
     StartSerialConnection();
     Serial.WriteLine(SerialMessageParser.Encode("DISCOVERY"));
     Console.WriteLine("1");
     serialState = SerialState.Initialize;
     while (serialState == SerialState.Initialize)
     {
     }
     System.Threading.Thread.Sleep(1000);
     Serial.Write(SerialMessageParser.Encode("COLLECT"));
     Console.WriteLine("2");
     serialState = SerialState.Collecting;
     while (serialState == SerialState.Collecting || serialState == SerialState.Receiving)
     {
     }
     Console.WriteLine("99");
     Serial.Close();
     Serial.Dispose();
     return(macList);
 }
コード例 #8
0
ファイル: MainForm.cs プロジェクト: StephenGenusa/CresnetMon
        // Executed in a different thread
        void CresNetProcessByte()
        {
            byte b;

            while (m_serCresnet.IsOpen)
            {
                try
                {
                    b = (byte)m_serCresnet.ReadByte();

                    switch (m_state)
                    {
                    case SerialState.Searching:
                        if (b == 0)
                        {
                            m_state = SerialState.Ready;
                        }
                        break;

                    case SerialState.Ready:
                        if (b >= MinMsgAddr && b < MaxMsgAddr)
                        {
                            m_state   = SerialState.Addressed;
                            m_bDestId = b;
                            if (b != MasterAddr)
                            {
                                m_bSendId = b;
                            }
                        }
                        else if (b != 0)
                        {
                            m_state = SerialState.Searching;
                        }
                        // Leave in Ready state if zero
                        break;

                    case SerialState.Addressed:
                        if (b > MaxMsgSize)
                        {
                            m_state = SerialState.Searching;
                        }

                        else if (b != 0)
                        {
                            m_iMsgSize = b;
                            m_state    = SerialState.Payload;
                        }
                        else
                        {
                            m_state = SerialState.Ready;
                            // Count polling cycles
                            if (m_bDestId != MasterAddr)
                            {
                                // Choose an ID to represent the polling cycle
                                if (m_bPollId == 0)
                                {
                                    m_bPollId = m_bDestId;
                                }
                                if (m_bDestId == m_bPollId)
                                {
                                    BeginInvoke(DisplayMessageDelegate, null, (byte)0, false);
                                }
                            }
                        }
                        break;

                    case SerialState.Payload:
                        m_lstMessage.Add(b);
                        m_iMsgSize--;
                        if (m_iMsgSize == 0)
                        {
                            ShowMessage();
                        }
                        break;
                    }
                }
                catch (Exception exc)
                {
                    Debug.WriteLine("Exception in CresNetProcessByte: " + exc.Message);
                    return;
                }
            }
        }
コード例 #9
0
        private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine("3");
            data = SerialMessageParser.Parse(Serial.ReadExisting());
            Console.WriteLine(data);
            Console.WriteLine(ComPort);
            Console.WriteLine(serialState);
            if (data.Contains("HEARTBEAT"))
            {
                Serial.Write(SerialMessageParser.Encode("ACK"));
                data = "";
            }
            switch (serialState)
            {
            case SerialState.Idle:
                break;

            case SerialState.Initialize:
                Console.WriteLine("6");
                if (data.StartsWith("NodeMcu"))
                {
                    Console.WriteLine("7");
                    Serial.Write(SerialMessageParser.Encode("ACK"));
                    Console.WriteLine("Nodemcu ack");
                    serialState = SerialState.Idle;
                }
                else if (data.Contains("HEARTBEAT"))
                {
                    Console.WriteLine("8");
                    Serial.Write(SerialMessageParser.Encode("ACK"));
                    Serial.Write(SerialMessageParser.Encode("COLLECT"));
                    serialState = SerialState.Collecting;
                }
                break;

            case SerialState.Collecting:
                Console.WriteLine("HALLO YEET HIER BEN IK");
                Console.WriteLine(data);
                Console.WriteLine("9");
                if (data.StartsWith("DONE:"))
                {
                    Console.WriteLine("10");
                    Console.WriteLine("gedont");
                    Int32.TryParse(SerialMessageParser.GetValue(data), out countMacsForReceive);
                    Serial.Write(SerialMessageParser.Encode("ACK"));
                    Serial.Write(SerialMessageParser.Encode("SEND"));
                    serialState = SerialState.Receiving;
                }
                break;

            case SerialState.Receiving:
                Console.WriteLine("11");
                if (data.Contains("HEARTBEAT"))
                {
                    Console.WriteLine("12");
                    Serial.Write(SerialMessageParser.Encode("ACK"));
                    Serial.Write(SerialMessageParser.Encode("SEND"));
                }
                Console.WriteLine("Receiving");
                if (data == "ACK")
                {
                    Console.WriteLine("13");
                    Serial.Write(SerialMessageParser.Encode("ACK"));
                }
                if (data.StartsWith("MAC:"))
                {
                    try
                    {
                        //data = data.Substring(4);
                        //data = data.Replace(':', '-').ToUpper();
                        macList.Add(PhysicalAddress.Parse(data.Substring(4).Replace(':', '-').ToUpper()));
                        Serial.Write(SerialMessageParser.Encode("ACK"));
                    }
                    catch (FormatException)
                    {
                        Serial.Write(SerialMessageParser.Encode("NACK"));
                    }
                }
                else if (data == "FINISH")
                {
                    //TODO check macList.Count == countMacsForReceive (not in WiFiTracker yet)
                    serialState = SerialState.Idle;
                }
                break;

            default:
                break;
            }
        }
コード例 #10
0
 public ProjectState ToSerial()
 {
     ProjectState project = new ProjectState();
     List<SerialState> serialStates = new List<SerialState>();
     Dictionary<int, State>.Enumerator enumerator = stateList.GetEnumerator();
    
     while (enumerator.MoveNext())
     {
         SerialState serialState = new SerialState(enumerator.Current.Value);
         serialStates.Add(serialState);
     }
     project.serialStates = serialStates;
     return project;
 }