Skip to content

Commit 7e2070a

Browse files
committed
#38 SCPI
1 parent daadefb commit 7e2070a

File tree

5 files changed

+163
-5
lines changed

5 files changed

+163
-5
lines changed

modular-psu-firmware.eez-project

+91-1
Original file line numberDiff line numberDiff line change
@@ -70390,6 +70390,62 @@
7039070390
"description": "-1: ERROR\n 0: IDLE\n 1: CONNECTED\n 2: TRANSIENT"
7039170391
}
7039270392
},
70393+
{
70394+
"name": "SYSTem:COMMunicate:USB:MODE",
70395+
"helpLink": "EEZ BB3 SCPI reference 5.16 - SYSTem.html#syst_comm_ntp",
70396+
"parameters": [
70397+
{
70398+
"name": "mode",
70399+
"type": [
70400+
{
70401+
"type": "discrete",
70402+
"enumeration": "UsbMode"
70403+
}
70404+
],
70405+
"isOptional": false
70406+
}
70407+
],
70408+
"response": {
70409+
"type": "numeric"
70410+
}
70411+
},
70412+
{
70413+
"name": "SYSTem:COMMunicate:USB:MODE?",
70414+
"helpLink": "EEZ BB3 SCPI reference 5.16 - SYSTem.html#syst_comm_ntp",
70415+
"parameters": [],
70416+
"response": {
70417+
"type": "discrete",
70418+
"enumeration": "UsbMode"
70419+
}
70420+
},
70421+
{
70422+
"name": "SYSTem:COMMunicate:USB:CLAss",
70423+
"helpLink": "EEZ BB3 SCPI reference 5.16 - SYSTem.html#syst_comm_ntp",
70424+
"parameters": [
70425+
{
70426+
"name": "class",
70427+
"type": [
70428+
{
70429+
"type": "discrete",
70430+
"enumeration": "UsbClass"
70431+
}
70432+
],
70433+
"isOptional": false
70434+
}
70435+
],
70436+
"response": {
70437+
"type": "numeric"
70438+
}
70439+
},
70440+
{
70441+
"name": "SYSTem:COMMunicate:USB:CLAss?",
70442+
"helpLink": "EEZ BB3 SCPI reference 5.16 - SYSTem.html#syst_comm_ntp",
70443+
"parameters": [],
70444+
"response": {
70445+
"type": "discrete",
70446+
"enumeration": "UsbClass"
70447+
}
70448+
},
7039370449
{
7039470450
"name": "SYSTem:CPU:INFOrmation:ONTime:LAST?",
7039570451
"helpLink": "EEZ BB3 SCPI reference 5.16 - SYSTem.html#syst_cpu_ont_last",
@@ -72727,7 +72783,7 @@
7272772783
"name": "Interface",
7272872784
"members": [
7272972785
{
72730-
"name": "SERial",
72786+
"name": "USB",
7273172787
"value": "1"
7273272788
},
7273372789
{
@@ -72869,6 +72925,40 @@
7286972925
"value": ""
7287072926
}
7287172927
]
72928+
},
72929+
{
72930+
"name": "UsbMode",
72931+
"members": [
72932+
{
72933+
"name": "DEVice",
72934+
"value": "1"
72935+
},
72936+
{
72937+
"name": "HOST",
72938+
"value": "2"
72939+
},
72940+
{
72941+
"name": "OTG",
72942+
"value": "3"
72943+
}
72944+
]
72945+
},
72946+
{
72947+
"name": "UsbClass",
72948+
"members": [
72949+
{
72950+
"name": "VCOM",
72951+
"value": "1"
72952+
},
72953+
{
72954+
"name": "MSTOrage",
72955+
"value": "2"
72956+
},
72957+
{
72958+
"name": "HID",
72959+
"value": "3"
72960+
}
72961+
]
7287272962
}
7287372963
]
7287472964
},

src/eez/modules/psu/scpi/syst.cpp

+63-4
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,58 @@ scpi_result_t scpi_cmd_systemCommunicateRlstateQ(scpi_t *context) {
810810
return SCPI_RES_OK;
811811
}
812812

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+
813865
scpi_result_t scpi_cmd_systemLocal(scpi_t *context) {
814866
g_rlState = RL_STATE_LOCAL;
815867

@@ -840,9 +892,8 @@ scpi_result_t scpi_cmd_systemRwlock(scpi_t *context) {
840892
return SCPI_RES_OK;
841893
}
842894

843-
// NONE|ODD|EVEN
844895
static scpi_choice_def_t commInterfaceChoice[] = {
845-
{ "SERial", 1 },
896+
{ "USB", 1 },
846897
{ "ETHernet", 2 },
847898
{ "NTP", 3 },
848899
{ "MQTT", 4 },
@@ -861,7 +912,15 @@ scpi_result_t scpi_cmd_systemCommunicateEnable(scpi_t *context) {
861912
}
862913

863914
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+
}
865924
} else if (commInterface == 2) {
866925
#if OPTION_ETHERNET
867926
persist_conf::enableEthernet(enable);
@@ -885,7 +944,7 @@ scpi_result_t scpi_cmd_systemCommunicateEnableQ(scpi_t *context) {
885944
}
886945

887946
if (commInterface == 1) {
888-
SCPI_ResultBool(context, persist_conf::getUsbMode() != USB_MODE_DISABLED);
947+
SCPI_ResultBool(context, usb::g_usbMode != USB_MODE_DISABLED);
889948
} else if (commInterface == 2) {
890949
#if OPTION_ETHERNET
891950
SCPI_ResultBool(context, persist_conf::isEthernetEnabled());

src/eez/scpi/commands_simulator.h

+4
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@
295295
SCPI_COMMAND("SYSTem:COMMunicate:RLSTate?", scpi_cmd_systemCommunicateRlstateQ) \
296296
SCPI_COMMAND("SYSTem:COMMunicate:MQTT:SETTings", scpi_cmd_systemCommunicateMqttSettings) \
297297
SCPI_COMMAND("SYSTem:COMMunicate:MQTT:STATe?", scpi_cmd_systemCommunicateMqttStateQ) \
298+
SCPI_COMMAND("SYSTem:COMMunicate:USB:MODE", scpi_cmd_systemCommunicateUsbMode) \
299+
SCPI_COMMAND("SYSTem:COMMunicate:USB:MODE?", scpi_cmd_systemCommunicateUsbModeQ) \
300+
SCPI_COMMAND("SYSTem:COMMunicate:USB:CLAss", scpi_cmd_systemCommunicateUsbClass) \
301+
SCPI_COMMAND("SYSTem:COMMunicate:USB:CLAss?", scpi_cmd_systemCommunicateUsbClassQ) \
298302
SCPI_COMMAND("SYSTem:CPU:INFOrmation:ONTime:LAST?", scpi_cmd_systemCpuInformationOntimeLastQ) \
299303
SCPI_COMMAND("SYSTem:CPU:INFOrmation:ONTime:TOTal?", scpi_cmd_systemCpuInformationOntimeTotalQ) \
300304
SCPI_COMMAND("SYSTem:CPU:MODel?", scpi_cmd_systemCpuModelQ) \

src/eez/scpi/commands_stm32.h

+4
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@
295295
SCPI_COMMAND("SYSTem:COMMunicate:RLSTate?", scpi_cmd_systemCommunicateRlstateQ) \
296296
SCPI_COMMAND("SYSTem:COMMunicate:MQTT:SETTings", scpi_cmd_systemCommunicateMqttSettings) \
297297
SCPI_COMMAND("SYSTem:COMMunicate:MQTT:STATe?", scpi_cmd_systemCommunicateMqttStateQ) \
298+
SCPI_COMMAND("SYSTem:COMMunicate:USB:MODE", scpi_cmd_systemCommunicateUsbMode) \
299+
SCPI_COMMAND("SYSTem:COMMunicate:USB:MODE?", scpi_cmd_systemCommunicateUsbModeQ) \
300+
SCPI_COMMAND("SYSTem:COMMunicate:USB:CLAss", scpi_cmd_systemCommunicateUsbClass) \
301+
SCPI_COMMAND("SYSTem:COMMunicate:USB:CLAss?", scpi_cmd_systemCommunicateUsbClassQ) \
298302
SCPI_COMMAND("SYSTem:CPU:INFOrmation:ONTime:LAST?", scpi_cmd_systemCpuInformationOntimeLastQ) \
299303
SCPI_COMMAND("SYSTem:CPU:INFOrmation:ONTime:TOTal?", scpi_cmd_systemCpuInformationOntimeTotalQ) \
300304
SCPI_COMMAND("SYSTem:CPU:MODel?", scpi_cmd_systemCpuModelQ) \

src/eez/usb.h

+1
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ bool isMassStorageActive();
4545

4646
#define USB_DEVICE_CLASS_VIRTUAL_COM_PORT 0
4747
#define USB_DEVICE_CLASS_MASS_STORAGE_CLIENT 1
48+
#define USB_HOST_CLASS_HID 2
4849

4950
extern "C" int g_usbDeviceClass;

0 commit comments

Comments
 (0)