@@ -810,6 +810,58 @@ scpi_result_t scpi_cmd_systemCommunicateRlstateQ(scpi_t *context) {
810
810
return SCPI_RES_OK;
811
811
}
812
812
813
+ static scpi_choice_def_t usbModeChoice[] = {
814
+ { " DEVice" , USB_MODE_DEVICE },
815
+ { " HOST" , USB_MODE_HOST },
816
+ { " OTG" , USB_MODE_OTG },
817
+ SCPI_CHOICE_LIST_END
818
+ };
819
+
820
+ scpi_result_t scpi_cmd_systemCommunicateUsbMode (scpi_t *context) {
821
+ int32_t usbMode;
822
+ if (!SCPI_ParamChoice (context, usbModeChoice, &usbMode, true )) {
823
+ return SCPI_RES_ERR;
824
+ }
825
+
826
+ usb::selectUsbMode (usbMode, usb::g_otgMode);
827
+
828
+ return SCPI_RES_OK;
829
+ }
830
+
831
+ scpi_result_t scpi_cmd_systemCommunicateUsbModeQ (scpi_t *context) {
832
+ resultChoiceName (context, usbModeChoice, usb::g_usbMode);
833
+ return SCPI_RES_OK;
834
+ }
835
+
836
+ static scpi_choice_def_t usbClassChoice[] = {
837
+ { " VCOM" , USB_DEVICE_CLASS_VIRTUAL_COM_PORT },
838
+ { " MSTOrage" , USB_DEVICE_CLASS_MASS_STORAGE_CLIENT },
839
+ { " HID" , USB_HOST_CLASS_HID },
840
+ SCPI_CHOICE_LIST_END
841
+ };
842
+
843
+ scpi_result_t scpi_cmd_systemCommunicateUsbClass (scpi_t *context) {
844
+ int32_t usbClass;
845
+ if (!SCPI_ParamChoice (context, usbClassChoice, &usbClass, true )) {
846
+ return SCPI_RES_ERR;
847
+ }
848
+
849
+ if (usbClass < USB_HOST_CLASS_HID) {
850
+ usb::selectUsbDeviceClass (usbClass);
851
+ }
852
+
853
+ return SCPI_RES_OK;
854
+ }
855
+
856
+ scpi_result_t scpi_cmd_systemCommunicateUsbClassQ (scpi_t *context) {
857
+ resultChoiceName (context, usbClassChoice,
858
+ usb::isVirtualComPortActive () ? USB_DEVICE_CLASS_VIRTUAL_COM_PORT :
859
+ usb::isMassStorageActive () ? USB_DEVICE_CLASS_MASS_STORAGE_CLIENT :
860
+ USB_HOST_CLASS_HID);
861
+
862
+ return SCPI_RES_OK;
863
+ }
864
+
813
865
scpi_result_t scpi_cmd_systemLocal (scpi_t *context) {
814
866
g_rlState = RL_STATE_LOCAL;
815
867
@@ -840,9 +892,8 @@ scpi_result_t scpi_cmd_systemRwlock(scpi_t *context) {
840
892
return SCPI_RES_OK;
841
893
}
842
894
843
- // NONE|ODD|EVEN
844
895
static scpi_choice_def_t commInterfaceChoice[] = {
845
- { " SERial " , 1 },
896
+ { " USB " , 1 },
846
897
{ " ETHernet" , 2 },
847
898
{ " NTP" , 3 },
848
899
{ " MQTT" , 4 },
@@ -861,7 +912,15 @@ scpi_result_t scpi_cmd_systemCommunicateEnable(scpi_t *context) {
861
912
}
862
913
863
914
if (commInterface == 1 ) {
864
- persist_conf::setUsbMode (enable ? USB_MODE_DEVICE : USB_MODE_DISABLED);
915
+ if (enable) {
916
+ if (usb::g_usbMode == USB_MODE_DISABLED) {
917
+ usb::selectUsbMode (USB_MODE_DEVICE, usb::g_otgMode);
918
+ }
919
+ } else {
920
+ if (usb::g_usbMode != USB_MODE_DISABLED) {
921
+ usb::selectUsbMode (USB_MODE_DISABLED, usb::g_otgMode);
922
+ }
923
+ }
865
924
} else if (commInterface == 2 ) {
866
925
#if OPTION_ETHERNET
867
926
persist_conf::enableEthernet (enable);
@@ -885,7 +944,7 @@ scpi_result_t scpi_cmd_systemCommunicateEnableQ(scpi_t *context) {
885
944
}
886
945
887
946
if (commInterface == 1 ) {
888
- SCPI_ResultBool (context, persist_conf::getUsbMode () != USB_MODE_DISABLED);
947
+ SCPI_ResultBool (context, usb::g_usbMode != USB_MODE_DISABLED);
889
948
} else if (commInterface == 2 ) {
890
949
#if OPTION_ETHERNET
891
950
SCPI_ResultBool (context, persist_conf::isEthernetEnabled ());
0 commit comments