boart test board

Dependencies:   USBDevice mbed-dev lwip

Fork of USBSerial_HelloWorld by Compass Yap

Revision:
21:85a0f94a84cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbd_desc2.h	Mon Jul 30 13:11:13 2018 +0000
@@ -0,0 +1,422 @@
+#ifndef APPLICATION_USER_RLNDIS_USBD_DESC2_H
+#define APPLICATION_USER_RLNDIS_USBD_DESC2_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdio.h>
+
+//#define WITHDEBUG	1
+
+#define WITHUSBHW	1
+//#define WITHUSBUAC		1	/* использовать виртуальную звуковую плату на USB соединении */
+//#define WITHUSBUAC3		1	/* формируются три канала передачи звука */
+//#define WITHUABUACOUTAUDIO48MONO	1	/* для уменьшения размера буферов в endpoints */
+
+#define WITHUSBRNDIS	1	/* RNDIS использовать Remote NDIS на USB соединении */
+#define WITHUSBCDCECM	1	/* ECM использовать Ethernet Control Model на USB соединении */
+
+//#define WITHUSBCDC		1	/* ACM использовать виртуальный последовательный порт на USB соединении */
+//#define WITHUSBCDCEEM	1	/* EEM использовать Ethernet Emulation Model на USB соединении */
+//#define WITHUSBHID	1	/* HID использовать Human Interface Device на USB соединении */
+
+#define WITHPLAINDESCROPTOR 0	/* один configuration descriptor с составным устройством */
+
+#if WITHPLAINDESCROPTOR
+
+	#if WITHUSBUAC
+		#if WITHUSBUAC3
+			//#define INTERFACE_UAC_count 2	/* количество интерфейсов в одном UAC */
+		#else /* WITHUSBUAC3 */
+			#define INTERFACE_UAC_count 3	/* количество интерфейсов в одном UAC */
+		#endif /* WITHUSBUAC3 */
+	#endif /* WITHUSBUAC */
+
+	/* Последовательность в данном enum должна соответствовать порядку использования в fill_Configuration_main_group */
+	enum
+	{
+
+	#if WITHUSBRNDIS
+		INTERFACE_RNDIS_CONTROL_5,	/* RNDIS control Interface */
+		INTERFACE_RNDIS_DATA_6,		/* RNDIS data Interface */
+	#endif /* WITHUSBRNDIS */
+
+	#if WITHUSBUAC
+		#if WITHUSBUAC3
+			INTERFACE_AUDIO_CONTROL_0,		/* AUDIO transmitter input control interface */
+			INTERFACE_AUDIO_SPK_1,			/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
+			INTERFACE_AUDIO_MIKE_2,		/* USB receiver output  Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			/* */INTERFACE_AUDIO_CONTROL_1,		/* AUDIO spectrum control interface */
+			INTERFACE_AUDIO_RTS_3,		/* USB spectrum Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			//INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 3,
+		#else
+			INTERFACE_AUDIO_CONTROL_0,		/* AUDIO control interface */
+			INTERFACE_AUDIO_SPK_1,		/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
+			INTERFACE_AUDIO_MIKE_2,		/* USB Microphone Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			//INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 2,
+		#endif
+	#endif /* WITHUSBUAC */
+
+	#if WITHUSBCDC
+		INTERFACE_CDC_base,
+		INTERFACE_CDC_CONTROL_3a = INTERFACE_CDC_base,	/* CDC ACM control Interface */
+		INTERFACE_CDC_DATA_4a,		/* CDC ACM data Interface */
+		INTERFACE_CDC_CONTROL_3b,	/* CDC ACM control Interface */
+		INTERFACE_CDC_DATA_4b,		/* CDC ACM data Interface */
+		INTERFACE_CDC_last = INTERFACE_CDC_base + WITHUSBHWCDC_N * 2 - 1,
+	#endif /* WITHUSBCDC */
+
+	#if WITHUSBCDCEEM
+		INTERFACE_CDCEEM_DATA_6,	/* CDC ECM/CDC EEM data Interface */
+	#endif /* WITHUSBCDCEEM */
+
+	#if WITHUSBCDCECM
+		INTERFACE_CDCECM_CONTROL_5,	/* CDC ECM control Interface */
+		INTERFACE_CDCECM_DATA_6,	/* CDC ECM/CDC EEM data Interface */
+	#endif /* WITHUSBCDCECM */
+
+	#if WITHUSBHID
+		INTERFACE_HID_CONTROL_7,	/* HID control Interface */
+	#endif /* WITHUSBHID */
+		//
+		INTERFACE_COMPOSITE_count				/* Значение для configuration descriptor */
+	};
+
+	#define INTERFACE_CDCACM_count 2	/* количество интерфейсов в одном CDC */
+	#define INTERFACE_CDCEEM_count 1	/* количество интерфейсов в одном CDC EEM */
+	#define INTERFACE_CDCECM_count 2	/* количество интерфейсов в одном CDC EEM */
+	#define INTERFACE_HID_count 1	/* количество интерфейсов в одном HID */
+	#define INTERFACE_RNDIS_count 2	/* количество интерфейсов в одном RNDIS */
+
+	enum
+	{
+		RNDIS_cfgidx = 1,
+		CDCECM_cfgidx = 1
+	};
+
+#else /* WITHPLAINDESCROPTOR */
+
+	#if WITHUSBUAC
+		#if WITHUSBUAC3
+			//#define INTERFACE_UAC_count 2	/* количество интерфейсов в одном UAC */
+		#else /* WITHUSBUAC3 */
+			#define INTERFACE_UAC_count 3	/* количество интерфейсов в одном UAC */
+		#endif /* WITHUSBUAC3 */
+	#endif /* WITHUSBUAC */
+
+#if WITHUSBRNDIS
+	enum
+	{
+		INTERFACE_RNDIS_CONTROL_5,	/* RNDIS control Interface */
+		INTERFACE_RNDIS_DATA_6,		/* RNDIS data Interface */
+	};
+#endif /* WITHUSBRNDIS */
+
+#if WITHUSBUAC
+	enum
+	{
+		#if WITHUSBUAC3
+			INTERFACE_AUDIO_CONTROL_0,		/* AUDIO transmitter input control interface */
+			INTERFACE_AUDIO_SPK_1,			/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
+			INTERFACE_AUDIO_MIKE_2,		/* USB receiver output  Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			/* */INTERFACE_AUDIO_CONTROL_1,		/* AUDIO spectrum control interface */
+			INTERFACE_AUDIO_RTS_3,		/* USB spectrum Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			//INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 3,
+		#else
+			INTERFACE_AUDIO_CONTROL_0,		/* AUDIO control interface */
+			INTERFACE_AUDIO_SPK_1,		/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
+			INTERFACE_AUDIO_MIKE_2,		/* USB Microphone Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface
+			//INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 2,
+		#endif
+	};
+#endif /* WITHUSBUAC */
+#if WITHUSBCDC
+	enum
+	{
+		INTERFACE_CDC_base,
+		INTERFACE_CDC_CONTROL_3a = INTERFACE_CDC_base,	/* CDC ACM control Interface */
+		INTERFACE_CDC_DATA_4a,		/* CDC ACM data Interface */
+		INTERFACE_CDC_CONTROL_3b,	/* CDC ACM control Interface */
+		INTERFACE_CDC_DATA_4b,		/* CDC ACM data Interface */
+		INTERFACE_CDC_last = INTERFACE_CDC_base + WITHUSBHWCDC_N * 2 - 1,
+	};
+#endif /* WITHUSBCDC */
+#if WITHUSBCDCEEM
+	enum
+	{
+
+		INTERFACE_CDCEEM_DATA_6,	/* CDC ECM/CDC EEM data Interface */
+	};
+#endif /* WITHUSBCDCEEM */
+#if WITHUSBCDCECM
+	enum
+	{
+		INTERFACE_CDCECM_CONTROL_5,	/* CDC ECM control Interface */
+		INTERFACE_CDCECM_DATA_6,	/* CDC ECM/CDC EEM data Interface */
+	};
+	#endif /* WITHUSBCDCECM */
+#if WITHUSBHID
+	enum
+	{
+		INTERFACE_HID_CONTROL_7,	/* HID control Interface */
+		//
+	};
+#endif /* WITHUSBHID */
+
+
+	#define INTERFACE_CDCACM_count 2	/* количество интерфейсов в одном CDC */
+	#define INTERFACE_CDCEEM_count 1	/* количество интерфейсов в одном CDC EEM */
+	#define INTERFACE_CDCECM_count 2	/* количество интерфейсов в одном CDC ECM */
+	#define INTERFACE_HID_count 1	/* количество интерфейсов в одном HID */
+	#define INTERFACE_RNDIS_count 2	/* количество интерфейсов в одном RNDIS */
+
+	enum
+	{
+		UNUSED_cfgidx = 0,
+		//
+		RNDIS_cfgidx,
+		CDCECM_cfgidx,
+		//
+		UNUSED2_cfgidx
+	};
+
+#endif /* WITHPLAINDESCROPTOR */
+
+//#define INTERFACE_UAC_count (INTERFACE_AUDIO_last - INTERFACE_AUDIO_CONTROL_0)
+
+// STM32F429:
+//	valid EPs: dcp, 0x01/0x81, 0x02/0x82, 0x03/0x83
+// STM32F446, STM32F746:
+//	valid EPs: dcp, 0x01/0x81, 0x02/0x82, 0x03/0x83, 0x04/0x84, 0x05/0x85
+
+
+#if WITHUSBUAC
+	#if WITHUSBUAC3
+
+		#define WITHUSBHWCDC_N	2	// количество виртуальных последовательных портов
+
+	#else /* WITHUSBUAC3 */
+
+		#define WITHUSBHWCDC_N	2	// количество виртуальных последовательных портов
+
+	#endif /* WITHUSBUAC3 */
+#endif /* WITHUSBUAC */
+
+#if ! defined (WITHUSBHWCDC_N)
+	#define WITHUSBHWCDC_N	2	// количество виртуальных последовательных портов
+#endif /* ! defined (WITHUSBHWCDC_N) */
+
+
+// IN and INT Endpoints allocation
+enum
+{
+	ep0inxxx = 0x80,
+
+#if WITHUSBRNDIS
+	RNDIS_NOTIFICATION_IN_EP,
+	RNDIS_DATA_IN_EP,
+#endif /* WITHUSBRNDIS */
+
+#if WITHUSBUAC
+	#if WITHUSBUAC3
+		USBD_EP_AUDIO_IN,	// ISOC IN Аудиоданные в компьютер из TRX
+		USBD_EP_RTS_IN,	// ISOC IN Аудиоданные в компьютер из TRX
+	#else
+		USBD_EP_AUDIO_IN,	// ISOC IN Аудиоданные в компьютер из TRX
+	#endif
+#endif /* WITHUSBUAC */
+
+#if WITHUSBCDC
+	USBD_EP_CDC_IN,		// CDC IN Данные ком-порта в компьютер из TRX
+	USBD_EP_CDC_INb,	// CDC IN Данные ком-порта в компьютер из TRX
+	USBD_EP_CDC_INlast = USBD_EP_CDC_IN + WITHUSBHWCDC_N - 1,
+
+	USBD_EP_CDC_INT,	// CDC INT События ком-порта в компьютер из TRX
+	USBD_EP_CDC_INTb,	// CDC INT События ком-порта в компьютер из TRX
+	USBD_EP_CDC_INTlast = USBD_EP_CDC_INT + WITHUSBHWCDC_N - 1,
+#endif /* WITHUSBCDC */
+
+#if WITHUSBCDCEEM
+	USBD_EP_CDCEEM_IN,	// CDC IN Данные ком-порта в компьютер из TRX
+#endif /* WITHUSBCDCEEM */
+
+#if WITHUSBCDCECM
+	USBD_EP_CDCECM_IN,	// CDC IN Данные ком-порта в компьютер из TRX
+	USBD_EP_CDCECM_INT,	// CDC INT События ком-порта в компьютер из TRX
+#endif /* WITHUSBCDCECM */
+
+#if WITHUSBHID
+	//USBD_EP_HIDMOUSE_INT,	// HID INT События манипулятора в компьютер из TRX
+#endif /* WITHUSBHID */
+
+	//
+	epincount
+};
+
+// OUT Endpoints allocation
+enum
+{
+	ep0outxxx = 0x00,
+
+#if WITHUSBRNDIS
+	RNDIS_DATA_OUT_EP,
+#endif /* WITHUSBRNDIS */
+
+#if WITHUSBUAC
+	#if WITHUSBUAC3
+		USBD_EP_AUDIO_OUT,
+	#else
+		USBD_EP_AUDIO_OUT,	// ISOC OUT Аудиоданные от компьютера в TRX
+	#endif
+#endif /* WITHUSBUAC */
+
+#if WITHUSBCDC
+	USBD_EP_CDC_OUT,	// CDC OUT Данные ком-порта от компьютера в TRX
+	USBD_EP_CDC_OUTb,	// CDC OUT Данные ком-порта от компьютера в TRX
+	USBD_EP_CDC_OUTlast = USBD_EP_CDC_OUT + WITHUSBHWCDC_N - 1,
+#endif /* WITHUSBCDC */
+
+#if WITHUSBCDCEEM
+	USBD_EP_CDCEEM_OUT,	// CDC OUT Данные ком-порта от компьютера в TRX
+#endif /* WITHUSBCDCEEM */
+
+#if WITHUSBCDCECM
+	USBD_EP_CDCECM_OUT,	// CDC OUT Данные ком-порта от компьютера в TRX
+#endif /* WITHUSBCDCECM */
+
+#if WITHUSBHID
+#endif /* WITHUSBHID */
+	//
+	epoutcount
+};
+
+//#if WITHUSBCDC
+	#define VIRTUAL_COM_PORT_INT_SIZE 			10
+	#define VIRTUAL_COM_PORT_DATA_SIZE			64
+//#endif /* WITHUSBCDC */
+
+//#if WITHUSBHID
+	#define HIDMOUSE_INT_DATA_SIZE 4
+//#endif /* WITHUSBHID */
+
+//#if WITHUSBCDCEEM
+	#define USBD_CDCEEM_BUFSIZE	64
+//#endif /* WITHUSBCDCEEM */
+
+//#if WITHUSBCDCECM
+	#define CDCECM_NOTIFICATION_IN_SZ                        16
+	#define CDCECM_DATA_IN_SZ                                64
+	#define CDCECM_DATA_OUT_SZ                               64
+//#endif /* WITHUSBCDCECM */
+
+//#if WITHUSBRNDIS
+	#define RNDIS_NOTIFICATION_IN_SZ                        8
+	#define RNDIS_DATA_IN_SZ                                64
+	#define RNDIS_DATA_OUT_SZ                               64
+//#endif /* WITHUSBRNDIS */
+
+#define HSINTERVAL_AUDIO48 4	// endpoint descriptor parameters - для обеспечсения 1 кГц периода
+#define FSINTERVAL_AUDIO48 1
+
+#define HSINTERVAL_32MS 9	// endpoint descriptor parameters - для обеспечсения 1 кГц периода
+#define FSINTERVAL_32MS 32
+
+struct descholder
+{
+	const uint8_t * data;
+	unsigned size;
+};
+
+#define USBD_NCONFIGS 4
+
+extern struct descholder StringDescrTbl [];
+extern struct descholder ConfigDescrTbl [USBD_NCONFIGS];
+extern struct descholder DeviceDescrTbl [USBD_NCONFIGS];
+extern struct descholder DeviceQualifierTbl [USBD_NCONFIGS];
+extern struct descholder OtherSpeedConfigurationTbl [USBD_NCONFIGS];
+extern struct descholder BinaryDeviceObjectStoreTbl [1];
+extern struct descholder HIDReportDescrTbl [1];
+
+uint_fast8_t usbd_get_stringsdesc_count(void);
+
+void usbd_descriptors_initialize(uint_fast8_t HSdesc);
+
+#define  HI_32BY(w)  (((w) >> 24) & 0xFF)   /* Extract 31..24 bits from unsigned word */
+#define  HI_24BY(w)  (((w) >> 16) & 0xFF)   /* Extract 23..16 bits from unsigned word */
+#define  HI_BYTE(w)  (((w) >> 8) & 0xFF)   /* Extract high-order byte from unsigned word */
+#define  LO_BYTE(w)  ((w) & 0xFF)          /* Extract low-order byte from unsigned word */
+
+#define  ARRAY_SIZE(a)  (sizeof(a)/sizeof(a[0]))
+/* bMaxPower in Configuration Descriptor */
+#define USB_CONFIG_POWER_MA(mA)                ((mA)/2)
+
+
+#include <inttypes.h>	// format specifiers for printing
+
+
+#define FLASHMEM /* */
+
+uint_fast8_t local_snprintf_P( char *buffer, uint_fast8_t count, const FLASHMEM char *format, ... );
+
+
+void arm_hardware_invalidate(uintptr_t base, size_t size);	// Сейчас в эту память будем читать по DMA
+void arm_hardware_flush(uintptr_t base, size_t size);	// Сейчас эта память будет записываться по DMA куда-то
+void arm_hardware_flush_invalidate(uintptr_t base, size_t size);	// Сейчас эта память будет записываться по DMA куда-то. Потом содержимое не требуется
+void arm_hardware_flush_all(void);
+
+
+
+#define PSTR(s) (__extension__({static const char __c[] FLASHMEM = (s); &__c[0];}))
+
+#if WITHDEBUG
+	#define TP() \
+		do { \
+			static const char this_file [] = __FILE__; \
+			printf(PSTR("At %d in %s.\n"), __LINE__, this_file); \
+		} while(0)
+#else /* WITHDEBUG */
+	#define TP() do { } while(0)
+#endif /* WITHDEBUG */
+
+#if WITHDEBUG
+
+	#define ASSERT(v) do { if ((v) == 0) { \
+		printf(PSTR("%s(%d): Assert '%s'\n"), __FILE__, __LINE__, (# v)); \
+		for (;;) ; \
+		} } while (0)
+
+	#define VERIFY(v) do { if ((v) == 0) { \
+		printf(PSTR("%s(%d): Verify '%s'\n"), __FILE__, __LINE__, (# v)); \
+		for (;;) ; \
+		} } while (0)
+
+	#define TRACE0(f)		printf( PSTR(f))
+	#define TRACE1(f,a1)		printf( PSTR(f),(a1))
+	#define TRACE2(f,a1,a2)		printf( PSTR(f),(a1),(a2))
+	#define TRACE3(f,a1,a2,a3)	printf( PSTR(f),(a1),(a2),(a3))
+	#define TRACE4(f,a1,a2,a3,a4)	printf( PSTR(f),(a1),(a2),(a3),(a4))
+	#define TRACE5(f,a1,a2,a3,a4,a5) printf( PSTR(f),(a1),(a2),(a3),(a4),(a5))
+
+#else /* WITHDEBUG */
+
+	#define ASSERT(v) ((void) (0))
+	#define VERIFY(v) ((void) (v))
+
+	#define TRACE0(f)			do {} while (0)
+	#define TRACE1(f,a1)			do {} while (0)
+	#define TRACE2(f,a1,a2)			do {} while (0)
+	#define TRACE3(f,a1,a2,a3)		do {} while (0)
+	#define TRACE4(f,a1,a2,a3,a4)		do {} while (0)
+	#define TRACE5(f,a1,a2,a3,a4,a5)		do {} while (0)
+
+#endif /* WITHDEBUG */
+
+/* NIC-to-LwIP buffers interface functions.
+ * Should be called in IRQ handler request or in disabled IRQ state.
+ * */
+unsigned comm_allocbuffer(uint8_t * * bp);
+void comm_freebuffer(uint8_t * p);
+void comm_saverxbuffer(uint8_t * p, unsigned len);
+
+#define PRINTF printf
+
+#endif /* APPLICATION_USER_RLNDIS_USBD_DESC2_H */