public static MorphicResult <MorphicUnit, MorphicUnit> SetState(FocusAssistState value) { byte[] buffer; switch (value) { case FocusAssistState.AlarmsOnly: buffer = new byte[] { 0x02, 0x00, 0x00, 0x00 }; break; case FocusAssistState.PriorityOnly: buffer = new byte[] { 0x01, 0x00, 0x00, 0x00 }; break; case FocusAssistState.Off: buffer = new byte[] { 0x00, 0x00, 0x00, 0x00 }; break; default: throw new ArgumentOutOfRangeException(nameof(value)); } // update Focus Assist state (e.g. profile) var updateWnfStateDataResult = FocusAssist.UpdateWnfStateData(FocusAssist.WNF_SHEL_QUIETHOURS_ACTIVE_PROFILE_CHANGED, buffer); if (updateWnfStateDataResult.IsError == true) { return(MorphicResult.ErrorResult()); } // update UI to match mode change updateWnfStateDataResult = FocusAssist.UpdateWnfStateData(FocusAssist.WNF_SHEL_QUIET_MOMENT_SHELL_MODE_CHANGED, buffer); if (updateWnfStateDataResult.IsError == true) { return(MorphicResult.ErrorResult()); } return(MorphicResult.OkResult()); }
public static MorphicResult <FocusAssistState, MorphicUnit> GetState() { var queryWnfStateDataResult = FocusAssist.QueryWnfStateData(FocusAssist.WNF_SHEL_QUIETHOURS_ACTIVE_PROFILE_CHANGED); if (queryWnfStateDataResult.IsError == true) { return(MorphicResult.ErrorResult()); } var stateData = queryWnfStateDataResult.Value !; // parse the result if (stateData.Length != 4) { return(MorphicResult.ErrorResult()); } if (stateData[0] == 0x00 && stateData[1] == 0x00 && stateData[2] == 0x00 && stateData[3] == 0x00) { // focus assist off return(MorphicResult.OkResult(FocusAssistState.Off)); } else if (stateData[0] == 0x01 && stateData[1] == 0x00 && stateData[2] == 0x00 && stateData[3] == 0x00) { // focus assist on, priority only return(MorphicResult.OkResult(FocusAssistState.PriorityOnly)); } else if (stateData[0] == 0x02 && stateData[1] == 0x00 && stateData[2] == 0x00 && stateData[3] == 0x00) { // focus assist on, alarms only return(MorphicResult.OkResult(FocusAssistState.AlarmsOnly)); } else { // unknown state return(MorphicResult.ErrorResult()); } }