| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #define USB_APPLICATION_INTERFACESWITCH_C
- #include "core/config.h"
- #include "usbapp/usb_application_interfaceswitch.h"
- #include "usb/usb_bridge.h"
- #include "usb/usb_config.h"
- #include "usbd_vendor.h"
- #include "my_assert.h"
- #if CONFIG_NFMBASECLASS
- #include "app/nfm/nfm_base.h"
- #else
- #error This feature can not be implemented without CONFIG_NFMBASECLASS
- #endif
- #define PROTO_REQ_INTERFACE_SWITCH 0xBF // ïåðåêëþ÷èòü èíòåðôåéñ íà USBTMC
- static int8_t fInterfaceSwitchAppInit();
- static int8_t fInterfaceSwitchAppDeInit();
- static void fInterfaceSwitchAppReset();
- static bool fInterfaceSwitchAppSetup( const tUSBSetupPacket_t * pSetup, bool bFirstStage, bool success );
- static size_t fInterfaceSwitchAppControlRx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * rx, size_t idx, size_t bytesRemaining );
- static size_t fInterfaceSwitchAppControlTx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * tx, size_t idx, size_t bytesRemaining );
- const sUSBAppEntry_Control_t usbapplication_ACM_planarproto_interfaceswitch = {
- .fUsbInit = fInterfaceSwitchAppInit,
- .fUsbDeInit = fInterfaceSwitchAppDeInit,
- .fUsbSetup = fInterfaceSwitchAppSetup,
- .fUsbCtlEpRx = fInterfaceSwitchAppControlRx,
- .fUsbCtlEpTx = fInterfaceSwitchAppControlTx,
- .fResetEvent = fInterfaceSwitchAppReset,
- };
- static int8_t fInterfaceSwitchAppInit()
- {
- #if !CONFIG_USB_USBTMC_ENABLE
- my_assert(false); // USBTMC is not enabled in configuration
- #endif
- return 0;
- }
- static int8_t fInterfaceSwitchAppDeInit()
- {
- return 0;
- }
- static void fInterfaceSwitchAppReset()
- {
- }
- static bool fInterfaceSwitchAppSetup( const tUSBSetupPacket_t * pSetup, bool bFirstStage, bool success )
- {
- switch( pSetup->bRequest )
- {
- case PROTO_REQ_INTERFACE_SWITCH:
- {
- #if !CONFIG_USB_OVERRIDE_IFACE_VENDOR
- return true; // request supported, pass to the TX stage
- #endif
- }
- break;
- }
- return false;
- }
- static size_t fInterfaceSwitchAppControlRx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * rx, size_t idx, size_t bytesRemaining )
- {
- return 0;
- }
- static size_t fInterfaceSwitchAppControlTx( const tUSBSetupPacket_t * pSetup, sUSBTransfer_t * tx, size_t idx, size_t bytesRemaining )
- {
- switch( pSetup->bRequest )
- {
- case PROTO_REQ_INTERFACE_SWITCH: // read the raw lowlevel control code
- {
- uint8_t status = 0;
- #if CONFIG_USB_USBTMC_ENABLE
- #if !CONFIG_USB_OVERRIDE_IFACE_VENDOR
- bool rc = NFMClass->methods.usbInterface.setInterface( eNFM_IfaceUSBTMC );
- #if CONFIG_REBOOT_FEATURE
- if( rc ) RebootRequest();
- #endif
- status = ((rc)?'\1':'\0');
- #endif
- #endif
- if( 0 == idx && sizeof(uint8_t) == bytesRemaining )
- {
- usb_push_transfer( tx, &status, sizeof( status ) );
- }
- }
- break;
- }
- return usb_count_transfer( tx );
- }
|