Skip to content

Commit 7d9d6fc

Browse files
authored
Reset overrides before starting a new stream (#2669)
1 parent d6fc29f commit 7d9d6fc

File tree

6 files changed

+95
-5
lines changed

6 files changed

+95
-5
lines changed

ugs-core/src/com/willwinder/universalgcodesender/firmware/AbstractOverrideManager.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ protected AbstractOverrideManager(IController controller, ICommunicator communic
5252
public void statusStringListener(ControllerStatus status) {
5353
onControllerStatus(status);
5454
}
55+
56+
@Override
57+
public void streamComplete() {
58+
resetAll();
59+
}
60+
61+
@Override
62+
public void streamCanceled() {
63+
resetAll();
64+
}
65+
66+
@Override
67+
public void streamStarted() {
68+
resetAll();
69+
}
5570
});
5671
}
5772

ugs-core/src/com/willwinder/universalgcodesender/firmware/DefaultOverrideManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public void setMessageService(MessageService messageService) {
116116
// Not implemented
117117
}
118118

119+
@Override
120+
public void resetAll() {
121+
// Not implemented
122+
}
123+
119124
@Override
120125
public List<Integer> getSliderSteps(OverrideType type) {
121126
return List.of();

ugs-core/src/com/willwinder/universalgcodesender/firmware/IOverrideManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,9 @@ public interface IOverrideManager {
182182
void setRadioTarget(OverrideType type, int value);
183183

184184
void setMessageService(MessageService messageService);
185+
186+
/**
187+
* Resets the overrides
188+
*/
189+
void resetAll();
185190
}

ugs-core/src/com/willwinder/universalgcodesender/firmware/grbl/GrblOverrideManager.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ public void setMessageService(MessageService messageService) {
150150
this.messageService = messageService;
151151
}
152152

153+
@Override
154+
public void resetAll() {
155+
sendOverrideCommand(Overrides.CMD_RAPID_OVR_RESET);
156+
sendOverrideCommand(Overrides.CMD_FEED_OVR_RESET);
157+
sendOverrideCommand(Overrides.CMD_SPINDLE_OVR_RESET);
158+
}
159+
153160
@Override
154161
public int getSliderDefault(OverrideType type) {
155162
return switch (type) {

ugs-core/test/com/willwinder/universalgcodesender/GrblControllerTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ This file is part of Universal Gcode Sender (UGS).
3535
import static com.willwinder.universalgcodesender.model.CommunicatorState.COMM_CHECK;
3636
import static com.willwinder.universalgcodesender.model.CommunicatorState.COMM_IDLE;
3737
import static com.willwinder.universalgcodesender.model.CommunicatorState.COMM_SENDING;
38+
import com.willwinder.universalgcodesender.model.Overrides;
3839
import com.willwinder.universalgcodesender.model.PartialPosition;
3940
import com.willwinder.universalgcodesender.model.UnitUtils;
4041
import com.willwinder.universalgcodesender.services.MessageService;
@@ -717,22 +718,22 @@ public void cancelSendOnDoorStateShouldCancelCommandAndIssueReset() throws Excep
717718

718719
assertEquals(1, mgc.numCancelSendCalls);
719720
assertEquals(0, mgc.numPauseSendCalls);
720-
assertEquals(0, mgc.sentBytes.size());
721+
assertEquals(3, mgc.sentBytes.size());
721722

722723
// First round we will store the last position
723724
instance.rawResponseHandler("<Door|MPos:0.000,0.000,0.000|FS:0,0|Pn:XYZ>");
724725

725726
assertEquals(1, mgc.numCancelSendCalls);
726727
assertEquals(0, mgc.numPauseSendCalls);
727-
assertEquals(0, mgc.sentBytes.size());
728+
assertEquals(3, mgc.sentBytes.size());
728729

729730
// Now we will do the actual cancel
730731
instance.rawResponseHandler("<Door|MPos:0.000,0.000,0.000|FS:0,0|Pn:XYZ>");
731732

732733
assertEquals(2, mgc.numCancelSendCalls);
733734
assertEquals(0, mgc.numPauseSendCalls);
734-
assertEquals(1, mgc.sentBytes.size());
735-
assertEquals(Byte.valueOf(GRBL_RESET_COMMAND), mgc.sentBytes.get(0));
735+
assertEquals(4, mgc.sentBytes.size());
736+
assertEquals(Byte.valueOf(GRBL_RESET_COMMAND), mgc.sentBytes.get(3));
736737
}
737738

738739
private void sendStuff(GrblController instance) throws Exception {
@@ -1293,7 +1294,10 @@ public void errorInCheckModeSending() throws Exception {
12931294
assertEquals(COMM_SENDING, gc.getCommunicatorState());
12941295
assertEquals(ControllerState.CHECK, gc.getControllerStatus().getState());
12951296
assertFalse(gc.isPaused());
1296-
assertEquals(Byte.valueOf(GRBL_PAUSE_COMMAND), mgc.sentBytes.get(0));
1297+
assertEquals(GrblUtils.getOverrideForEnum(Overrides.CMD_RAPID_OVR_RESET, gc.getCapabilities()), mgc.sentBytes.get(0));
1298+
assertEquals(GrblUtils.getOverrideForEnum(Overrides.CMD_FEED_OVR_RESET, gc.getCapabilities()), mgc.sentBytes.get(1));
1299+
assertEquals(GrblUtils.getOverrideForEnum(Overrides.CMD_SPINDLE_OVR_RESET, gc.getCapabilities()), mgc.sentBytes.get(2));
1300+
assertEquals(Byte.valueOf(GRBL_PAUSE_COMMAND), mgc.sentBytes.get(3));
12971301
}
12981302

12991303
@Test

ugs-core/test/com/willwinder/universalgcodesender/firmware/grbl/GrblOverrideManagerTest.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import com.willwinder.universalgcodesender.Capabilities;
44
import com.willwinder.universalgcodesender.CapabilitiesConstants;
5+
import com.willwinder.universalgcodesender.GrblUtils;
56
import com.willwinder.universalgcodesender.IController;
67
import com.willwinder.universalgcodesender.communicator.ICommunicator;
8+
import com.willwinder.universalgcodesender.listeners.ControllerListener;
79
import com.willwinder.universalgcodesender.listeners.ControllerState;
810
import com.willwinder.universalgcodesender.listeners.ControllerStatus;
911
import com.willwinder.universalgcodesender.listeners.ControllerStatusBuilder;
@@ -16,8 +18,12 @@
1618
import static org.junit.Assert.assertTrue;
1719
import org.junit.Before;
1820
import org.junit.Test;
21+
import org.mockito.ArgumentCaptor;
1922
import static org.mockito.ArgumentMatchers.anyByte;
23+
import static org.mockito.ArgumentMatchers.eq;
24+
import org.mockito.Captor;
2025
import org.mockito.Mock;
26+
import static org.mockito.Mockito.doNothing;
2127
import static org.mockito.Mockito.times;
2228
import static org.mockito.Mockito.verify;
2329
import static org.mockito.Mockito.when;
@@ -31,11 +37,16 @@ public class GrblOverrideManagerTest {
3137
private IController controller;
3238
@Mock
3339
private ICommunicator communicator;
40+
41+
@Captor
42+
private ArgumentCaptor<ControllerListener> controllerListenerCaptor;
43+
3444
private GrblOverrideManager overrideManager;
3545

3646
@Before
3747
public void setUp() {
3848
MockitoAnnotations.initMocks(this);
49+
doNothing().when(controller).addListener(controllerListenerCaptor.capture());
3950
overrideManager = new GrblOverrideManager(controller, communicator, new MessageService());
4051
}
4152

@@ -153,6 +164,49 @@ public void hasSettledShouldReturnTrueWhenOverridePercentReachesTarget() {
153164
assertTrue(overrideManager.hasSettled());
154165
}
155166

167+
@Test
168+
public void onStreamCanceledShouldResetOverrides() throws Exception {
169+
mockControllerStatus(ControllerState.IDLE);
170+
mockOverrideCapabilities();
171+
172+
ControllerListener controllerListener = controllerListenerCaptor.getValue();
173+
controllerListener.streamCanceled();
174+
175+
assertOverridesResetted();
176+
}
177+
178+
@Test
179+
public void onStreamCompleteShouldResetOverrides() throws Exception {
180+
mockControllerStatus(ControllerState.IDLE);
181+
mockOverrideCapabilities();
182+
183+
ControllerListener controllerListener = controllerListenerCaptor.getValue();
184+
controllerListener.streamComplete();
185+
186+
assertOverridesResetted();
187+
}
188+
189+
@Test
190+
public void onStreamStartedShouldResetOverrides() throws Exception {
191+
mockControllerStatus(ControllerState.IDLE);
192+
mockOverrideCapabilities();
193+
194+
ControllerListener controllerListener = controllerListenerCaptor.getValue();
195+
controllerListener.streamStarted();
196+
197+
assertOverridesResetted();
198+
}
199+
200+
private void assertOverridesResetted() throws Exception {
201+
verify(communicator, times(1)).sendByteImmediately(eq(getOverrideCommand(Overrides.CMD_RAPID_OVR_RESET)));
202+
verify(communicator, times(1)).sendByteImmediately(eq(getOverrideCommand(Overrides.CMD_FEED_OVR_RESET)));
203+
verify(communicator, times(1)).sendByteImmediately(eq(getOverrideCommand(Overrides.CMD_SPINDLE_OVR_RESET)));
204+
}
205+
206+
private byte getOverrideCommand(Overrides overrides) {
207+
return GrblUtils.getOverrideForEnum(overrides, controller.getCapabilities());
208+
}
209+
156210
private void mockControllerStatus(ControllerState controllerState) {
157211
ControllerStatus controllerStatus = ControllerStatusBuilder.newInstance().setOverrides(new OverridePercents(100, 100, 100)).setState(controllerState).build();
158212
when(controller.getControllerStatus()).thenReturn(controllerStatus);

0 commit comments

Comments
 (0)