/// <summary> /// Changes the active group to the group specified. /// </summary> /// <param name="localSummit">Summit System</param> /// <param name="groupToChangeTo">Medtronic Active Group Format to change to</param> /// <param name="localSenseModel">Sense Model that uses the streaming parameters for turning stream on and off</param> /// <returns>Tuple with bool true if success or false if not. string give error message</returns> public async Task <Tuple <bool, string> > ChangeActiveGroup(SummitSystem localSummit, ActiveGroup groupToChangeTo, SenseModel localSenseModel) { if (localSummit == null || localSummit.IsDisposed) { return(Tuple.Create(false, "Error: Summit null or disposed.")); } APIReturnInfo bufferReturnInfo; try { int counter = 5; summitSensing.StopStreaming(localSummit, true); do { bufferReturnInfo = await Task.Run(() => localSummit.StimChangeActiveGroup(groupToChangeTo)); if (counter < 5) { Thread.Sleep(400); } counter--; } while ((bufferReturnInfo.RejectCode != 0) && counter > 0); //Start streaming summitSensing.StartStreaming(localSummit, localSenseModel, true); if ((bufferReturnInfo.RejectCode != 0) && counter == 0) { _log.Warn(":: Error: Medtronic API return error changing active group: " + bufferReturnInfo.Descriptor + ". Reject Code: " + bufferReturnInfo.RejectCode); return(Tuple.Create(false, "Error: Medtronic API return error changing active group: " + bufferReturnInfo.Descriptor + ". Reject Code: " + bufferReturnInfo.RejectCode)); } } catch (Exception e) { _log.Error(e); return(Tuple.Create(false, "Error: Could not change groups")); } return(Tuple.Create(true, "Successfully changed groups")); }