private bool StateIsDifferent(irobottypes.ReturnSensors a, irobottypes.ReturnSensors b) { return((a.BumpsWheeldrops != b.BumpsWheeldrops) || (a.CliffFrontLeft != b.CliffFrontLeft) || (a.CliffFrontRight != b.CliffFrontRight) || (a.CliffLeft != b.CliffLeft) || (a.CliffRight != b.CliffRight) || (a.DirtDetectorLeft != b.DirtDetectorLeft) || (a.DirtDetectorRight != b.DirtDetectorRight) || (a.MotorOvercurrents != b.MotorOvercurrents) || (a.RoombaMode != b.RoombaMode) || (a.VirtualWall != b.VirtualWall) || (a.Wall != b.Wall)); }
private void ProcessSensors(roomba.ReturnSensors sensors) { foreach (bumper.ContactSensor bumper in _state.Sensors) { bool bump = false; // Find the Roomba sensor which corresponds to this bumper switch ((RoombaBumpers)bumper.HardwareIdentifier) { case RoombaBumpers.LeftBumper: bump = ((sensors.BumpsWheeldrops & roomba.BumpsWheeldrops.BumpLeft) == roomba.BumpsWheeldrops.BumpLeft); break; case RoombaBumpers.RightBumper: bump = ((sensors.BumpsWheeldrops & roomba.BumpsWheeldrops.BumpRight) == roomba.BumpsWheeldrops.BumpRight); break; case RoombaBumpers.Wall: bump = sensors.Wall; break; case RoombaBumpers.VirtualWall: bump = sensors.VirtualWall; break; case RoombaBumpers.CliffLeft: bump = sensors.CliffLeft; break; case RoombaBumpers.CliffFrontLeft: bump = sensors.CliffFrontLeft; break; case RoombaBumpers.CliffFrontRight: bump = sensors.CliffFrontRight; break; case RoombaBumpers.CliffRight: bump = sensors.CliffRight; break; case RoombaBumpers.WheelDropLeft: bump = ((sensors.BumpsWheeldrops & roomba.BumpsWheeldrops.WheelDropLeft) == roomba.BumpsWheeldrops.WheelDropLeft); break; case RoombaBumpers.WheelDropRight: bump = ((sensors.BumpsWheeldrops & roomba.BumpsWheeldrops.WheelDropRight) == roomba.BumpsWheeldrops.WheelDropRight); break; case RoombaBumpers.WheelDropRear: bump = ((sensors.BumpsWheeldrops & roomba.BumpsWheeldrops.WheelDropCaster) == roomba.BumpsWheeldrops.WheelDropCaster); break; case (RoombaBumpers)99: // wheels stalled bump = ((int)(sensors.MotorOvercurrents & (roomba.MotorOvercurrents.DriveLeft | roomba.MotorOvercurrents.DriveRight)) != 0); break; } if (bumper.Pressed != bump) { bumper.Pressed = bump; this.SendNotification <bumper.Update>(_subMgrPort, new bumper.Update(bumper)); } } }