diff --git a/pycardium/modules/os.c b/pycardium/modules/os.c
index e5c625ef4f2dde5e138a08a28591935cb7fc0f97..dbac311c924dbcf17d7ad1fe7a3a01061d352605 100644
--- a/pycardium/modules/os.c
+++ b/pycardium/modules/os.c
@@ -89,12 +89,43 @@ static mp_obj_t mp_os_unlink(mp_obj_t py_path)
 }
 static MP_DEFINE_CONST_FUN_OBJ_1(unlink_obj, mp_os_unlink);
 
+enum usb_config_device {
+	USB_Device_None,
+	USB_Device_Flash,
+	USB_Device_Serial,
+};
+
+static mp_obj_t mp_os_usbconfig(mp_obj_t dev)
+{
+	int device = mp_obj_get_int(dev);
+	switch (device) {
+	case USB_Device_None:
+		epic_usb_shutdown();
+		break;
+	case USB_Device_Flash:
+		epic_usb_storage();
+		break;
+	case USB_Device_Serial:
+		epic_usb_cdcacm();
+		break;
+	default:
+		mp_raise_ValueError("Invalid parameter");
+	}
+	return mp_const_none;
+}
+static MP_DEFINE_CONST_FUN_OBJ_1(usbconfig_obj, mp_os_usbconfig);
+
 static const mp_rom_map_elem_t os_module_globals_table[] = {
 	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_os) },
 	{ MP_ROM_QSTR(MP_QSTR_exit), MP_ROM_PTR(&exit_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_exec), MP_ROM_PTR(&exec_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_listdir), MP_ROM_PTR(&listdir_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&unlink_obj) },
+	{ MP_ROM_QSTR(MP_QSTR_usbconfig), MP_ROM_PTR(&usbconfig_obj) },
+
+	{ MP_ROM_QSTR(MP_QSTR_SERIAL), MP_ROM_INT(USB_Device_None) },
+	{ MP_ROM_QSTR(MP_QSTR_FLASH), MP_ROM_INT(USB_Device_Flash) },
+	{ MP_ROM_QSTR(MP_QSTR_NONE), MP_ROM_INT(USB_Device_Serial) },
 };
 
 static MP_DEFINE_CONST_DICT(os_module_globals, os_module_globals_table);
diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h
index 49ad16f40b8dd7ae88e4a756be3270739b7625d8..6d195bf80ec3feac15816a3b831cb41f0620403b 100644
--- a/pycardium/modules/qstrdefs.h
+++ b/pycardium/modules/qstrdefs.h
@@ -100,6 +100,10 @@ Q(exit)
 Q(exec)
 Q(listdir)
 Q(unlink)
+Q(usbconfig)
+Q(FLASH)
+Q(SERIAL)
+Q(NONE)
 
 /* gpio */
 Q(gpio)