mbed USBHostMIDI improved. function pointer initialization and null checking

Files at this revision

API Documentation at this revision

Comitter:
kazbo
Date:
Fri May 10 11:23:49 2019 +0000
Parent:
6:d3ac9e1c0035
Commit message:
mbed USBHostMIDI improved. function pointer initialization and NULL checking;

Changed in this revision

USBHostMIDI/USBHostMIDI.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/USBHostMIDI/USBHostMIDI.cpp	Wed Apr 26 20:08:31 2017 +0000
+++ b/USBHostMIDI/USBHostMIDI.cpp	Fri May 10 11:23:49 2019 +0000
@@ -24,11 +24,24 @@
 
 #define SET_LINE_CODING 0x20
 
-USBHostMIDI::USBHostMIDI() {
-    host = USBHost::getHostInst();
-    size_bulk_in = 0;
-    size_bulk_out = 0;
-    init();
+USBHostMIDI::USBHostMIDI() :
+   miscellaneousFunctionCode(NULL),
+   cableEvent(NULL),
+   systemCommonTwoBytes(NULL),
+   systemCommonThreeBytes(NULL),
+   systemExclusive(NULL),
+   noteOff(NULL),
+   noteOn(NULL),
+   polyKeyPress(NULL),
+   controlChange(NULL),
+   programChange(NULL),
+   channelPressure(NULL),
+   pitchBend(NULL),
+   singleByte(NULL) {
+   host = USBHost::getHostInst();
+   size_bulk_in = 0;
+   size_bulk_out = 0;
+   init();
 }
 
 void USBHostMIDI::init() {
@@ -105,26 +118,38 @@
                 // switch by code index number
                 switch (midi[0] & 0xf) {
                     case 0: // miscellaneous function codes
-                        miscellaneousFunctionCode(midi[1], midi[2], midi[3]);
+                        if (miscellaneousFunctionCode) {
+                            miscellaneousFunctionCode(midi[1], midi[2], midi[3]);
+                        }
                         break;
                     case 1: // cable events
-                        cableEvent(midi[1], midi[2], midi[3]);
+                        if (cableEvent) {
+                            cableEvent(midi[1], midi[2], midi[3]);
+                        }
                         break;
                     case 2: // two bytes system common messages 
-                        systemCommonTwoBytes(midi[1], midi[2]);
+                        if (systemCommonTwoBytes) {
+                            systemCommonTwoBytes(midi[1], midi[2]);
+                        }
                         break;
                     case 3: // three bytes system common messages 
-                        systemCommonThreeBytes(midi[1], midi[2], midi[3]);
+                        if (systemCommonThreeBytes) {
+                            systemCommonThreeBytes(midi[1], midi[2], midi[3]);
+                        }
                         break;
                     case 4: // SysEx starts or continues
                         sysExBuffer[sysExBufferPos++] = midi[1];
                         if (sysExBufferPos >= 64) {
-                            systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            if (systemExclusive) {
+                                systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            }
                             sysExBufferPos = 0;
                         }
                         sysExBuffer[sysExBufferPos++] = midi[2];
                         if (sysExBufferPos >= 64) {
-                            systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            if (systemExclusive) {
+                                systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            }
                             sysExBufferPos = 0;
                         }
                         sysExBuffer[sysExBufferPos++] = midi[3];
@@ -132,61 +157,93 @@
                         break;
                     case 5: // SysEx ends with single byte
                         sysExBuffer[sysExBufferPos++] = midi[1];
-                        systemExclusive(sysExBuffer, sysExBufferPos, false);
+                        if (systemExclusive) {
+                            systemExclusive(sysExBuffer, sysExBufferPos, false);
+                        }
                         sysExBufferPos = 0;
                         break;
                     case 6: // SysEx ends with two bytes
                         sysExBuffer[sysExBufferPos++] = midi[1];
                         if (sysExBufferPos >= 64) {
-                            systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            if (systemExclusive) {
+                                systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            }
                             sysExBufferPos = 0;
                         }
                         sysExBuffer[sysExBufferPos++] = midi[2];
-                        systemExclusive(sysExBuffer, sysExBufferPos, false);
+
+                        if (systemExclusive) {
+                            systemExclusive(sysExBuffer, sysExBufferPos, false);
+                        }
                         sysExBufferPos = 0;
                         break;
                     case 7: // SysEx ends with three bytes
                         sysExBuffer[sysExBufferPos++] = midi[1];
                         if (sysExBufferPos >= 64) {
-                            systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            if (systemExclusive) {
+                                systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            }
                             sysExBufferPos = 0;
                         }
                         sysExBuffer[sysExBufferPos++] = midi[2];
                         if (sysExBufferPos >= 64) {
-                            systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            if (systemExclusive) {
+                                systemExclusive(sysExBuffer, sysExBufferPos, true);
+                            }
                             sysExBufferPos = 0;
                         }
                         sysExBuffer[sysExBufferPos++] = midi[3];
-                        systemExclusive(sysExBuffer, sysExBufferPos, false);
+
+                        if (systemExclusive) {
+                            systemExclusive(sysExBuffer, sysExBufferPos, false);
+                        }
                         sysExBufferPos = 0;
                         break;
                     case 8:
-                        noteOff(midi[1] & 0xf, midi[2], midi[3]);
-                        break;
-                    case 9:
-                        if (midi[3]) {
-                            noteOn(midi[1] & 0xf, midi[2], midi[3]);
-                        } else {
+                        if (noteOff) {
                             noteOff(midi[1] & 0xf, midi[2], midi[3]);
                         }
                         break;
+                    case 9:
+                        if (midi[3]) {
+                            if (noteOn) {
+                                noteOn(midi[1] & 0xf, midi[2], midi[3]);
+                            }
+                        } else {
+                            if (noteOff) {
+                                noteOff(midi[1] & 0xf, midi[2], midi[3]);
+                            }
+                        }
+                        break;
                     case 10:
-                        polyKeyPress(midi[1] & 0xf, midi[2], midi[3]);
+                        if (polyKeyPress) {
+                            polyKeyPress(midi[1] & 0xf, midi[2], midi[3]);
+                        }
                         break;
                     case 11:
-                        controlChange(midi[1] & 0xf, midi[2], midi[3]);
+                        if (controlChange) {
+                            controlChange(midi[1] & 0xf, midi[2], midi[3]);
+                        }
                         break;
                     case 12:
-                        programChange(midi[1] & 0xf, midi[2]);
+                        if (programChange) {
+                            programChange(midi[1] & 0xf, midi[2]);
+                        }
                         break;
                     case 13:
-                        channelPressure(midi[1] & 0xf, midi[2]);
+                        if (channelPressure) {
+                            channelPressure(midi[1] & 0xf, midi[2]);
+                        }
                         break;
                     case 14:
-                        pitchBend(midi[1] & 0xf, midi[2] | (midi[3] << 7));
+                        if (pitchBend) {
+                            pitchBend(midi[1] & 0xf, midi[2] | (midi[3] << 7));
+                        }
                         break;
                     case 15:
-                        singleByte(midi[1]);
+                        if (singleByte) {
+                            singleByte(midi[1]);
+                        }
                         break;
                 }
             }
@@ -359,4 +416,4 @@
     return false;
 }
 
-#endif
+#endif
\ No newline at end of file