public virtual IEnumerator<ITask> SetLedHandler(SetLed ledStatus) { var ledStatusByte = BitConverter.GetBytes((int) ledStatus.Body.Status); var ledWrite = new LegoLSWrite { Port = _state.SensorPort, TXData = new byte[] {0x10, 0x51, ledStatusByte[0]}, ExpectedI2CResponseSize = 0 }; Activate(Arbiter.Choice(_legoBrickPort.SendNxtCommand(ledWrite), x => ledStatus.ResponsePort.Post(new DefaultUpdateResponseType()), f => ledStatus.ResponsePort.Post(f))); yield break; }
public virtual IEnumerator<ITask> GetHandler(Get get) { var write = new LegoLSWrite { Port = _state.SensorPort, TXData = new byte[] {0x10, 0x07}, ExpectedI2CResponseSize = 15 }; Activate(Arbiter.Choice(_legoBrickPort.SendNxtCommand(write), EmptyHandler, f => LogInfo(f.ToException().InnerException + " " + f.ToException().Message))); Activate(Arbiter.Receive(false, TimeoutPort(500), EmptyHandler)); var read = new LegoLSRead(_state.SensorPort); Activate(Arbiter.Choice(_legoBrickPort.SendNxtCommand(read), r => { var response = LegoResponse.Upcast<I2CResponseSensorType>(r); if (response != null) { LogInfo(string.Format("Read response: {0} {1}", response.Manufacturer, response.SensorType)); _state.ManufactureInfo = string.Format("{0}", response.SensorType); //_state.ManufactureInfo = string.Format("Hiya!"); LogInfo(string.Format(_state.ManufactureInfo)); get.ResponsePort.Post(_state); } }, f => { LogInfo(f.Detail.ToString()); get.ResponsePort.Post(f); })); //get.ResponsePort.Post(_state); yield break; }
public virtual IEnumerator<ITask> ReadFromI2cAddressHandler(ReadFromI2cAddress readRequest) { var write = new LegoLSWrite { Port = _state.SensorPort, TXData = readRequest.Body.TxData, ExpectedI2CResponseSize = readRequest.Body.ExpectedResponseSize }; Activate(Arbiter.Choice(_legoBrickPort.SendNxtCommand(write), EmptyHandler, f => LogInfo(f.ToException().InnerException + " " + f.ToException().Message))); Activate(Arbiter.Receive(false, TimeoutPort(80), EmptyHandler)); var read = new LegoLSRead(_state.SensorPort); Activate(Arbiter.Choice(_legoBrickPort.SendNxtCommand(read), r => readRequest.ResponsePort.Post(new ReadResponse {Bytes = r.CommandData}), f => readRequest.ResponsePort.Post(f))); yield break; }
/// <summary> /// Send Any Command, including a two-phase LowSpeed command (LSWrite) /// </summary> /// <param name="cmd"></param> /// <param name="priority"></param> /// <returns></returns> public PortSet<LegoResponse, Fault> SendAnyCommand(LegoCommand cmd, bool priority) { if (cmd.LegoCommandCode == LegoCommandCode.LSWrite) { LegoLSWrite cmdLsWrite = cmd as LegoLSWrite; if (cmdLsWrite == null) cmdLsWrite = new LegoLSWrite(cmd); // Send Low Speed Command SendLowSpeedCommand sendCmd = new SendLowSpeedCommand(cmdLsWrite); _internalI2CPort.Post(sendCmd); return sendCmd.ResponsePort; } return _brickPort.SendCommand(cmd, priority); }