Example #1
0
        public routedMessage sendNextCmd(routedMessage msg)
        {
            if (filePos >= bin.Length)
            {
                byte[] cmd = new byte[2];
                cmd[0] = 0x94;
                cmd[1] = crc;
                return(new routedMessage(msg.Route.getReturnRoute(), cmd));
            }
            else
            {
                int    len = Math.Min(128, bin.Length - filePos);
                byte[] cmd = new byte[len + 2];

                cmd[0] = 0x92;
                cmd[1] = (byte)len;
                Array.Copy(bin, filePos, cmd, 2, len);
                for (int i = filePos; i < filePos + len; i++)
                {
                    crc ^= bin[i];
                }
                filePos += len;

                // Update main form with % complete
                if (null != UploadEvent)
                {
                    int pcentDone = (int)Math.Ceiling(filePos * 100.0 / bin.Length);
                    UploadEvent(this, new UploadEventArgs(pcentDone));
                }
                return(new routedMessage(msg.Route.getReturnRoute(), cmd));
            }
        }
Example #2
0
        public bool matches(routedMessage message)
        {
            //crudely matches set and get responses

            if (message.Command[0] == sent.Command[0] + 1)
            {
                // TODO for get commands match more for set commands, ack needs more info
                return(true);
            }
            return(false);
        }
Example #3
0
        public routedMessage getNextRequest()
        {
            //take child off top of list
            if (UnwalkedRoutes.Count > 0)
            {
                route next = UnwalkedRoutes[0];
                UnwalkedRoutes.RemoveAt(0);

                routedMessage request = new routedMessage(next, enumerateMsg);
                return(request);
            }
            return(null);
        }
Example #4
0
        public void enumerateResponse(routedMessage resp)
        {
            route         from   = resp.Route.getReturnRoute();
            commandReader reader = resp.getReader();

            reader.ReadByte();

            string name = reader.ReadString();

            //add to tree under parent
            //_parent.findNode(from);
            routedNode p = _parent;

            //problem with not having the first part of the address
            // TODO do it properly!

            int i;

            if (from.Length > 1)
            {
                p = p.children[0];
                for (i = 1; i < from.Length - 1; i++)
                {
                    byte childIdx = from.getLink(i - 1);
                    p = p.children[childIdx];
                }
                p.children.Add(from.getLink(i - 1), new routedNode(name, from));
            }
            else
            {
                p.children.Add(0, new routedNode(name, from));
            }
            //   else if (from.Length == 2) p.children[0].children.Add((byte)p.children[0].children.Count, new routedNode(name, from));
            //    else p.children.Add(from.getLink(i-1), new routedNode(name,from));

            //add children to unwalked list

            try
            {
                while (1 == 1)
                {
                    byte con = reader.ReadByte();
                    UnwalkedRoutes.Add(new route(from, con));
                }
            }
            catch (Exception) { }
        }
Example #5
0
        public object getProperty(ccParameter param, int start, int num)
        {
            //send request message

            routedMessage       m   = new routedMessage(node.address, new byte[] { 0x03, (byte)param.Index, (byte)start, (byte)num });
            MessageSubscription sub = new MessageSubscription()
            {
                singleShot = true, sent = m
            };

            con.SendRoutedMessage(m, 0, sub);
            //wait for reply
            asyncWaitForReply(sub, defaultTimeout);

            //decode message
            param.parseValue(sub.reply);

            return(param.Value);
        }
Example #6
0
        public void setProperty(ccParameter param, int start, int num)
        {
            //assume value already set in local param
            uint nBlocks   = 1;
            uint blockSize = 0;

            if (param.Value.GetType().IsArray)
            {
                if (start >= param.ArrayLen)
                {
                    throw (new Exception("Set routed Property index too big"));
                }
                num = Math.Min(num, (int)param.ArrayLen - start);
                //calc number of blocks to send
                blockSize = 32;
                nBlocks   = ((uint)num - 1) / blockSize + 1;
            }

            UInt32 startidx = (UInt32)start;

            for (int i = 0; i < nBlocks; i++)
            {
                byte size = (byte)Math.Min(blockSize, start + num - startidx);

                routedMessage       m   = new routedMessage(node.address, param.buildSetCmd(startidx, size));
                MessageSubscription sub = new MessageSubscription()
                {
                    singleShot = true, sent = m
                };

                con.SendRoutedMessage(m, 0, sub);
                //wait for ack
                asyncWaitForReply(sub, defaultTimeout);
                //TODO check ack?
                startidx += blockSize;
            }
        }
Example #7
0
 public void handleReply(routedMessage message)
 {
     //pass to async method
     reply = message;
 }
Example #8
0
        public void parseValue(routedMessage msg)
        {
            UInt32        startIdx;
            byte          len;
            commandReader reader = msg.getReader();

            reader.ReadByte();
            reader.ReadByte();


            switch (TypeIdx)
            {
            case CC_BOOL:
                Value = reader.ReadBoolean();
                break;

            case CC_STRING:
                Value = reader.ReadString();
                break;

            case CC_UINT8:
                byte valb = reader.ReadByte();
                Value = valb;
                break;

            case CC_INT8:
                sbyte valsb = reader.ReadSByte();
                Value = valsb;
                break;

            case CC_UINT16:
                UInt16 valui16 = reader.ReadUInt16();
                Value = valui16;
                break;

            case CC_INT16:
                Int16 vali16 = reader.ReadInt16();
                Value = vali16;
                break;

            case CC_UINT32:
                UInt32 valui32 = reader.ReadUInt32();
                Value = valui32;
                break;

            case CC_INT32:
                Int32 vali32 = reader.ReadInt32();
                Value = vali32;
                break;

            case CC_UINT64:
                throw (new NotImplementedException());
                break;

            case CC_INT64:
                throw (new NotImplementedException());
                break;

            case CC_BOOL_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_STRING_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_UINT8_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new byte[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((byte[])Value)[i] = reader.ReadByte();
                }
                break;

            case CC_INT8_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new sbyte[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((sbyte[])Value)[i] = reader.ReadSByte();
                }
                break;

            case CC_UINT16_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new UInt16[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((UInt16[])Value)[i] = reader.ReadUInt16();
                }
                break;

            case CC_INT16_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new Int16[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((Int16[])Value)[i] = reader.ReadInt16();
                }
                break;

            case CC_UINT32_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new UInt32[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((UInt32[])Value)[i] = reader.ReadUInt32();
                }
                break;

            case CC_INT32_ARRAY:
                startIdx = reader.Read7BitEncodedUInt32();
                len      = reader.ReadByte();
                if (Value == null)
                {
                    Value = new Int32[ArrayLen];
                }
                for (UInt32 i = startIdx; i < startIdx + len; i++)
                {
                    ((Int32[])Value)[i] = reader.ReadInt32();
                }
                break;

            case CC_UINT64_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_INT64_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_FLOAT:
                throw (new NotImplementedException());
                break;

            case CC_DOUBLE:
                throw (new NotImplementedException());
                break;

            case CC_FLOAT_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_DOUBLE_ARRAY:
                throw (new NotImplementedException());
                break;

            case CC_ENUMERATION:
                byte valenum = reader.ReadByte();
                Value = valenum;
                break;

            case CC_ENUMERATION_VALUES:
                startIdx = reader.ReadByte();
                len      = reader.ReadByte();
                string[] stringArray = new string[len];
                for (int i = 0; i < len; i++)
                {
                    stringArray[i] = reader.ReadString();
                }
                Value = stringArray;
                break;

            case CC_VOID_FUNCTION:
                throw (new NotImplementedException());
                break;
            }
        }