- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The following MIDI project is a simpler version of the 'MIDI Piano' project. What I need at the moment is blinking an LED when the host sends any MIDI Sysex message. However, when I plug the board into the host PC, I get the following error message:
When I comment out the MIDI identity reply part (as in the MIDI Piano project), I don't have this problem however the host PC does not recognise the MIDI device. What am I missing?
#include "project.h"
#include <stdlib.h>
#include <stdio.h>
#include <USBMIDI1_midi.h>
#define BlinkLED(); {Pin_LED_Write(1); CyDelayUs(3); Pin_LED_Write(0);} // blink LED indicator
//===========================================
// Global variables
//===========================================
char buff[32];//output UART buffer
#define DEVICE (0u)
#define MIDI_MSG_SIZE (4u)
// Identity Reply message
const uint8 CYCODE MIDI_IDENTITY_REPLY[] = {
0xF0u, // SysEx
0x7Eu, // Non-real time
0x7Fu, // ID of target device (7F - "All Call")
0x06u, // Sub-ID#1 - General Information
0x02u, // Sub-ID#2 - Identity Reply
0x7Du, // Manufacturer's ID: 7D - Educational Use
0xB4u, 0x04u, // Family code
0x32u, 0xD2u, // Model number
0x01u, 0x00u, 0x00u, 0x00u, // Version number
//0xF7 //End of SysEx automatically appended
};
//extern volatile uint8 USB_MIDI1_InqFlags; // Need for Identity Reply message
void Init()
{
CyGlobalIntEnable;
// USBMIDI_1_Start(DEVICE, USB_DWR_VDDD_OPERATION); // Start USBFS device 0 with VDDD operation
USBMIDI1_Start(DEVICE, USBMIDI1_DWR_POWER_OPERATION);
CyDelay(20);
}
//==============================================================================
// Function Name: main
//==============================================================================
// Summary:
// 1. Starts the USBFS device and waits for enumaration.
//==============================================================================
int main()
{
Init();
while(1u) // forever
{
/* Host can send double SET_INTERFACE request */
if(0u != USBMIDI1_IsConfigurationChanged())
{
if(0u != USBMIDI1_GetConfiguration()) // Initialize IN endpoints when device configured
{
USBMIDI1_Init(); // Enable output endpoint
}
}
// Service USB MIDI when device is configured
if(0u != USBMIDI1_GetConfiguration())
{
// Call this API from UART RX ISR for Auto DMA mode
#if(!USB_EP_MANAGEMENT_DMA_AUTO)
USBMIDI1_MIDI_IN_Service();
#endif
// In Manual EP Memory Management mode OUT_EP_Service()
// may have to be called from main foreground or from OUT EP ISR
#if(!USBMIDI1_EP_MANAGEMENT_DMA_AUTO)
USBMIDI1_MIDI_OUT_Service();
#endif
// Sending Identity Reply Universal System Exclusive message back to computer
if(0u != (USBMIDI1_MIDI1_InqFlags & USBMIDI1_INQ_IDENTITY_REQ_FLAG))
{
USBMIDI1_PutUsbMidiIn(sizeof(MIDI_IDENTITY_REPLY), (uint8 *)MIDI_IDENTITY_REPLY, USBMIDI1_MIDI_CABLE_00);
USBMIDI1_MIDI1_InqFlags &= ~USBMIDI1_INQ_IDENTITY_REQ_FLAG;
}
}
}
}
//void USBMIDI1_callbackLocalMidiEvent(uint8 cable, uint8 *midiMsg) CYREENTRANT
//{
// BlinkLED();
// cable = cable; // to avoid a warning message (var not used..)
// *midiMsg = *midiMsg;
//}
//==============================================================================
// Function Name: USB_MIDI1_ProcessUsbOut_EntryCallback
//==============================================================================
// Summary: Turn the LED_OutA on at the beginning of the function
// USB_MIDI1_ProcessUsbOut() when data comes to be put in the UART1 out
// buffer.
//
// To enable interrupts set USB_(MIDI descriptor)_(External Mode) = True
//==============================================================================
//void USB_MIDI1_ProcessUsbOut_EntryCallback(void)
//{
// BlinkLED();
//
//}
//==============================================================================
// Function Name: USB_MIDI1_ProcessUsbOut_ExitCallback
//==============================================================================
// Summary: Turn the LED_OutA off at the end of the function
// USB_MIDI1_ProcessUsbOut() when data is put in the UART1 out-buffer.
//
// To enable interrupts set USB_(MIDI descriptor)_(External Mode) = True
//==============================================================================
/*
void USB_MIDI1_ProcessUsbOut_ExitCallback(void)
{
//LED_OutA_Write(0);
}
*/
/* [] END OF FILE */
Any help would be appreciated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Greg,
The code looks like my old Piano project. I can look into it on weekend, unless someone helps you before that.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I would really appreciate that, thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Greg,
I opened and compiled your project using Creator 4.4 without any issues. I can't check it for Creator 4.2 compatibility, as I don't have it installed.
I recommend to close Creator and delete temp files folder, Generated source folder and *.cyfit file.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Memory issues in MIDI OUT applications can arise due to various factors, including inefficient coding, memory leaks, excessive resource consumption, or insufficient system resources. Here are some steps you can take to address memory issues in MIDI OUT applications:
-
Check System Requirements: Ensure that your computer meets the minimum system requirements for running the MIDI OUT application. Insufficient RAM or processing power can lead to performance issues and memory constraints.
-
Update Software: Make sure you are using the latest version of the MIDI OUT application. Software updates often include bug fixes, performance improvements, and optimizations that can help resolve memory issues.
-
Optimize Code: Review the code of the MIDI OUT application for any inefficiencies or memory leaks. Look for areas where memory may be allocated but not properly deallocated, leading to memory buildup over time. Consider optimizing algorithms, data structures, and resource management techniques to minimize memory usage.