void parseCapabilityResponse()
        {
            int k = 0;
            int analog_channel_index = 0;
            int offset = 0;

            Pins = new List <Pin>();

            offset++;             // skip the command byte
            while (offset < sysexBytesRead)
            {
                // parse a pin
                var p = new Pin()
                {
                    number = k
                };
                Log("Adding pin " + k.ToString());
                while (storedInputData[offset] != 127)
                {
                    var pc = new Pin.Capability()
                    {
                        mode       = storedInputData[offset],
                        resolution = storedInputData[offset + 1]
                    };
                    p.capabilities.Add(pc);

                    // number the analog pins as they are detected
                    if (pc.Mode == PinMode.ANALOG)
                    {
                        p.analog_number = analog_channel_index;
                        analog_channel_index++;
                    }

                    Log("Added pin " + k.ToString() + " mode " + pc.Mode.ToString() + " with resolution " + pc.resolution.ToString() + "");
                    offset += 2;
                }
                Pins.Add(p);
                k++;
                offset += 1;               // skip 127 pin boundary byte
            }
        }
    private void ParseCapabilityResponse()
    {
        int k = 0;
        int analog_channel_index = 0;
        int offset = 0;

        pins = new List <Pin>();

        offset++;

        while (offset < sysexBytesRead)
        {
            var p = new Pin()
            {
                number = k
            };
            while (storedInputData[offset] != 127)
            {
                var pc = new Pin.Capability()
                {
                    mode       = storedInputData[offset],
                    resolution = storedInputData[offset + 1]
                };
                p.capabilities.Add(pc);

                if (pc.Mode == PinMode.ANALOG)
                {
                    p.analog_number = analog_channel_index;
                    analog_channel_index++;
                }

                offset += 2;
            }

            pins.Add(p);

            k++;
            offset += 1;
        }
    }
        void parseCapabilityResponse()
        {
            int k = 0;
            int analog_channel_index = 0;
            int offset = 0;

            Pins = new List<Pin>();

            offset++; // skip the command byte
            while (offset < sysexBytesRead)
            {
                // parse a pin
                var p = new Pin() { number = k };
                Log("Adding pin " + k.ToString());
                while(storedInputData[offset] != 127)
                {
                    var pc = new Pin.Capability()
                    {
                        mode = storedInputData[offset],
                        resolution = storedInputData[offset+1]
                    };
                    p.capabilities.Add(pc);

                    // number the analog pins as they are detected
                    if (pc.Mode == PinMode.ANALOG)
                    {
                        p.analog_number = analog_channel_index;
                        analog_channel_index++;
                    }

                    Log("Added pin " + k.ToString() + " mode " + pc.Mode.ToString() + " with resolution " + pc.resolution.ToString() + "");
                    offset+=2;

                }
                Pins.Add(p);
                k++;
                offset+=1; // skip 127 pin boundary byte
            }
        }