001/*
002 * Copyright (C) Cross The Road Electronics.  All rights reserved.
003 * License information can be found in CTRE_LICENSE.txt
004 * For support and suggestions contact support@ctr-electronics.com or file
005 * an issue tracker at https://github.com/CrossTheRoadElec/Phoenix-Releases
006 */
007package com.ctre.phoenix6.configs;
008
009import com.ctre.phoenix6.StatusCode;
010import com.ctre.phoenix6.hardware.DeviceIdentifier;
011import com.ctre.phoenix6.configs.jni.ConfigJNI;
012import com.ctre.phoenix6.spns.*;
013
014/**
015 * Class description for the Talon FX integrated motor controller.
016 *
017 * This handles the configurations for the {@link com.ctre.phoenix6.hardware.TalonFX}
018 */
019public class TalonFXConfigurator extends ParentConfigurator
020{
021    public TalonFXConfigurator (DeviceIdentifier id)
022    {
023        super(id);
024    }
025
026    /**
027     * Refreshes the values of the specified config group.
028     * <p>
029     * This will wait up to {@link #DefaultTimeoutSeconds}.
030     * <p>
031     * Call to refresh the selected configs from the device.
032     *
033     * @param configs The configs to refresh
034     * @return StatusCode of refreshing the configs
035     */
036    public StatusCode refresh(TalonFXConfiguration configs)
037    {
038        return refresh(configs, DefaultTimeoutSeconds);
039    }
040
041    /**
042     * Refreshes the values of the specified config group.
043     * <p>
044     * Call to refresh the selected configs from the device.
045     *
046     * @param configs The configs to refresh
047     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
048     * @return StatusCode of refreshing the configs
049     */
050    public StatusCode refresh(TalonFXConfiguration configs, double timeoutSeconds)
051    {
052        StringBuilder serializedString = new StringBuilder();
053        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
054        if (err == StatusCode.OK) {
055            /* Only deserialize if we successfully got configs */
056            configs.deserialize(serializedString.toString());
057        }
058        return err;
059    }
060
061    /**
062     * Applies the contents of the specified config to the device.
063     * <p>
064     * This will wait up to {@link #DefaultTimeoutSeconds}.
065     * <p>
066     * Call to apply the selected configs.
067     *
068     * @param configs Configs to apply against.
069     * @return StatusCode of the set command
070     */
071    public StatusCode apply(TalonFXConfiguration configs)
072    {
073        return apply(configs, DefaultTimeoutSeconds);
074    }
075
076    /**
077     * Applies the contents of the specified config to the device.
078     * <p>
079     * Call to apply the selected configs.
080     *
081     * @param configs Configs to apply against.
082     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
083     * @return StatusCode of the set command
084     */
085    public StatusCode apply(TalonFXConfiguration configs, double timeoutSeconds)
086    {
087        return setConfigsPrivate(configs.serialize(), timeoutSeconds, configs.FutureProofConfigs, false);
088    }
089
090
091    /**
092     * Refreshes the values of the specified config group.
093     * <p>
094     * This will wait up to {@link #DefaultTimeoutSeconds}.
095     * <p>
096     * Call to refresh the selected configs from the device.
097     *
098     * @param configs The configs to refresh
099     * @return StatusCode of refreshing the configs
100     */
101    public StatusCode refresh(MotorOutputConfigs configs)
102    {
103        return refresh(configs, DefaultTimeoutSeconds);
104    }
105
106    /**
107     * Refreshes the values of the specified config group.
108     * <p>
109     * Call to refresh the selected configs from the device.
110     *
111     * @param configs The configs to refresh
112     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
113     * @return StatusCode of refreshing the configs
114     */
115    public StatusCode refresh(MotorOutputConfigs configs, double timeoutSeconds)
116    {
117        StringBuilder serializedString = new StringBuilder();
118        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
119        if (err == StatusCode.OK) {
120            /* Only deserialize if we successfully got configs */
121            configs.deserialize(serializedString.toString());
122        }
123        return err;
124    }
125
126    /**
127     * Applies the contents of the specified config to the device.
128     * <p>
129     * This will wait up to {@link #DefaultTimeoutSeconds}.
130     * <p>
131     * Call to apply the selected configs.
132     *
133     * @param configs Configs to apply against.
134     * @return StatusCode of the set command
135     */
136    public StatusCode apply(MotorOutputConfigs configs)
137    {
138        return apply(configs, DefaultTimeoutSeconds);
139    }
140
141    /**
142     * Applies the contents of the specified config to the device.
143     * <p>
144     * Call to apply the selected configs.
145     *
146     * @param configs Configs to apply against.
147     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
148     * @return StatusCode of the set command
149     */
150    public StatusCode apply(MotorOutputConfigs configs, double timeoutSeconds)
151    {
152        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
153    }
154
155
156    /**
157     * Refreshes the values of the specified config group.
158     * <p>
159     * This will wait up to {@link #DefaultTimeoutSeconds}.
160     * <p>
161     * Call to refresh the selected configs from the device.
162     *
163     * @param configs The configs to refresh
164     * @return StatusCode of refreshing the configs
165     */
166    public StatusCode refresh(CurrentLimitsConfigs configs)
167    {
168        return refresh(configs, DefaultTimeoutSeconds);
169    }
170
171    /**
172     * Refreshes the values of the specified config group.
173     * <p>
174     * Call to refresh the selected configs from the device.
175     *
176     * @param configs The configs to refresh
177     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
178     * @return StatusCode of refreshing the configs
179     */
180    public StatusCode refresh(CurrentLimitsConfigs configs, double timeoutSeconds)
181    {
182        StringBuilder serializedString = new StringBuilder();
183        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
184        if (err == StatusCode.OK) {
185            /* Only deserialize if we successfully got configs */
186            configs.deserialize(serializedString.toString());
187        }
188        return err;
189    }
190
191    /**
192     * Applies the contents of the specified config to the device.
193     * <p>
194     * This will wait up to {@link #DefaultTimeoutSeconds}.
195     * <p>
196     * Call to apply the selected configs.
197     *
198     * @param configs Configs to apply against.
199     * @return StatusCode of the set command
200     */
201    public StatusCode apply(CurrentLimitsConfigs configs)
202    {
203        return apply(configs, DefaultTimeoutSeconds);
204    }
205
206    /**
207     * Applies the contents of the specified config to the device.
208     * <p>
209     * Call to apply the selected configs.
210     *
211     * @param configs Configs to apply against.
212     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
213     * @return StatusCode of the set command
214     */
215    public StatusCode apply(CurrentLimitsConfigs configs, double timeoutSeconds)
216    {
217        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
218    }
219
220
221    /**
222     * Refreshes the values of the specified config group.
223     * <p>
224     * This will wait up to {@link #DefaultTimeoutSeconds}.
225     * <p>
226     * Call to refresh the selected configs from the device.
227     *
228     * @param configs The configs to refresh
229     * @return StatusCode of refreshing the configs
230     */
231    public StatusCode refresh(VoltageConfigs configs)
232    {
233        return refresh(configs, DefaultTimeoutSeconds);
234    }
235
236    /**
237     * Refreshes the values of the specified config group.
238     * <p>
239     * Call to refresh the selected configs from the device.
240     *
241     * @param configs The configs to refresh
242     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
243     * @return StatusCode of refreshing the configs
244     */
245    public StatusCode refresh(VoltageConfigs configs, double timeoutSeconds)
246    {
247        StringBuilder serializedString = new StringBuilder();
248        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
249        if (err == StatusCode.OK) {
250            /* Only deserialize if we successfully got configs */
251            configs.deserialize(serializedString.toString());
252        }
253        return err;
254    }
255
256    /**
257     * Applies the contents of the specified config to the device.
258     * <p>
259     * This will wait up to {@link #DefaultTimeoutSeconds}.
260     * <p>
261     * Call to apply the selected configs.
262     *
263     * @param configs Configs to apply against.
264     * @return StatusCode of the set command
265     */
266    public StatusCode apply(VoltageConfigs configs)
267    {
268        return apply(configs, DefaultTimeoutSeconds);
269    }
270
271    /**
272     * Applies the contents of the specified config to the device.
273     * <p>
274     * Call to apply the selected configs.
275     *
276     * @param configs Configs to apply against.
277     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
278     * @return StatusCode of the set command
279     */
280    public StatusCode apply(VoltageConfigs configs, double timeoutSeconds)
281    {
282        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
283    }
284
285
286    /**
287     * Refreshes the values of the specified config group.
288     * <p>
289     * This will wait up to {@link #DefaultTimeoutSeconds}.
290     * <p>
291     * Call to refresh the selected configs from the device.
292     *
293     * @param configs The configs to refresh
294     * @return StatusCode of refreshing the configs
295     */
296    public StatusCode refresh(TorqueCurrentConfigs configs)
297    {
298        return refresh(configs, DefaultTimeoutSeconds);
299    }
300
301    /**
302     * Refreshes the values of the specified config group.
303     * <p>
304     * Call to refresh the selected configs from the device.
305     *
306     * @param configs The configs to refresh
307     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
308     * @return StatusCode of refreshing the configs
309     */
310    public StatusCode refresh(TorqueCurrentConfigs configs, double timeoutSeconds)
311    {
312        StringBuilder serializedString = new StringBuilder();
313        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
314        if (err == StatusCode.OK) {
315            /* Only deserialize if we successfully got configs */
316            configs.deserialize(serializedString.toString());
317        }
318        return err;
319    }
320
321    /**
322     * Applies the contents of the specified config to the device.
323     * <p>
324     * This will wait up to {@link #DefaultTimeoutSeconds}.
325     * <p>
326     * Call to apply the selected configs.
327     *
328     * @param configs Configs to apply against.
329     * @return StatusCode of the set command
330     */
331    public StatusCode apply(TorqueCurrentConfigs configs)
332    {
333        return apply(configs, DefaultTimeoutSeconds);
334    }
335
336    /**
337     * Applies the contents of the specified config to the device.
338     * <p>
339     * Call to apply the selected configs.
340     *
341     * @param configs Configs to apply against.
342     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
343     * @return StatusCode of the set command
344     */
345    public StatusCode apply(TorqueCurrentConfigs configs, double timeoutSeconds)
346    {
347        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
348    }
349
350
351    /**
352     * Refreshes the values of the specified config group.
353     * <p>
354     * This will wait up to {@link #DefaultTimeoutSeconds}.
355     * <p>
356     * Call to refresh the selected configs from the device.
357     *
358     * @param configs The configs to refresh
359     * @return StatusCode of refreshing the configs
360     */
361    public StatusCode refresh(FeedbackConfigs configs)
362    {
363        return refresh(configs, DefaultTimeoutSeconds);
364    }
365
366    /**
367     * Refreshes the values of the specified config group.
368     * <p>
369     * Call to refresh the selected configs from the device.
370     *
371     * @param configs The configs to refresh
372     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
373     * @return StatusCode of refreshing the configs
374     */
375    public StatusCode refresh(FeedbackConfigs configs, double timeoutSeconds)
376    {
377        StringBuilder serializedString = new StringBuilder();
378        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
379        if (err == StatusCode.OK) {
380            /* Only deserialize if we successfully got configs */
381            configs.deserialize(serializedString.toString());
382        }
383        return err;
384    }
385
386    /**
387     * Applies the contents of the specified config to the device.
388     * <p>
389     * This will wait up to {@link #DefaultTimeoutSeconds}.
390     * <p>
391     * Call to apply the selected configs.
392     *
393     * @param configs Configs to apply against.
394     * @return StatusCode of the set command
395     */
396    public StatusCode apply(FeedbackConfigs configs)
397    {
398        return apply(configs, DefaultTimeoutSeconds);
399    }
400
401    /**
402     * Applies the contents of the specified config to the device.
403     * <p>
404     * Call to apply the selected configs.
405     *
406     * @param configs Configs to apply against.
407     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
408     * @return StatusCode of the set command
409     */
410    public StatusCode apply(FeedbackConfigs configs, double timeoutSeconds)
411    {
412        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
413    }
414
415
416    /**
417     * Refreshes the values of the specified config group.
418     * <p>
419     * This will wait up to {@link #DefaultTimeoutSeconds}.
420     * <p>
421     * Call to refresh the selected configs from the device.
422     *
423     * @param configs The configs to refresh
424     * @return StatusCode of refreshing the configs
425     */
426    public StatusCode refresh(DifferentialSensorsConfigs configs)
427    {
428        return refresh(configs, DefaultTimeoutSeconds);
429    }
430
431    /**
432     * Refreshes the values of the specified config group.
433     * <p>
434     * Call to refresh the selected configs from the device.
435     *
436     * @param configs The configs to refresh
437     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
438     * @return StatusCode of refreshing the configs
439     */
440    public StatusCode refresh(DifferentialSensorsConfigs configs, double timeoutSeconds)
441    {
442        StringBuilder serializedString = new StringBuilder();
443        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
444        if (err == StatusCode.OK) {
445            /* Only deserialize if we successfully got configs */
446            configs.deserialize(serializedString.toString());
447        }
448        return err;
449    }
450
451    /**
452     * Applies the contents of the specified config to the device.
453     * <p>
454     * This will wait up to {@link #DefaultTimeoutSeconds}.
455     * <p>
456     * Call to apply the selected configs.
457     *
458     * @param configs Configs to apply against.
459     * @return StatusCode of the set command
460     */
461    public StatusCode apply(DifferentialSensorsConfigs configs)
462    {
463        return apply(configs, DefaultTimeoutSeconds);
464    }
465
466    /**
467     * Applies the contents of the specified config to the device.
468     * <p>
469     * Call to apply the selected configs.
470     *
471     * @param configs Configs to apply against.
472     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
473     * @return StatusCode of the set command
474     */
475    public StatusCode apply(DifferentialSensorsConfigs configs, double timeoutSeconds)
476    {
477        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
478    }
479
480
481    /**
482     * Refreshes the values of the specified config group.
483     * <p>
484     * This will wait up to {@link #DefaultTimeoutSeconds}.
485     * <p>
486     * Call to refresh the selected configs from the device.
487     *
488     * @param configs The configs to refresh
489     * @return StatusCode of refreshing the configs
490     */
491    public StatusCode refresh(DifferentialConstantsConfigs configs)
492    {
493        return refresh(configs, DefaultTimeoutSeconds);
494    }
495
496    /**
497     * Refreshes the values of the specified config group.
498     * <p>
499     * Call to refresh the selected configs from the device.
500     *
501     * @param configs The configs to refresh
502     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
503     * @return StatusCode of refreshing the configs
504     */
505    public StatusCode refresh(DifferentialConstantsConfigs configs, double timeoutSeconds)
506    {
507        StringBuilder serializedString = new StringBuilder();
508        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
509        if (err == StatusCode.OK) {
510            /* Only deserialize if we successfully got configs */
511            configs.deserialize(serializedString.toString());
512        }
513        return err;
514    }
515
516    /**
517     * Applies the contents of the specified config to the device.
518     * <p>
519     * This will wait up to {@link #DefaultTimeoutSeconds}.
520     * <p>
521     * Call to apply the selected configs.
522     *
523     * @param configs Configs to apply against.
524     * @return StatusCode of the set command
525     */
526    public StatusCode apply(DifferentialConstantsConfigs configs)
527    {
528        return apply(configs, DefaultTimeoutSeconds);
529    }
530
531    /**
532     * Applies the contents of the specified config to the device.
533     * <p>
534     * Call to apply the selected configs.
535     *
536     * @param configs Configs to apply against.
537     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
538     * @return StatusCode of the set command
539     */
540    public StatusCode apply(DifferentialConstantsConfigs configs, double timeoutSeconds)
541    {
542        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
543    }
544
545
546    /**
547     * Refreshes the values of the specified config group.
548     * <p>
549     * This will wait up to {@link #DefaultTimeoutSeconds}.
550     * <p>
551     * Call to refresh the selected configs from the device.
552     *
553     * @param configs The configs to refresh
554     * @return StatusCode of refreshing the configs
555     */
556    public StatusCode refresh(OpenLoopRampsConfigs configs)
557    {
558        return refresh(configs, DefaultTimeoutSeconds);
559    }
560
561    /**
562     * Refreshes the values of the specified config group.
563     * <p>
564     * Call to refresh the selected configs from the device.
565     *
566     * @param configs The configs to refresh
567     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
568     * @return StatusCode of refreshing the configs
569     */
570    public StatusCode refresh(OpenLoopRampsConfigs configs, double timeoutSeconds)
571    {
572        StringBuilder serializedString = new StringBuilder();
573        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
574        if (err == StatusCode.OK) {
575            /* Only deserialize if we successfully got configs */
576            configs.deserialize(serializedString.toString());
577        }
578        return err;
579    }
580
581    /**
582     * Applies the contents of the specified config to the device.
583     * <p>
584     * This will wait up to {@link #DefaultTimeoutSeconds}.
585     * <p>
586     * Call to apply the selected configs.
587     *
588     * @param configs Configs to apply against.
589     * @return StatusCode of the set command
590     */
591    public StatusCode apply(OpenLoopRampsConfigs configs)
592    {
593        return apply(configs, DefaultTimeoutSeconds);
594    }
595
596    /**
597     * Applies the contents of the specified config to the device.
598     * <p>
599     * Call to apply the selected configs.
600     *
601     * @param configs Configs to apply against.
602     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
603     * @return StatusCode of the set command
604     */
605    public StatusCode apply(OpenLoopRampsConfigs configs, double timeoutSeconds)
606    {
607        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
608    }
609
610
611    /**
612     * Refreshes the values of the specified config group.
613     * <p>
614     * This will wait up to {@link #DefaultTimeoutSeconds}.
615     * <p>
616     * Call to refresh the selected configs from the device.
617     *
618     * @param configs The configs to refresh
619     * @return StatusCode of refreshing the configs
620     */
621    public StatusCode refresh(ClosedLoopRampsConfigs configs)
622    {
623        return refresh(configs, DefaultTimeoutSeconds);
624    }
625
626    /**
627     * Refreshes the values of the specified config group.
628     * <p>
629     * Call to refresh the selected configs from the device.
630     *
631     * @param configs The configs to refresh
632     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
633     * @return StatusCode of refreshing the configs
634     */
635    public StatusCode refresh(ClosedLoopRampsConfigs configs, double timeoutSeconds)
636    {
637        StringBuilder serializedString = new StringBuilder();
638        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
639        if (err == StatusCode.OK) {
640            /* Only deserialize if we successfully got configs */
641            configs.deserialize(serializedString.toString());
642        }
643        return err;
644    }
645
646    /**
647     * Applies the contents of the specified config to the device.
648     * <p>
649     * This will wait up to {@link #DefaultTimeoutSeconds}.
650     * <p>
651     * Call to apply the selected configs.
652     *
653     * @param configs Configs to apply against.
654     * @return StatusCode of the set command
655     */
656    public StatusCode apply(ClosedLoopRampsConfigs configs)
657    {
658        return apply(configs, DefaultTimeoutSeconds);
659    }
660
661    /**
662     * Applies the contents of the specified config to the device.
663     * <p>
664     * Call to apply the selected configs.
665     *
666     * @param configs Configs to apply against.
667     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
668     * @return StatusCode of the set command
669     */
670    public StatusCode apply(ClosedLoopRampsConfigs configs, double timeoutSeconds)
671    {
672        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
673    }
674
675
676    /**
677     * Refreshes the values of the specified config group.
678     * <p>
679     * This will wait up to {@link #DefaultTimeoutSeconds}.
680     * <p>
681     * Call to refresh the selected configs from the device.
682     *
683     * @param configs The configs to refresh
684     * @return StatusCode of refreshing the configs
685     */
686    public StatusCode refresh(HardwareLimitSwitchConfigs configs)
687    {
688        return refresh(configs, DefaultTimeoutSeconds);
689    }
690
691    /**
692     * Refreshes the values of the specified config group.
693     * <p>
694     * Call to refresh the selected configs from the device.
695     *
696     * @param configs The configs to refresh
697     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
698     * @return StatusCode of refreshing the configs
699     */
700    public StatusCode refresh(HardwareLimitSwitchConfigs configs, double timeoutSeconds)
701    {
702        StringBuilder serializedString = new StringBuilder();
703        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
704        if (err == StatusCode.OK) {
705            /* Only deserialize if we successfully got configs */
706            configs.deserialize(serializedString.toString());
707        }
708        return err;
709    }
710
711    /**
712     * Applies the contents of the specified config to the device.
713     * <p>
714     * This will wait up to {@link #DefaultTimeoutSeconds}.
715     * <p>
716     * Call to apply the selected configs.
717     *
718     * @param configs Configs to apply against.
719     * @return StatusCode of the set command
720     */
721    public StatusCode apply(HardwareLimitSwitchConfigs configs)
722    {
723        return apply(configs, DefaultTimeoutSeconds);
724    }
725
726    /**
727     * Applies the contents of the specified config to the device.
728     * <p>
729     * Call to apply the selected configs.
730     *
731     * @param configs Configs to apply against.
732     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
733     * @return StatusCode of the set command
734     */
735    public StatusCode apply(HardwareLimitSwitchConfigs configs, double timeoutSeconds)
736    {
737        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
738    }
739
740
741    /**
742     * Refreshes the values of the specified config group.
743     * <p>
744     * This will wait up to {@link #DefaultTimeoutSeconds}.
745     * <p>
746     * Call to refresh the selected configs from the device.
747     *
748     * @param configs The configs to refresh
749     * @return StatusCode of refreshing the configs
750     */
751    public StatusCode refresh(AudioConfigs configs)
752    {
753        return refresh(configs, DefaultTimeoutSeconds);
754    }
755
756    /**
757     * Refreshes the values of the specified config group.
758     * <p>
759     * Call to refresh the selected configs from the device.
760     *
761     * @param configs The configs to refresh
762     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
763     * @return StatusCode of refreshing the configs
764     */
765    public StatusCode refresh(AudioConfigs configs, double timeoutSeconds)
766    {
767        StringBuilder serializedString = new StringBuilder();
768        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
769        if (err == StatusCode.OK) {
770            /* Only deserialize if we successfully got configs */
771            configs.deserialize(serializedString.toString());
772        }
773        return err;
774    }
775
776    /**
777     * Applies the contents of the specified config to the device.
778     * <p>
779     * This will wait up to {@link #DefaultTimeoutSeconds}.
780     * <p>
781     * Call to apply the selected configs.
782     *
783     * @param configs Configs to apply against.
784     * @return StatusCode of the set command
785     */
786    public StatusCode apply(AudioConfigs configs)
787    {
788        return apply(configs, DefaultTimeoutSeconds);
789    }
790
791    /**
792     * Applies the contents of the specified config to the device.
793     * <p>
794     * Call to apply the selected configs.
795     *
796     * @param configs Configs to apply against.
797     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
798     * @return StatusCode of the set command
799     */
800    public StatusCode apply(AudioConfigs configs, double timeoutSeconds)
801    {
802        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
803    }
804
805
806    /**
807     * Refreshes the values of the specified config group.
808     * <p>
809     * This will wait up to {@link #DefaultTimeoutSeconds}.
810     * <p>
811     * Call to refresh the selected configs from the device.
812     *
813     * @param configs The configs to refresh
814     * @return StatusCode of refreshing the configs
815     */
816    public StatusCode refresh(SoftwareLimitSwitchConfigs configs)
817    {
818        return refresh(configs, DefaultTimeoutSeconds);
819    }
820
821    /**
822     * Refreshes the values of the specified config group.
823     * <p>
824     * Call to refresh the selected configs from the device.
825     *
826     * @param configs The configs to refresh
827     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
828     * @return StatusCode of refreshing the configs
829     */
830    public StatusCode refresh(SoftwareLimitSwitchConfigs configs, double timeoutSeconds)
831    {
832        StringBuilder serializedString = new StringBuilder();
833        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
834        if (err == StatusCode.OK) {
835            /* Only deserialize if we successfully got configs */
836            configs.deserialize(serializedString.toString());
837        }
838        return err;
839    }
840
841    /**
842     * Applies the contents of the specified config to the device.
843     * <p>
844     * This will wait up to {@link #DefaultTimeoutSeconds}.
845     * <p>
846     * Call to apply the selected configs.
847     *
848     * @param configs Configs to apply against.
849     * @return StatusCode of the set command
850     */
851    public StatusCode apply(SoftwareLimitSwitchConfigs configs)
852    {
853        return apply(configs, DefaultTimeoutSeconds);
854    }
855
856    /**
857     * Applies the contents of the specified config to the device.
858     * <p>
859     * Call to apply the selected configs.
860     *
861     * @param configs Configs to apply against.
862     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
863     * @return StatusCode of the set command
864     */
865    public StatusCode apply(SoftwareLimitSwitchConfigs configs, double timeoutSeconds)
866    {
867        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
868    }
869
870
871    /**
872     * Refreshes the values of the specified config group.
873     * <p>
874     * This will wait up to {@link #DefaultTimeoutSeconds}.
875     * <p>
876     * Call to refresh the selected configs from the device.
877     *
878     * @param configs The configs to refresh
879     * @return StatusCode of refreshing the configs
880     */
881    public StatusCode refresh(MotionMagicConfigs configs)
882    {
883        return refresh(configs, DefaultTimeoutSeconds);
884    }
885
886    /**
887     * Refreshes the values of the specified config group.
888     * <p>
889     * Call to refresh the selected configs from the device.
890     *
891     * @param configs The configs to refresh
892     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
893     * @return StatusCode of refreshing the configs
894     */
895    public StatusCode refresh(MotionMagicConfigs configs, double timeoutSeconds)
896    {
897        StringBuilder serializedString = new StringBuilder();
898        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
899        if (err == StatusCode.OK) {
900            /* Only deserialize if we successfully got configs */
901            configs.deserialize(serializedString.toString());
902        }
903        return err;
904    }
905
906    /**
907     * Applies the contents of the specified config to the device.
908     * <p>
909     * This will wait up to {@link #DefaultTimeoutSeconds}.
910     * <p>
911     * Call to apply the selected configs.
912     *
913     * @param configs Configs to apply against.
914     * @return StatusCode of the set command
915     */
916    public StatusCode apply(MotionMagicConfigs configs)
917    {
918        return apply(configs, DefaultTimeoutSeconds);
919    }
920
921    /**
922     * Applies the contents of the specified config to the device.
923     * <p>
924     * Call to apply the selected configs.
925     *
926     * @param configs Configs to apply against.
927     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
928     * @return StatusCode of the set command
929     */
930    public StatusCode apply(MotionMagicConfigs configs, double timeoutSeconds)
931    {
932        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
933    }
934
935
936    /**
937     * Refreshes the values of the specified config group.
938     * <p>
939     * This will wait up to {@link #DefaultTimeoutSeconds}.
940     * <p>
941     * Call to refresh the selected configs from the device.
942     *
943     * @param configs The configs to refresh
944     * @return StatusCode of refreshing the configs
945     */
946    public StatusCode refresh(CustomParamsConfigs configs)
947    {
948        return refresh(configs, DefaultTimeoutSeconds);
949    }
950
951    /**
952     * Refreshes the values of the specified config group.
953     * <p>
954     * Call to refresh the selected configs from the device.
955     *
956     * @param configs The configs to refresh
957     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
958     * @return StatusCode of refreshing the configs
959     */
960    public StatusCode refresh(CustomParamsConfigs configs, double timeoutSeconds)
961    {
962        StringBuilder serializedString = new StringBuilder();
963        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
964        if (err == StatusCode.OK) {
965            /* Only deserialize if we successfully got configs */
966            configs.deserialize(serializedString.toString());
967        }
968        return err;
969    }
970
971    /**
972     * Applies the contents of the specified config to the device.
973     * <p>
974     * This will wait up to {@link #DefaultTimeoutSeconds}.
975     * <p>
976     * Call to apply the selected configs.
977     *
978     * @param configs Configs to apply against.
979     * @return StatusCode of the set command
980     */
981    public StatusCode apply(CustomParamsConfigs configs)
982    {
983        return apply(configs, DefaultTimeoutSeconds);
984    }
985
986    /**
987     * Applies the contents of the specified config to the device.
988     * <p>
989     * Call to apply the selected configs.
990     *
991     * @param configs Configs to apply against.
992     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
993     * @return StatusCode of the set command
994     */
995    public StatusCode apply(CustomParamsConfigs configs, double timeoutSeconds)
996    {
997        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
998    }
999
1000
1001    /**
1002     * Refreshes the values of the specified config group.
1003     * <p>
1004     * This will wait up to {@link #DefaultTimeoutSeconds}.
1005     * <p>
1006     * Call to refresh the selected configs from the device.
1007     *
1008     * @param configs The configs to refresh
1009     * @return StatusCode of refreshing the configs
1010     */
1011    public StatusCode refresh(ClosedLoopGeneralConfigs configs)
1012    {
1013        return refresh(configs, DefaultTimeoutSeconds);
1014    }
1015
1016    /**
1017     * Refreshes the values of the specified config group.
1018     * <p>
1019     * Call to refresh the selected configs from the device.
1020     *
1021     * @param configs The configs to refresh
1022     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1023     * @return StatusCode of refreshing the configs
1024     */
1025    public StatusCode refresh(ClosedLoopGeneralConfigs configs, double timeoutSeconds)
1026    {
1027        StringBuilder serializedString = new StringBuilder();
1028        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
1029        if (err == StatusCode.OK) {
1030            /* Only deserialize if we successfully got configs */
1031            configs.deserialize(serializedString.toString());
1032        }
1033        return err;
1034    }
1035
1036    /**
1037     * Applies the contents of the specified config to the device.
1038     * <p>
1039     * This will wait up to {@link #DefaultTimeoutSeconds}.
1040     * <p>
1041     * Call to apply the selected configs.
1042     *
1043     * @param configs Configs to apply against.
1044     * @return StatusCode of the set command
1045     */
1046    public StatusCode apply(ClosedLoopGeneralConfigs configs)
1047    {
1048        return apply(configs, DefaultTimeoutSeconds);
1049    }
1050
1051    /**
1052     * Applies the contents of the specified config to the device.
1053     * <p>
1054     * Call to apply the selected configs.
1055     *
1056     * @param configs Configs to apply against.
1057     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1058     * @return StatusCode of the set command
1059     */
1060    public StatusCode apply(ClosedLoopGeneralConfigs configs, double timeoutSeconds)
1061    {
1062        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
1063    }
1064
1065
1066    /**
1067     * Refreshes the values of the specified config group.
1068     * <p>
1069     * This will wait up to {@link #DefaultTimeoutSeconds}.
1070     * <p>
1071     * Call to refresh the selected configs from the device.
1072     *
1073     * @param configs The configs to refresh
1074     * @return StatusCode of refreshing the configs
1075     */
1076    public StatusCode refresh(Slot0Configs configs)
1077    {
1078        return refresh(configs, DefaultTimeoutSeconds);
1079    }
1080
1081    /**
1082     * Refreshes the values of the specified config group.
1083     * <p>
1084     * Call to refresh the selected configs from the device.
1085     *
1086     * @param configs The configs to refresh
1087     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1088     * @return StatusCode of refreshing the configs
1089     */
1090    public StatusCode refresh(Slot0Configs configs, double timeoutSeconds)
1091    {
1092        StringBuilder serializedString = new StringBuilder();
1093        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
1094        if (err == StatusCode.OK) {
1095            /* Only deserialize if we successfully got configs */
1096            configs.deserialize(serializedString.toString());
1097        }
1098        return err;
1099    }
1100
1101    /**
1102     * Applies the contents of the specified config to the device.
1103     * <p>
1104     * This will wait up to {@link #DefaultTimeoutSeconds}.
1105     * <p>
1106     * Call to apply the selected configs.
1107     *
1108     * @param configs Configs to apply against.
1109     * @return StatusCode of the set command
1110     */
1111    public StatusCode apply(Slot0Configs configs)
1112    {
1113        return apply(configs, DefaultTimeoutSeconds);
1114    }
1115
1116    /**
1117     * Applies the contents of the specified config to the device.
1118     * <p>
1119     * Call to apply the selected configs.
1120     *
1121     * @param configs Configs to apply against.
1122     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1123     * @return StatusCode of the set command
1124     */
1125    public StatusCode apply(Slot0Configs configs, double timeoutSeconds)
1126    {
1127        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
1128    }
1129
1130
1131    /**
1132     * Refreshes the values of the specified config group.
1133     * <p>
1134     * This will wait up to {@link #DefaultTimeoutSeconds}.
1135     * <p>
1136     * Call to refresh the selected configs from the device.
1137     *
1138     * @param configs The configs to refresh
1139     * @return StatusCode of refreshing the configs
1140     */
1141    public StatusCode refresh(Slot1Configs configs)
1142    {
1143        return refresh(configs, DefaultTimeoutSeconds);
1144    }
1145
1146    /**
1147     * Refreshes the values of the specified config group.
1148     * <p>
1149     * Call to refresh the selected configs from the device.
1150     *
1151     * @param configs The configs to refresh
1152     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1153     * @return StatusCode of refreshing the configs
1154     */
1155    public StatusCode refresh(Slot1Configs configs, double timeoutSeconds)
1156    {
1157        StringBuilder serializedString = new StringBuilder();
1158        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
1159        if (err == StatusCode.OK) {
1160            /* Only deserialize if we successfully got configs */
1161            configs.deserialize(serializedString.toString());
1162        }
1163        return err;
1164    }
1165
1166    /**
1167     * Applies the contents of the specified config to the device.
1168     * <p>
1169     * This will wait up to {@link #DefaultTimeoutSeconds}.
1170     * <p>
1171     * Call to apply the selected configs.
1172     *
1173     * @param configs Configs to apply against.
1174     * @return StatusCode of the set command
1175     */
1176    public StatusCode apply(Slot1Configs configs)
1177    {
1178        return apply(configs, DefaultTimeoutSeconds);
1179    }
1180
1181    /**
1182     * Applies the contents of the specified config to the device.
1183     * <p>
1184     * Call to apply the selected configs.
1185     *
1186     * @param configs Configs to apply against.
1187     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1188     * @return StatusCode of the set command
1189     */
1190    public StatusCode apply(Slot1Configs configs, double timeoutSeconds)
1191    {
1192        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
1193    }
1194
1195
1196    /**
1197     * Refreshes the values of the specified config group.
1198     * <p>
1199     * This will wait up to {@link #DefaultTimeoutSeconds}.
1200     * <p>
1201     * Call to refresh the selected configs from the device.
1202     *
1203     * @param configs The configs to refresh
1204     * @return StatusCode of refreshing the configs
1205     */
1206    public StatusCode refresh(Slot2Configs configs)
1207    {
1208        return refresh(configs, DefaultTimeoutSeconds);
1209    }
1210
1211    /**
1212     * Refreshes the values of the specified config group.
1213     * <p>
1214     * Call to refresh the selected configs from the device.
1215     *
1216     * @param configs The configs to refresh
1217     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1218     * @return StatusCode of refreshing the configs
1219     */
1220    public StatusCode refresh(Slot2Configs configs, double timeoutSeconds)
1221    {
1222        StringBuilder serializedString = new StringBuilder();
1223        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
1224        if (err == StatusCode.OK) {
1225            /* Only deserialize if we successfully got configs */
1226            configs.deserialize(serializedString.toString());
1227        }
1228        return err;
1229    }
1230
1231    /**
1232     * Applies the contents of the specified config to the device.
1233     * <p>
1234     * This will wait up to {@link #DefaultTimeoutSeconds}.
1235     * <p>
1236     * Call to apply the selected configs.
1237     *
1238     * @param configs Configs to apply against.
1239     * @return StatusCode of the set command
1240     */
1241    public StatusCode apply(Slot2Configs configs)
1242    {
1243        return apply(configs, DefaultTimeoutSeconds);
1244    }
1245
1246    /**
1247     * Applies the contents of the specified config to the device.
1248     * <p>
1249     * Call to apply the selected configs.
1250     *
1251     * @param configs Configs to apply against.
1252     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1253     * @return StatusCode of the set command
1254     */
1255    public StatusCode apply(Slot2Configs configs, double timeoutSeconds)
1256    {
1257        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
1258    }
1259
1260
1261    /**
1262     * Refreshes the values of the specified config group.
1263     * <p>
1264     * This will wait up to {@link #DefaultTimeoutSeconds}.
1265     * <p>
1266     * Call to refresh the selected configs from the device.
1267     *
1268     * @param configs The configs to refresh
1269     * @return StatusCode of refreshing the configs
1270     */
1271    public StatusCode refresh(SlotConfigs configs)
1272    {
1273        return refresh(configs, DefaultTimeoutSeconds);
1274    }
1275
1276    /**
1277     * Refreshes the values of the specified config group.
1278     * <p>
1279     * Call to refresh the selected configs from the device.
1280     *
1281     * @param configs The configs to refresh
1282     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1283     * @return StatusCode of refreshing the configs
1284     */
1285    public StatusCode refresh(SlotConfigs configs, double timeoutSeconds)
1286    {
1287        StringBuilder serializedString = new StringBuilder();
1288        StatusCode err = getConfigsPrivate(serializedString, timeoutSeconds);
1289        if (err == StatusCode.OK) {
1290            /* Only deserialize if we successfully got configs */
1291            configs.deserialize(serializedString.toString());
1292        }
1293        return err;
1294    }
1295
1296    /**
1297     * Applies the contents of the specified config to the device.
1298     * <p>
1299     * This will wait up to {@link #DefaultTimeoutSeconds}.
1300     * <p>
1301     * Call to apply the selected configs.
1302     *
1303     * @param configs Configs to apply against.
1304     * @return StatusCode of the set command
1305     */
1306    public StatusCode apply(SlotConfigs configs)
1307    {
1308        return apply(configs, DefaultTimeoutSeconds);
1309    }
1310
1311    /**
1312     * Applies the contents of the specified config to the device.
1313     * <p>
1314     * Call to apply the selected configs.
1315     *
1316     * @param configs Configs to apply against.
1317     * @param timeoutSeconds Maximum amount of time to wait when performing configuration
1318     * @return StatusCode of the set command
1319     */
1320    public StatusCode apply(SlotConfigs configs, double timeoutSeconds)
1321    {
1322        return setConfigsPrivate(configs.serialize(), timeoutSeconds, false, false);
1323    }
1324
1325    
1326    /**
1327     * Sets the mechanism position of the device in mechanism rotations.
1328     * <p>
1329     * This will wait up to {@link #DefaultTimeoutSeconds}.
1330     * <p>
1331     * This is available in the configurator in case the user wants
1332     * to initialize their device entirely without passing a device
1333     * reference down to the code that performs the initialization.
1334     * In this case, the user passes down the configurator object
1335     * and performs all the initialization code on the object.
1336     * 
1337     * @param newValue Value to set to. Units are in rotations.
1338     * @return StatusCode of the set command
1339     */
1340    public StatusCode setPosition(double newValue) {
1341        return setPosition(newValue, DefaultTimeoutSeconds);
1342    }
1343    /**
1344     * Sets the mechanism position of the device in mechanism rotations.
1345     * <p>
1346     * This is available in the configurator in case the user wants
1347     * to initialize their device entirely without passing a device
1348     * reference down to the code that performs the initialization.
1349     * In this case, the user passes down the configurator object
1350     * and performs all the initialization code on the object.
1351     * 
1352     * @param newValue Value to set to. Units are in rotations.
1353     * @param timeoutSeconds Maximum time to wait up to in seconds.
1354     * @return StatusCode of the set command
1355     */
1356    public StatusCode setPosition(double newValue, double timeoutSeconds) {
1357        String serialized = ConfigJNI.Serializedouble(SpnValue.TalonFX_SetSensorPosition.value, newValue);
1358        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1359    }
1360    
1361    /**
1362     * Clear the sticky faults in the device.
1363     * <p>
1364     * This typically has no impact on the device functionality.  Instead,
1365     * it just clears telemetry faults that are accessible via API and
1366     * Tuner Self-Test.
1367     * <p>
1368     * This will wait up to {@link #DefaultTimeoutSeconds}.
1369     * <p>
1370     * This is available in the configurator in case the user wants
1371     * to initialize their device entirely without passing a device
1372     * reference down to the code that performs the initialization.
1373     * In this case, the user passes down the configurator object
1374     * and performs all the initialization code on the object.
1375     * 
1376     * @return StatusCode of the set command
1377     */
1378    public StatusCode clearStickyFaults() {
1379        return clearStickyFaults(DefaultTimeoutSeconds);
1380    }
1381    /**
1382     * Clear the sticky faults in the device.
1383     * <p>
1384     * This typically has no impact on the device functionality.  Instead,
1385     * it just clears telemetry faults that are accessible via API and
1386     * Tuner Self-Test.
1387     * <p>
1388     * This is available in the configurator in case the user wants
1389     * to initialize their device entirely without passing a device
1390     * reference down to the code that performs the initialization.
1391     * In this case, the user passes down the configurator object
1392     * and performs all the initialization code on the object.
1393     * 
1394     * @param timeoutSeconds Maximum time to wait up to in seconds.
1395     * @return StatusCode of the set command
1396     */
1397    public StatusCode clearStickyFaults(double timeoutSeconds) {
1398        String serialized = ConfigJNI.Serializedouble(SpnValue.SPN_ClearStickyFaults.value, 0);
1399        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1400    }
1401    
1402    /**
1403     * Clear sticky fault: Hardware fault occurred
1404     * <p>
1405     * This will wait up to {@link #DefaultTimeoutSeconds}.
1406     * <p>
1407     * This is available in the configurator in case the user wants
1408     * to initialize their device entirely without passing a device
1409     * reference down to the code that performs the initialization.
1410     * In this case, the user passes down the configurator object
1411     * and performs all the initialization code on the object.
1412     * 
1413     * @return StatusCode of the set command
1414     */
1415    public StatusCode clearStickyFault_Hardware() {
1416        return clearStickyFault_Hardware(DefaultTimeoutSeconds);
1417    }
1418    /**
1419     * Clear sticky fault: Hardware fault occurred
1420     * <p>
1421     * This is available in the configurator in case the user wants
1422     * to initialize their device entirely without passing a device
1423     * reference down to the code that performs the initialization.
1424     * In this case, the user passes down the configurator object
1425     * and performs all the initialization code on the object.
1426     * 
1427     * @param timeoutSeconds Maximum time to wait up to in seconds.
1428     * @return StatusCode of the set command
1429     */
1430    public StatusCode clearStickyFault_Hardware(double timeoutSeconds) {
1431        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_Hardware.value, 0);
1432        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1433    }
1434    
1435    /**
1436     * Clear sticky fault: Processor temperature exceeded limit
1437     * <p>
1438     * This will wait up to {@link #DefaultTimeoutSeconds}.
1439     * <p>
1440     * This is available in the configurator in case the user wants
1441     * to initialize their device entirely without passing a device
1442     * reference down to the code that performs the initialization.
1443     * In this case, the user passes down the configurator object
1444     * and performs all the initialization code on the object.
1445     * 
1446     * @return StatusCode of the set command
1447     */
1448    public StatusCode clearStickyFault_ProcTemp() {
1449        return clearStickyFault_ProcTemp(DefaultTimeoutSeconds);
1450    }
1451    /**
1452     * Clear sticky fault: Processor temperature exceeded limit
1453     * <p>
1454     * This is available in the configurator in case the user wants
1455     * to initialize their device entirely without passing a device
1456     * reference down to the code that performs the initialization.
1457     * In this case, the user passes down the configurator object
1458     * and performs all the initialization code on the object.
1459     * 
1460     * @param timeoutSeconds Maximum time to wait up to in seconds.
1461     * @return StatusCode of the set command
1462     */
1463    public StatusCode clearStickyFault_ProcTemp(double timeoutSeconds) {
1464        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_ProcTemp.value, 0);
1465        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1466    }
1467    
1468    /**
1469     * Clear sticky fault: Device temperature exceeded limit
1470     * <p>
1471     * This will wait up to {@link #DefaultTimeoutSeconds}.
1472     * <p>
1473     * This is available in the configurator in case the user wants
1474     * to initialize their device entirely without passing a device
1475     * reference down to the code that performs the initialization.
1476     * In this case, the user passes down the configurator object
1477     * and performs all the initialization code on the object.
1478     * 
1479     * @return StatusCode of the set command
1480     */
1481    public StatusCode clearStickyFault_DeviceTemp() {
1482        return clearStickyFault_DeviceTemp(DefaultTimeoutSeconds);
1483    }
1484    /**
1485     * Clear sticky fault: Device temperature exceeded limit
1486     * <p>
1487     * This is available in the configurator in case the user wants
1488     * to initialize their device entirely without passing a device
1489     * reference down to the code that performs the initialization.
1490     * In this case, the user passes down the configurator object
1491     * and performs all the initialization code on the object.
1492     * 
1493     * @param timeoutSeconds Maximum time to wait up to in seconds.
1494     * @return StatusCode of the set command
1495     */
1496    public StatusCode clearStickyFault_DeviceTemp(double timeoutSeconds) {
1497        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_DeviceTemp.value, 0);
1498        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1499    }
1500    
1501    /**
1502     * Clear sticky fault: Device supply voltage dropped to near brownout
1503     * levels
1504     * <p>
1505     * This will wait up to {@link #DefaultTimeoutSeconds}.
1506     * <p>
1507     * This is available in the configurator in case the user wants
1508     * to initialize their device entirely without passing a device
1509     * reference down to the code that performs the initialization.
1510     * In this case, the user passes down the configurator object
1511     * and performs all the initialization code on the object.
1512     * 
1513     * @return StatusCode of the set command
1514     */
1515    public StatusCode clearStickyFault_Undervoltage() {
1516        return clearStickyFault_Undervoltage(DefaultTimeoutSeconds);
1517    }
1518    /**
1519     * Clear sticky fault: Device supply voltage dropped to near brownout
1520     * levels
1521     * <p>
1522     * This is available in the configurator in case the user wants
1523     * to initialize their device entirely without passing a device
1524     * reference down to the code that performs the initialization.
1525     * In this case, the user passes down the configurator object
1526     * and performs all the initialization code on the object.
1527     * 
1528     * @param timeoutSeconds Maximum time to wait up to in seconds.
1529     * @return StatusCode of the set command
1530     */
1531    public StatusCode clearStickyFault_Undervoltage(double timeoutSeconds) {
1532        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_Undervoltage.value, 0);
1533        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1534    }
1535    
1536    /**
1537     * Clear sticky fault: Device boot while detecting the enable signal
1538     * <p>
1539     * This will wait up to {@link #DefaultTimeoutSeconds}.
1540     * <p>
1541     * This is available in the configurator in case the user wants
1542     * to initialize their device entirely without passing a device
1543     * reference down to the code that performs the initialization.
1544     * In this case, the user passes down the configurator object
1545     * and performs all the initialization code on the object.
1546     * 
1547     * @return StatusCode of the set command
1548     */
1549    public StatusCode clearStickyFault_BootDuringEnable() {
1550        return clearStickyFault_BootDuringEnable(DefaultTimeoutSeconds);
1551    }
1552    /**
1553     * Clear sticky fault: Device boot while detecting the enable signal
1554     * <p>
1555     * This is available in the configurator in case the user wants
1556     * to initialize their device entirely without passing a device
1557     * reference down to the code that performs the initialization.
1558     * In this case, the user passes down the configurator object
1559     * and performs all the initialization code on the object.
1560     * 
1561     * @param timeoutSeconds Maximum time to wait up to in seconds.
1562     * @return StatusCode of the set command
1563     */
1564    public StatusCode clearStickyFault_BootDuringEnable(double timeoutSeconds) {
1565        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_BootDuringEnable.value, 0);
1566        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1567    }
1568    
1569    /**
1570     * Clear sticky fault: Bridge was disabled most likely due to supply
1571     * voltage dropping too low.
1572     * <p>
1573     * This will wait up to {@link #DefaultTimeoutSeconds}.
1574     * <p>
1575     * This is available in the configurator in case the user wants
1576     * to initialize their device entirely without passing a device
1577     * reference down to the code that performs the initialization.
1578     * In this case, the user passes down the configurator object
1579     * and performs all the initialization code on the object.
1580     * 
1581     * @return StatusCode of the set command
1582     */
1583    public StatusCode clearStickyFault_BridgeBrownout() {
1584        return clearStickyFault_BridgeBrownout(DefaultTimeoutSeconds);
1585    }
1586    /**
1587     * Clear sticky fault: Bridge was disabled most likely due to supply
1588     * voltage dropping too low.
1589     * <p>
1590     * This is available in the configurator in case the user wants
1591     * to initialize their device entirely without passing a device
1592     * reference down to the code that performs the initialization.
1593     * In this case, the user passes down the configurator object
1594     * and performs all the initialization code on the object.
1595     * 
1596     * @param timeoutSeconds Maximum time to wait up to in seconds.
1597     * @return StatusCode of the set command
1598     */
1599    public StatusCode clearStickyFault_BridgeBrownout(double timeoutSeconds) {
1600        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_BridgeBrownout.value, 0);
1601        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1602    }
1603    
1604    /**
1605     * Clear sticky fault: The remote sensor has reset.
1606     * <p>
1607     * This will wait up to {@link #DefaultTimeoutSeconds}.
1608     * <p>
1609     * This is available in the configurator in case the user wants
1610     * to initialize their device entirely without passing a device
1611     * reference down to the code that performs the initialization.
1612     * In this case, the user passes down the configurator object
1613     * and performs all the initialization code on the object.
1614     * 
1615     * @return StatusCode of the set command
1616     */
1617    public StatusCode clearStickyFault_RemoteSensorReset() {
1618        return clearStickyFault_RemoteSensorReset(DefaultTimeoutSeconds);
1619    }
1620    /**
1621     * Clear sticky fault: The remote sensor has reset.
1622     * <p>
1623     * This is available in the configurator in case the user wants
1624     * to initialize their device entirely without passing a device
1625     * reference down to the code that performs the initialization.
1626     * In this case, the user passes down the configurator object
1627     * and performs all the initialization code on the object.
1628     * 
1629     * @param timeoutSeconds Maximum time to wait up to in seconds.
1630     * @return StatusCode of the set command
1631     */
1632    public StatusCode clearStickyFault_RemoteSensorReset(double timeoutSeconds) {
1633        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_RemoteSensorReset.value, 0);
1634        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1635    }
1636    
1637    /**
1638     * Clear sticky fault: The remote Talon FX used for differential
1639     * control is not present on CAN Bus.
1640     * <p>
1641     * This will wait up to {@link #DefaultTimeoutSeconds}.
1642     * <p>
1643     * This is available in the configurator in case the user wants
1644     * to initialize their device entirely without passing a device
1645     * reference down to the code that performs the initialization.
1646     * In this case, the user passes down the configurator object
1647     * and performs all the initialization code on the object.
1648     * 
1649     * @return StatusCode of the set command
1650     */
1651    public StatusCode clearStickyFault_MissingDifferentialFX() {
1652        return clearStickyFault_MissingDifferentialFX(DefaultTimeoutSeconds);
1653    }
1654    /**
1655     * Clear sticky fault: The remote Talon FX used for differential
1656     * control is not present on CAN Bus.
1657     * <p>
1658     * This is available in the configurator in case the user wants
1659     * to initialize their device entirely without passing a device
1660     * reference down to the code that performs the initialization.
1661     * In this case, the user passes down the configurator object
1662     * and performs all the initialization code on the object.
1663     * 
1664     * @param timeoutSeconds Maximum time to wait up to in seconds.
1665     * @return StatusCode of the set command
1666     */
1667    public StatusCode clearStickyFault_MissingDifferentialFX(double timeoutSeconds) {
1668        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_MissingDifferentialFX.value, 0);
1669        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1670    }
1671    
1672    /**
1673     * Clear sticky fault: The remote sensor position has overflowed.
1674     * Because of the nature of remote sensors, it is possible for the
1675     * remote sensor position to overflow beyond what is supported by the
1676     * status signal frame. However, this is rare and cannot occur over
1677     * the course of an FRC match under normal use.
1678     * <p>
1679     * This will wait up to {@link #DefaultTimeoutSeconds}.
1680     * <p>
1681     * This is available in the configurator in case the user wants
1682     * to initialize their device entirely without passing a device
1683     * reference down to the code that performs the initialization.
1684     * In this case, the user passes down the configurator object
1685     * and performs all the initialization code on the object.
1686     * 
1687     * @return StatusCode of the set command
1688     */
1689    public StatusCode clearStickyFault_RemoteSensorPosOverflow() {
1690        return clearStickyFault_RemoteSensorPosOverflow(DefaultTimeoutSeconds);
1691    }
1692    /**
1693     * Clear sticky fault: The remote sensor position has overflowed.
1694     * Because of the nature of remote sensors, it is possible for the
1695     * remote sensor position to overflow beyond what is supported by the
1696     * status signal frame. However, this is rare and cannot occur over
1697     * the course of an FRC match under normal use.
1698     * <p>
1699     * This is available in the configurator in case the user wants
1700     * to initialize their device entirely without passing a device
1701     * reference down to the code that performs the initialization.
1702     * In this case, the user passes down the configurator object
1703     * and performs all the initialization code on the object.
1704     * 
1705     * @param timeoutSeconds Maximum time to wait up to in seconds.
1706     * @return StatusCode of the set command
1707     */
1708    public StatusCode clearStickyFault_RemoteSensorPosOverflow(double timeoutSeconds) {
1709        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_RemoteSensorPosOverflow.value, 0);
1710        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1711    }
1712    
1713    /**
1714     * Clear sticky fault: Supply Voltage has exceeded the maximum voltage
1715     * rating of device.
1716     * <p>
1717     * This will wait up to {@link #DefaultTimeoutSeconds}.
1718     * <p>
1719     * This is available in the configurator in case the user wants
1720     * to initialize their device entirely without passing a device
1721     * reference down to the code that performs the initialization.
1722     * In this case, the user passes down the configurator object
1723     * and performs all the initialization code on the object.
1724     * 
1725     * @return StatusCode of the set command
1726     */
1727    public StatusCode clearStickyFault_OverSupplyV() {
1728        return clearStickyFault_OverSupplyV(DefaultTimeoutSeconds);
1729    }
1730    /**
1731     * Clear sticky fault: Supply Voltage has exceeded the maximum voltage
1732     * rating of device.
1733     * <p>
1734     * This is available in the configurator in case the user wants
1735     * to initialize their device entirely without passing a device
1736     * reference down to the code that performs the initialization.
1737     * In this case, the user passes down the configurator object
1738     * and performs all the initialization code on the object.
1739     * 
1740     * @param timeoutSeconds Maximum time to wait up to in seconds.
1741     * @return StatusCode of the set command
1742     */
1743    public StatusCode clearStickyFault_OverSupplyV(double timeoutSeconds) {
1744        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_OverSupplyV.value, 0);
1745        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1746    }
1747    
1748    /**
1749     * Clear sticky fault: Supply Voltage is unstable.  Ensure you are
1750     * using a battery and current limited power supply.
1751     * <p>
1752     * This will wait up to {@link #DefaultTimeoutSeconds}.
1753     * <p>
1754     * This is available in the configurator in case the user wants
1755     * to initialize their device entirely without passing a device
1756     * reference down to the code that performs the initialization.
1757     * In this case, the user passes down the configurator object
1758     * and performs all the initialization code on the object.
1759     * 
1760     * @return StatusCode of the set command
1761     */
1762    public StatusCode clearStickyFault_UnstableSupplyV() {
1763        return clearStickyFault_UnstableSupplyV(DefaultTimeoutSeconds);
1764    }
1765    /**
1766     * Clear sticky fault: Supply Voltage is unstable.  Ensure you are
1767     * using a battery and current limited power supply.
1768     * <p>
1769     * This is available in the configurator in case the user wants
1770     * to initialize their device entirely without passing a device
1771     * reference down to the code that performs the initialization.
1772     * In this case, the user passes down the configurator object
1773     * and performs all the initialization code on the object.
1774     * 
1775     * @param timeoutSeconds Maximum time to wait up to in seconds.
1776     * @return StatusCode of the set command
1777     */
1778    public StatusCode clearStickyFault_UnstableSupplyV(double timeoutSeconds) {
1779        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_UnstableSupplyV.value, 0);
1780        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1781    }
1782    
1783    /**
1784     * Clear sticky fault: Reverse limit switch has been asserted.  Output
1785     * is set to neutral.
1786     * <p>
1787     * This will wait up to {@link #DefaultTimeoutSeconds}.
1788     * <p>
1789     * This is available in the configurator in case the user wants
1790     * to initialize their device entirely without passing a device
1791     * reference down to the code that performs the initialization.
1792     * In this case, the user passes down the configurator object
1793     * and performs all the initialization code on the object.
1794     * 
1795     * @return StatusCode of the set command
1796     */
1797    public StatusCode clearStickyFault_ReverseHardLimit() {
1798        return clearStickyFault_ReverseHardLimit(DefaultTimeoutSeconds);
1799    }
1800    /**
1801     * Clear sticky fault: Reverse limit switch has been asserted.  Output
1802     * is set to neutral.
1803     * <p>
1804     * This is available in the configurator in case the user wants
1805     * to initialize their device entirely without passing a device
1806     * reference down to the code that performs the initialization.
1807     * In this case, the user passes down the configurator object
1808     * and performs all the initialization code on the object.
1809     * 
1810     * @param timeoutSeconds Maximum time to wait up to in seconds.
1811     * @return StatusCode of the set command
1812     */
1813    public StatusCode clearStickyFault_ReverseHardLimit(double timeoutSeconds) {
1814        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_ReverseHardLimit.value, 0);
1815        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1816    }
1817    
1818    /**
1819     * Clear sticky fault: Forward limit switch has been asserted.  Output
1820     * is set to neutral.
1821     * <p>
1822     * This will wait up to {@link #DefaultTimeoutSeconds}.
1823     * <p>
1824     * This is available in the configurator in case the user wants
1825     * to initialize their device entirely without passing a device
1826     * reference down to the code that performs the initialization.
1827     * In this case, the user passes down the configurator object
1828     * and performs all the initialization code on the object.
1829     * 
1830     * @return StatusCode of the set command
1831     */
1832    public StatusCode clearStickyFault_ForwardHardLimit() {
1833        return clearStickyFault_ForwardHardLimit(DefaultTimeoutSeconds);
1834    }
1835    /**
1836     * Clear sticky fault: Forward limit switch has been asserted.  Output
1837     * is set to neutral.
1838     * <p>
1839     * This is available in the configurator in case the user wants
1840     * to initialize their device entirely without passing a device
1841     * reference down to the code that performs the initialization.
1842     * In this case, the user passes down the configurator object
1843     * and performs all the initialization code on the object.
1844     * 
1845     * @param timeoutSeconds Maximum time to wait up to in seconds.
1846     * @return StatusCode of the set command
1847     */
1848    public StatusCode clearStickyFault_ForwardHardLimit(double timeoutSeconds) {
1849        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_ForwardHardLimit.value, 0);
1850        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1851    }
1852    
1853    /**
1854     * Clear sticky fault: Reverse soft limit has been asserted.  Output
1855     * is set to neutral.
1856     * <p>
1857     * This will wait up to {@link #DefaultTimeoutSeconds}.
1858     * <p>
1859     * This is available in the configurator in case the user wants
1860     * to initialize their device entirely without passing a device
1861     * reference down to the code that performs the initialization.
1862     * In this case, the user passes down the configurator object
1863     * and performs all the initialization code on the object.
1864     * 
1865     * @return StatusCode of the set command
1866     */
1867    public StatusCode clearStickyFault_ReverseSoftLimit() {
1868        return clearStickyFault_ReverseSoftLimit(DefaultTimeoutSeconds);
1869    }
1870    /**
1871     * Clear sticky fault: Reverse soft limit has been asserted.  Output
1872     * is set to neutral.
1873     * <p>
1874     * This is available in the configurator in case the user wants
1875     * to initialize their device entirely without passing a device
1876     * reference down to the code that performs the initialization.
1877     * In this case, the user passes down the configurator object
1878     * and performs all the initialization code on the object.
1879     * 
1880     * @param timeoutSeconds Maximum time to wait up to in seconds.
1881     * @return StatusCode of the set command
1882     */
1883    public StatusCode clearStickyFault_ReverseSoftLimit(double timeoutSeconds) {
1884        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_ReverseSoftLimit.value, 0);
1885        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1886    }
1887    
1888    /**
1889     * Clear sticky fault: Forward soft limit has been asserted.  Output
1890     * is set to neutral.
1891     * <p>
1892     * This will wait up to {@link #DefaultTimeoutSeconds}.
1893     * <p>
1894     * This is available in the configurator in case the user wants
1895     * to initialize their device entirely without passing a device
1896     * reference down to the code that performs the initialization.
1897     * In this case, the user passes down the configurator object
1898     * and performs all the initialization code on the object.
1899     * 
1900     * @return StatusCode of the set command
1901     */
1902    public StatusCode clearStickyFault_ForwardSoftLimit() {
1903        return clearStickyFault_ForwardSoftLimit(DefaultTimeoutSeconds);
1904    }
1905    /**
1906     * Clear sticky fault: Forward soft limit has been asserted.  Output
1907     * is set to neutral.
1908     * <p>
1909     * This is available in the configurator in case the user wants
1910     * to initialize their device entirely without passing a device
1911     * reference down to the code that performs the initialization.
1912     * In this case, the user passes down the configurator object
1913     * and performs all the initialization code on the object.
1914     * 
1915     * @param timeoutSeconds Maximum time to wait up to in seconds.
1916     * @return StatusCode of the set command
1917     */
1918    public StatusCode clearStickyFault_ForwardSoftLimit(double timeoutSeconds) {
1919        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_ForwardSoftLimit.value, 0);
1920        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1921    }
1922    
1923    /**
1924     * Clear sticky fault: The remote sensor's data is no longer trusted.
1925     * This can happen if the remote sensor disappears from the CAN bus or
1926     * if the remote sensor indicates its data is no longer valid, such as
1927     * when a CANcoder's magnet strength falls into the "red" range.
1928     * <p>
1929     * This will wait up to {@link #DefaultTimeoutSeconds}.
1930     * <p>
1931     * This is available in the configurator in case the user wants
1932     * to initialize their device entirely without passing a device
1933     * reference down to the code that performs the initialization.
1934     * In this case, the user passes down the configurator object
1935     * and performs all the initialization code on the object.
1936     * 
1937     * @return StatusCode of the set command
1938     */
1939    public StatusCode clearStickyFault_RemoteSensorDataInvalid() {
1940        return clearStickyFault_RemoteSensorDataInvalid(DefaultTimeoutSeconds);
1941    }
1942    /**
1943     * Clear sticky fault: The remote sensor's data is no longer trusted.
1944     * This can happen if the remote sensor disappears from the CAN bus or
1945     * if the remote sensor indicates its data is no longer valid, such as
1946     * when a CANcoder's magnet strength falls into the "red" range.
1947     * <p>
1948     * This is available in the configurator in case the user wants
1949     * to initialize their device entirely without passing a device
1950     * reference down to the code that performs the initialization.
1951     * In this case, the user passes down the configurator object
1952     * and performs all the initialization code on the object.
1953     * 
1954     * @param timeoutSeconds Maximum time to wait up to in seconds.
1955     * @return StatusCode of the set command
1956     */
1957    public StatusCode clearStickyFault_RemoteSensorDataInvalid(double timeoutSeconds) {
1958        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_MissingRemoteSensor.value, 0);
1959        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
1960    }
1961    
1962    /**
1963     * Clear sticky fault: The remote sensor used for fusion has fallen
1964     * out of sync to the local sensor. A re-synchronization has occurred,
1965     * which may cause a discontinuity. This typically happens if there is
1966     * significant slop in the mechanism, or if the RotorToSensorRatio
1967     * configuration parameter is incorrect.
1968     * <p>
1969     * This will wait up to {@link #DefaultTimeoutSeconds}.
1970     * <p>
1971     * This is available in the configurator in case the user wants
1972     * to initialize their device entirely without passing a device
1973     * reference down to the code that performs the initialization.
1974     * In this case, the user passes down the configurator object
1975     * and performs all the initialization code on the object.
1976     * 
1977     * @return StatusCode of the set command
1978     */
1979    public StatusCode clearStickyFault_FusedSensorOutOfSync() {
1980        return clearStickyFault_FusedSensorOutOfSync(DefaultTimeoutSeconds);
1981    }
1982    /**
1983     * Clear sticky fault: The remote sensor used for fusion has fallen
1984     * out of sync to the local sensor. A re-synchronization has occurred,
1985     * which may cause a discontinuity. This typically happens if there is
1986     * significant slop in the mechanism, or if the RotorToSensorRatio
1987     * configuration parameter is incorrect.
1988     * <p>
1989     * This is available in the configurator in case the user wants
1990     * to initialize their device entirely without passing a device
1991     * reference down to the code that performs the initialization.
1992     * In this case, the user passes down the configurator object
1993     * and performs all the initialization code on the object.
1994     * 
1995     * @param timeoutSeconds Maximum time to wait up to in seconds.
1996     * @return StatusCode of the set command
1997     */
1998    public StatusCode clearStickyFault_FusedSensorOutOfSync(double timeoutSeconds) {
1999        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_FusedSensorOutOfSync.value, 0);
2000        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
2001    }
2002    
2003    /**
2004     * Clear sticky fault: Stator current limit occured.
2005     * <p>
2006     * This will wait up to {@link #DefaultTimeoutSeconds}.
2007     * <p>
2008     * This is available in the configurator in case the user wants
2009     * to initialize their device entirely without passing a device
2010     * reference down to the code that performs the initialization.
2011     * In this case, the user passes down the configurator object
2012     * and performs all the initialization code on the object.
2013     * 
2014     * @return StatusCode of the set command
2015     */
2016    public StatusCode clearStickyFault_StatorCurrLimit() {
2017        return clearStickyFault_StatorCurrLimit(DefaultTimeoutSeconds);
2018    }
2019    /**
2020     * Clear sticky fault: Stator current limit occured.
2021     * <p>
2022     * This is available in the configurator in case the user wants
2023     * to initialize their device entirely without passing a device
2024     * reference down to the code that performs the initialization.
2025     * In this case, the user passes down the configurator object
2026     * and performs all the initialization code on the object.
2027     * 
2028     * @param timeoutSeconds Maximum time to wait up to in seconds.
2029     * @return StatusCode of the set command
2030     */
2031    public StatusCode clearStickyFault_StatorCurrLimit(double timeoutSeconds) {
2032        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_StatorCurrLimit.value, 0);
2033        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
2034    }
2035    
2036    /**
2037     * Clear sticky fault: Supply current limit occured.
2038     * <p>
2039     * This will wait up to {@link #DefaultTimeoutSeconds}.
2040     * <p>
2041     * This is available in the configurator in case the user wants
2042     * to initialize their device entirely without passing a device
2043     * reference down to the code that performs the initialization.
2044     * In this case, the user passes down the configurator object
2045     * and performs all the initialization code on the object.
2046     * 
2047     * @return StatusCode of the set command
2048     */
2049    public StatusCode clearStickyFault_SupplyCurrLimit() {
2050        return clearStickyFault_SupplyCurrLimit(DefaultTimeoutSeconds);
2051    }
2052    /**
2053     * Clear sticky fault: Supply current limit occured.
2054     * <p>
2055     * This is available in the configurator in case the user wants
2056     * to initialize their device entirely without passing a device
2057     * reference down to the code that performs the initialization.
2058     * In this case, the user passes down the configurator object
2059     * and performs all the initialization code on the object.
2060     * 
2061     * @param timeoutSeconds Maximum time to wait up to in seconds.
2062     * @return StatusCode of the set command
2063     */
2064    public StatusCode clearStickyFault_SupplyCurrLimit(double timeoutSeconds) {
2065        String serialized = ConfigJNI.Serializedouble(SpnValue.ClearStickyFault_TALONFX_SupplyCurrLimit.value, 0);
2066        return setConfigsPrivate(serialized, timeoutSeconds, false, true);
2067    }
2068}