/// <summary>
 /// Create the port
 /// </summary>
 /// <param name="layer">the brick layer</param>
 /// <param name="port">the port name</param>
 internal OutputPort(ChainLayer layer, OutputPortName port)
 {
     Layer  = layer;
     Name   = port;
     Status = PortStatus.Empty;
     Number = port.AbsolutePortNumber(layer);
 }
Esempio n. 2
0
        /// <summary>
        /// This function enables specifying the output device type
        /// </summary>
        /// <param name="socket">socket for executing command to brick</param>
        /// <param name="layer">Specify chain layer number [0 - 3]</param>
        /// <param name="port">Port number [0 - 3]</param>
        /// <param name="type">Output device type, (0x07: Large motor, Medium motor = 0x08)</param>
        /// <param name="requireReply">indicate if the brick should respond OK on method call</param>
        /// <remarks>
        /// Instruction opOutput_Set_Type (LAYER, NO, TYPE)
        /// Opcode 0xA1
        /// Arguments (Data8) LAYER – Specify chain layer number [0 - 3]
        /// (Data8) NO – Port number [0 - 3]
        /// (Data8) TYPE – Output device type, (0x07: Large motor, Medium motor = 0x08)
        /// Dispatch status Unchanged
        /// Description This function enables specifying the output device type
        /// </remarks>
        public static async Task SetType(ISocket socket, ChainLayer layer, OutputPortName port, DeviceType type, bool requireReply = true)
        {
            Command cmd = null;

            using (CommandBuilder cb = new CommandBuilder(requireReply ? CommandType.DIRECT_COMMAND_REPLY : CommandType.DIRECT_COMMAND_NO_REPLY))
            {
                cb.OpCode(OP.opOUTPUT_SET_TYPE);
                cb.SHORT((int)layer);
                cb.SHORT((int)port);
                cb.PAR8((byte)type);
                cmd = cb.ToCommand();
            }
            await socket.Execute(cmd);
        }
Esempio n. 3
0
        /// <summary>
        /// This function enables the program to read the tacho count as sensor input.
        /// </summary>
        /// <param name="socket">socket for executing command to brick</param>
        /// <param name="layer">Specify chain layer number [0 - 3]</param>
        /// <param name="ports">Output bit field [0x00 – 0x0F]</param>
        /// <remarks>
        /// Instruction opOutput_Get_Count (LAYER, NOS, *TACHO)
        /// Opcode 0xB3
        /// Arguments (Data8) LAYER – Specify chain layer number [0 - 3]
        /// (Data8) NOS – Output bit field [0x00 – 0x0F]
        /// (Data32) *TACHO – Tacho count as sensor value
        /// Dispatch status Unchanged
        /// Description This function enables the program to read the tacho count as sensor input.
        /// </remarks>
        public static async Task <int> GetTachoCount(ISocket socket, ChainLayer layer, OutputPortName port)
        {
            Command cmd = null;

            using (CommandBuilder cb = new CommandBuilder(CommandType.DIRECT_COMMAND_REPLY, 4, 0))
            {
                cb.OpCode(OP.opOUTPUT_GET_COUNT);
                cb.PAR8((byte)layer);
                cb.PAR8((byte)port);
                cb.VARIABLE_PAR32(0, PARAMETER_VARIABLE_SCOPE.GLOBAL);
                cmd = cb.ToCommand();
            }

            Response response = await socket.Execute(cmd);

            return(BitConverter.ToInt32(response.PayLoad, 0));
        }
Esempio n. 4
0
        /// <summary>
        /// Read information about external device
        /// </summary>
        /// <param name="port"></param>
        /// <param name="layer"></param>
        /// <returns></returns>
        public async Task <Format> GetFormat(OutputPortName port, ChainLayer layer = ChainLayer.One)
        {
            int portNumber = port.AbsolutePortNumber(layer);

            return(await InputMethods.GetFormat(Brick.Socket, layer, portNumber));
        }
Esempio n. 5
0
 public static int AbsolutePortNumber(this OutputPortName port, ChainLayer layer)
 {
     return((((int)layer * 4) + 16) + (int)port);
 }
Esempio n. 6
0
 public static OutputPortFlag ToFlag(this OutputPortName port)
 {
     return((OutputPortFlag)(1 << (int)port)); //convert to bitfield e.g. 0010 equals port 2
 }
        public async Task Initialize()
        {
            Entries = new List <ConfigEntry>();

            IEnumerable <PortInfo> ports = await Manager.Brick.Console.PortScan();

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < 4; i++)
            {
                sb.AppendLine($"Brick {(ChainLayer)i}");

                int start = i * 4;
                int end   = start + 4;

                IEnumerable <PortInfo> inputPorts = ports.Where(p => p.Number >= start && p.Number < end);
                foreach (PortInfo portInfo in inputPorts)
                {
                    InputPortName name = (InputPortName)portInfo.Number - start;
                    if (portInfo.Status == PortStatus.OK)
                    {
                        ConfigEntry entry = new ConfigEntry
                        {
                            Layer    = i,
                            PortName = name.ToString(),
                            Type     = portInfo.Device.Value,
                        };
                        Entries.Add(entry);
                        sb.AppendLine($"\tPort {name}  - {portInfo.Status}  - {portInfo.Device}");
                    }
                    else
                    {
                        sb.AppendLine($"\tPort {name}  - {portInfo.Status}");
                    }
                }

                start += 16;
                end    = start + 4;

                IEnumerable <PortInfo> outputPorts = ports.Where(p => p.Number >= start && p.Number < end);
                foreach (PortInfo portInfo in outputPorts)
                {
                    OutputPortName name = (OutputPortName)portInfo.Number - start;
                    if (portInfo.Status == PortStatus.OK)
                    {
                        ConfigEntry entry = new ConfigEntry
                        {
                            Layer    = i,
                            PortName = name.ToString(),
                            Type     = portInfo.Device.Value,
                        };
                        Entries.Add(entry);
                        sb.AppendLine($"\tPort {name}  - {portInfo.Status}  - {portInfo.Device}");
                    }
                    else
                    {
                        sb.AppendLine($"\tPort {name}  - {portInfo.Status}");
                    }
                }
            }
            textBoxDeviceList.Text = sb.ToString();
        }
Esempio n. 8
0
        public static void Connect(IOPort brickPorts, List <DeviceOptions> devices)
        {
            foreach (DeviceOptions device in devices)
            {
                ChainLayer layer = device.Layer;

                switch (device.Type)
                {
                case DeviceType.MediumMotor:
                {
                    OutputPortName port       = (OutputPortName)Enum.Parse(typeof(OutputPortName), device.Port, true);
                    int            portNumber = port.AbsolutePortNumber(layer);
                    LoadMediumMotor(device.Id).Connect(brickPorts.Output.Ports[portNumber]);
                    break;
                }

                case DeviceType.LargeMotor:
                {
                    OutputPortName port       = (OutputPortName)Enum.Parse(typeof(OutputPortName), device.Port, true);
                    int            portNumber = port.AbsolutePortNumber(layer);
                    LoadLargeMotor(device.Id).Connect(brickPorts.Output.Ports[portNumber]);
                    break;
                }

                case DeviceType.TouchSensor:
                {
                    InputPortName port       = (InputPortName)Enum.Parse(typeof(InputPortName), device.Port, true);
                    int           portNumber = port.AbsolutePortNumber(layer);
                    LoadTouchSensor(device.Id).Connect(brickPorts.Input.Ports[portNumber]);
                    break;
                }

                case DeviceType.ColorSensor:
                {
                    InputPortName port       = (InputPortName)Enum.Parse(typeof(InputPortName), device.Port, true);
                    int           portNumber = port.AbsolutePortNumber(layer);
                    LoadColorSensor(device.Id).Connect(brickPorts.Input.Ports[portNumber]);
                    break;
                }

                case DeviceType.GyroscopeSensor:
                {
                    InputPortName port       = (InputPortName)Enum.Parse(typeof(InputPortName), device.Port, true);
                    int           portNumber = port.AbsolutePortNumber(layer);
                    LoadGyroscopeSensor(device.Id).Connect(brickPorts.Input.Ports[portNumber]);
                    break;
                }

                case DeviceType.InfraredSensor:
                {
                    InputPortName port       = (InputPortName)Enum.Parse(typeof(InputPortName), device.Port, true);
                    int           portNumber = port.AbsolutePortNumber(layer);
                    LoadInfraredSensor(device.Id).Connect(brickPorts.Input.Ports[portNumber]);
                    break;
                }

                case DeviceType.UltrasonicSensor:
                {
                    InputPortName port       = (InputPortName)Enum.Parse(typeof(InputPortName), device.Port, true);
                    int           portNumber = port.AbsolutePortNumber(layer);
                    LoadUltrasonicSensor(device.Id).Connect(brickPorts.Input.Ports[portNumber]);
                    break;
                }
                }
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="id"></param>
 /// <param name="outputPort"></param>
 /// <param name="polarity"></param>
 /// <param name="layer"></param>
 public void AddMediumMotor(string id, OutputPortName outputPort, Polarity?polarity = null, ChainLayer layer = ChainLayer.One)
 {
     AddDevice(id, DeviceType.MediumMotor, outputPort.ToString(), polarity?.ToString(), layer);
 }