ref: 21f5ac6f65245a6d5f1b63b0f1a38d4001f1d5dc
dir: /LEAF/Inc/usbh_MIDI.h/
/** ****************************************************************************** * @file usbh_MIDI.h * @author Xavier Halgand * @version * @date * @brief This file contains all the prototypes for the usbh_MIDI.c ****************************************************************************** */ /* * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* Define to prevent recursive ----------------------------------------------*/ #ifndef __USBH_MIDI_CORE_H #define __USBH_MIDI_CORE_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "usbh_core.h" //#include "stm32f7xx_nucleo_144.h" /*-------------------------------------------------------------------------------*/ // buffer size (should be at least >= MIOS32_USB_MIDI_DESC_DATA_*_SIZE/4) #define USB_MIDI_RX_BUFFER_SIZE 64 // packages #define USB_MIDI_TX_BUFFER_SIZE 64 // packages // size of IN/OUT pipe #define USB_MIDI_DATA_IN_SIZE 64 #define USB_MIDI_DATA_OUT_SIZE 64 // endpoint assignments (don't change!) #define USB_MIDI_DATA_OUT_EP 0x02 #define USB_MIDI_DATA_IN_EP 0x81 /** @defgroup USBH_MIDI_CORE_Exported_Defines * @{ */ #define USB_AUDIO_CLASS 0x01 #define USB_MIDISTREAMING_SubCLASS 0x03 #define USB_MIDI_DESC_SIZE 9 #define USBH_MIDI_CLASS &MIDI_Class /*-------------------------------------------------------------------------------*/ extern USBH_ClassTypeDef MIDI_Class; /* -------------------- Exported_Types ------------------------------------------*/ typedef enum { NoteOff = 0x8, NoteOn = 0x9, PolyPressure = 0xa, CC = 0xb, ProgramChange = 0xc, Aftertouch = 0xd, PitchBend = 0xe } midi_event_t; typedef enum { Chn1, Chn2, Chn3, Chn4, Chn5, Chn6, Chn7, Chn8, Chn9, Chn10, Chn11, Chn12, Chn13, Chn14, Chn15, Chn16 } midi_chn_t; #pragma anon_unions typedef union { struct { uint32_t ALL; }; struct { uint8_t cin_cable; uint8_t evnt0; uint8_t evnt1; uint8_t evnt2; }; struct { uint8_t type:4; uint8_t cable:4; uint8_t chn:4; // mios32_midi_chn_t uint8_t event:4; // mios32_midi_event_t uint8_t value1; uint8_t value2; }; // C++ doesn't allow to redefine names in anonymous unions // as a simple workaround, we rename these redundant names struct { uint8_t cin:4; uint8_t dummy1_cable:4; uint8_t dummy1_chn:4; // mios32_midi_chn_t uint8_t dummy1_event:4; // mios32_midi_event_t uint8_t note:8; uint8_t velocity:8; }; struct { uint8_t dummy2_cin:4; uint8_t dummy2_cable:4; uint8_t dummy2_chn:4; // mios32_midi_chn_t uint8_t dummy2_event:4; // mios32_midi_event_t uint8_t cc_number:8; uint8_t value:8; }; struct { uint8_t dummy3_cin:4; uint8_t dummy3_cable:4; uint8_t dummy3_chn:4; // mios32_midi_chn_t uint8_t dummy3_event:4; // mios32_midi_event_t uint8_t program_change:8; uint8_t dummy3:8; }; } midi_package_t; /* States for MIDI State Machine */ typedef enum { MIDI_IDLE= 0, MIDI_SEND_DATA, MIDI_SEND_DATA_WAIT, MIDI_RECEIVE_DATA, MIDI_RECEIVE_DATA_WAIT, } MIDI_DataStateTypeDef; typedef enum { MIDI_IDLE_STATE= 0, MIDI_TRANSFER_DATA, MIDI_ERROR_STATE, } MIDI_StateTypeDef; /* Structure for MIDI process */ typedef struct _MIDI_Process { MIDI_StateTypeDef state; uint8_t InPipe; uint8_t OutPipe; uint8_t OutEp; uint8_t InEp; uint16_t OutEpSize; uint16_t InEpSize; uint8_t *pTxData; uint8_t *pRxData; uint16_t TxDataLength; uint16_t RxDataLength; MIDI_DataStateTypeDef data_tx_state; MIDI_DataStateTypeDef data_rx_state; uint8_t Rx_Poll; //uint8_t buff[8]; //MIDI_DataItfTypedef DataItf; //CDC_InterfaceDesc_Typedef CDC_Desc; } MIDI_HandleTypeDef; /*---------------------------Exported_FunctionsPrototype-------------------------------------*/ USBH_StatusTypeDef USBH_MIDI_Transmit(USBH_HandleTypeDef *phost, uint8_t *pbuff, uint16_t length); USBH_StatusTypeDef USBH_MIDI_Receive(USBH_HandleTypeDef *phost, uint8_t *pbuff, uint16_t length); uint32_t USBH_MIDI_GetLastReceivedDataSize(USBH_HandleTypeDef *phost); USBH_StatusTypeDef USBH_MIDI_Stop(USBH_HandleTypeDef *phost); void USBH_MIDI_TransmitCallback(USBH_HandleTypeDef *phost); void USBH_MIDI_ReceiveCallback(USBH_HandleTypeDef *phost, uint32_t myLength); /*-------------------------------------------------------------------------------------------*/ #endif /* __USBH_MIDI_CORE_H */ /*****************************END OF FILE*************************************************************/