Set USB Gadget name to MiniDexed and fix setting of USB product (device) ID. Fixes #416 (#593)

pull/446/head^2
Kevin 10 months ago committed by GitHub
parent 06be0a533c
commit 9bc36800b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      build.sh
  2. 4
      src/kernel.cpp
  3. 86
      src/usbminidexedmidigadget.h

@ -26,7 +26,7 @@ if [ "${USB_VID}" ] ; then
OPTIONS="${OPTIONS} -o USB_GADGET_VENDOR_ID=${USB_VID}" OPTIONS="${OPTIONS} -o USB_GADGET_VENDOR_ID=${USB_VID}"
fi fi
if [ "${USB_DID}" ] ; then if [ "${USB_DID}" ] ; then
OPTIONS="${OPTIONS} -o USB_GADGET_DEVICE_ID=${USB_DID}" OPTIONS="${OPTIONS} -o USB_GADGET_DEVICE_ID_BASE=${USB_DID}"
fi fi
# Build circle-stdlib library # Build circle-stdlib library

@ -22,7 +22,7 @@
#include <circle/synchronize.h> #include <circle/synchronize.h>
#include <assert.h> #include <assert.h>
#include <circle/usb/usbhcidevice.h> #include <circle/usb/usbhcidevice.h>
#include <circle/usb/gadget/usbmidigadget.h> #include "usbminidexedmidigadget.h"
LOGMODULE ("kernel"); LOGMODULE ("kernel");
@ -69,7 +69,7 @@ bool CKernel::Initialize (void)
if (m_Config.GetUSBGadgetMode()) if (m_Config.GetUSBGadgetMode())
{ {
// Run the USB stack in USB Gadget (device) mode // Run the USB stack in USB Gadget (device) mode
m_pUSB = new CUSBMIDIGadget (&mInterrupt); m_pUSB = new CUSBMiniDexedMIDIGadget (&mInterrupt);
} }
else else
{ {

@ -0,0 +1,86 @@
//
// usbminidexedmidigadget.h
//
// MiniDexed - Dexed FM synthesizer for bare metal Raspberry Pi
// Copyright (C) 2022 The MiniDexed Team
//
// Based on circle/usb/gadget/usbmidigadget.h
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef _usbminidexedmidigadget_h
#define _usbminidexedmidigadget_h
#include <circle/usb/gadget/usbmidigadget.h>
#include <circle/usb/gadget/usbmidigadgetendpoint.h>
#include <circle/sysconfig.h>
#include <assert.h>
class CUSBMiniDexedMIDIGadget : public CUSBMIDIGadget
{
private:
#define MDSTRINGDESCRIPTORS 3
const char *const s_MiniDexedStringDescriptor[MDSTRINGDESCRIPTORS] =
{
"\x04\x03\x09\x04", // Language ID
"probonopd",
"MiniDexed"
};
public:
CUSBMiniDexedMIDIGadget (CInterruptSystem *pInterruptSystem)
: CUSBMIDIGadget (pInterruptSystem)
{
}
~CUSBMiniDexedMIDIGadget (void)
{
assert(0);
}
protected:
// Override GetDescriptor frmo CUSBMIDIGadget.
// See CUSBMIDIGadget for details.
// This will only act on the DESCRIPOR_STRING.
// All other descriptors are returned from USBMIDIGadget.
//
const void *GetDescriptor (u16 wValue, u16 wIndex, size_t *pLength) override
{
assert (pLength);
u8 uchDescIndex = wValue & 0xFF;
switch (wValue >> 8)
{
case DESCRIPTOR_STRING:
if (!uchDescIndex)
{
*pLength = (u8) s_MiniDexedStringDescriptor[0][0];
return s_MiniDexedStringDescriptor[0];
}
else if (uchDescIndex < MDSTRINGDESCRIPTORS)
{
return CUSBMIDIGadget::ToStringDescriptor (s_MiniDexedStringDescriptor[uchDescIndex], pLength);
}
break;
default:
break;
}
return CUSBMIDIGadget::GetDescriptor(wValue, wIndex, pLength);
}
};
#endif
Loading…
Cancel
Save