Exemplo n.º 1
0
        public SerialEventMessage(message_frame i_msg)
        {
            m_data = new byte[i_msg.size];
            Buffer.BlockCopy(i_msg.msg, 0, m_data, 0, i_msg.size);
            m_head     = i_msg.msgflags;
            m_sizeData = i_msg.size;

            m_priority = (EVENT_PRIORITY)(m_head >> 5);
            m_event    = GetEventCode(i_msg.msg);
        }
Exemplo n.º 2
0
        public EventMessage(byte[] msgPacket)
        {
            short msgCRC;
            short expectedCRC;

            if (msgPacket == null)
            {
                throw new ArgumentNullException("msgPacket");
            }

            byte head = msgPacket[VSCP_POS_HEAD];

            _ignoreCRC = ((head & VSCP_NO_CRC_CALC) == VSCP_NO_CRC_CALC);
            _ignoreCRC = true;

            int   incomming_packet_length = msgPacket.Length;
            short dataSize = EventHelper.GetDataSize(msgPacket);

            int msgLength = msgPacket.Length + VSCP_HEADER_SIZE;

            msgLength += (_ignoreCRC) ? 0 : VSCP_SIZE_CRC;

            if (msgLength > VSCP_MAX_DATA_SIZE)
            {
                throw new ApplicationException(string.Format("Invalid event message length: {0}", msgLength));
            }

            _priority = (EVENT_PRIORITY)(head >> 5);

            if (_ignoreCRC == false)
            {
                msgCRC      = EventHelper.GetCRC(msgPacket);
                expectedCRC = EventHelper.CalcCRC(msgPacket, msgLength - VSCP_SIZE_CRC);

                if (msgCRC != expectedCRC)
                {
                    throw new ApplicationException(string.Format("Invalid event message CRC '{0}' instead of {1}", msgCRC, expectedCRC));
                }
            }

            _event = EventHelper.GetEventCode(msgPacket);

            _address = new byte [EventMessage.VSCP_SIZE_ADDRESS];
            Buffer.BlockCopy(msgPacket, VSCP_POS_ADDRESS, _address, 0, VSCP_SIZE_ADDRESS);

            _data = new Byte [dataSize];
            Buffer.BlockCopy(msgPacket, VSCP_POS_DATA, _data, 0, dataSize);
        }
Exemplo n.º 3
0
        public EventMessage(byte[] sender, EventCode eventCode, EVENT_PRIORITY priority, byte [] data, bool calcCRC)
        {
            if ((sender == null) || (sender.Length != EventMessage.VSCP_SIZE_ADDRESS))
            {
                _address = new byte [EventMessage.VSCP_SIZE_ADDRESS];
            }
            else
            {
                _address = sender;
            }

            _event     = eventCode;
            _priority  = priority;
            _ignoreCRC = !calcCRC;

            if ((data == null) || (data.Length > VSCP_MAX_DATA_SIZE))
            {
                _data = new Byte[0];
            }
            else
            {
                _data = data.Clone() as byte [];
            }
        }
Exemplo n.º 4
0
        public EventMessage(byte[] msgPacket)
        {
            short msgCRC;
            short expectedCRC;

            if (msgPacket == null)
                throw new ArgumentNullException ("msgPacket");

            byte head = msgPacket[VSCP_POS_HEAD];
            _ignoreCRC = ((head & VSCP_NO_CRC_CALC) == VSCP_NO_CRC_CALC);
            _ignoreCRC = true;

            int incomming_packet_length = msgPacket.Length;
            short dataSize = EventHelper.GetDataSize (msgPacket);

            int msgLength = msgPacket.Length + VSCP_HEADER_SIZE;
            msgLength += (_ignoreCRC) ? 0 : VSCP_SIZE_CRC;

            if (msgLength > VSCP_MAX_DATA_SIZE)
                throw new ApplicationException(string.Format("Invalid event message length: {0}", msgLength));

            _priority = (EVENT_PRIORITY)(head >> 5);

            if (_ignoreCRC == false)
            {
                msgCRC = EventHelper.GetCRC (msgPacket);
                expectedCRC = EventHelper.CalcCRC (msgPacket, msgLength - VSCP_SIZE_CRC);

                if (msgCRC != expectedCRC)
                    throw new ApplicationException(string.Format("Invalid event message CRC '{0}' instead of {1}", msgCRC, expectedCRC));
            }

            _event = EventHelper.GetEventCode (msgPacket);

            _address = new byte [EventMessage.VSCP_SIZE_ADDRESS];
            Buffer.BlockCopy (msgPacket, VSCP_POS_ADDRESS, _address, 0, VSCP_SIZE_ADDRESS);

            _data = new Byte [dataSize];
            Buffer.BlockCopy (msgPacket, VSCP_POS_DATA, _data, 0, dataSize);
        }
Exemplo n.º 5
0
        public EventMessage(byte[] sender, EventCode eventCode, EVENT_PRIORITY priority, byte [] data, bool calcCRC)
        {
            if ((sender == null) || (sender.Length != EventMessage.VSCP_SIZE_ADDRESS))
                _address = new byte [EventMessage.VSCP_SIZE_ADDRESS];
            else
                _address = sender;

            _event = eventCode;
            _priority = priority;
            _ignoreCRC = !calcCRC;

            if ((data == null) || (data.Length > VSCP_MAX_DATA_SIZE))
                _data = new Byte[0];
            else
                _data = data.Clone () as byte [];
        }
Exemplo n.º 6
0
        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                // the the message to the serias interface
                char[]         aSplit         = { ',' };
                string         sDataBytes     = txtData.Text;
                string[]       asData         = sDataBytes.Split(aSplit);
                EventCode      chosenEvent    = m_eventCodeNameToVal[cbxEventCode.SelectedItem.ToString()];
                EVENT_PRIORITY chosenPriority = m_eventPriorityToval[cbxPriority.SelectedItem.ToString()];

                if (asData.Length == 1 && asData[0].Length == 0)
                {
                    asData = new string[0];
                }
                // length: dle, stx, flags, 4 bytes header, data bytes, dle, etx
                int    len      = 9 + asData.Length;
                byte[] aVscpMsg = new byte[len];
                aVscpMsg[0] = message_frame.DLE;
                aVscpMsg[1] = message_frame.STX;
                int iTemp = (int)chosenPriority;
                aVscpMsg[2] = (byte)(iTemp << 5);

                iTemp = (int)chosenEvent;
                int iVal = (iTemp >> 24) & 0xFF;
                aVscpMsg[3] = (byte)iVal;

                iVal        = (iTemp >> 16) & 0xFF;
                aVscpMsg[4] = (byte)iVal;

                iVal        = iTemp & 0xFF;
                aVscpMsg[5] = (byte)iVal;

                // nickname is zero
                aVscpMsg[6] = 0;

                int i = 0;
                for (; i < asData.Length; i++)
                {
                    string sNumber = asData[i];
                    if (sNumber.Length > 0)
                    {
                        aVscpMsg[7 + i] = (byte)Int32.Parse(sNumber, System.Globalization.NumberStyles.HexNumber);
                    }
                    else
                    {
                        aVscpMsg[7 + i] = 0;
                    }
                }
                aVscpMsg[7 + i] = message_frame.DLE;
                i++;
                aVscpMsg[7 + i] = message_frame.ETX;

                m_serialPort.Write(aVscpMsg, 0, aVscpMsg.Length);
                message_frame generated_vscp_message = new message_frame();
                for (int j = 0; j < aVscpMsg.Length; j++)
                {
                    if (generated_vscp_message.AddByte(aVscpMsg[j]))
                    {
                        // a new serial vscp message
                        DateTime now = DateTime.Now;
                        // Create message so CRC is checked if needed
                        SerialEventMessage msg  = new SerialEventMessage(generated_vscp_message);
                        string             sMsg = msg.ToString();

                        string sTime = now.ToLongTimeString() + ":" + now.Millisecond;
                        if (null != m_tracer)
                        {
                            m_tracer.Write(sTime + " " + sMsg);

                            ListViewItem item = new ListViewItem(sTime, sMsg);
                            item.SubItems.Add(msg.ToString());
                            m_listView.AddItem(item);

                            string sEventName = msg.m_event.ToString();
                            byte[] dataBytes  = msg.GetDataBytes();
                            string sCrack     = m_msgCracker.Decode(sEventName, dataBytes);
                            if (sCrack.Length > 0)
                            {
                                ListViewItem item2 = new ListViewItem(sTime, sMsg);
                                item2.SubItems.Add(sCrack);
                                m_listView.AddItem(item2);
                            }
                        }
                    }
                }
            }
            catch (IOException ex)
            {
                Debug.WriteLine("IOException: " + ex.Message);
                MessageBox.Show(ex.Message);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                MessageBox.Show(ex.Message);
            }
        }
Exemplo n.º 7
0
        public SerialEventMessage( message_frame i_msg)
        {
            m_data = new byte[i_msg.size];
            Buffer.BlockCopy(i_msg.msg, 0, m_data, 0, i_msg.size);
            m_head = i_msg.msgflags;
            m_sizeData = i_msg.size;

            m_priority = (EVENT_PRIORITY)(m_head >> 5);
            m_event = GetEventCode(i_msg.msg);
        }