Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
fmif.c
00001 // fmif.c 00002 #include "fmpart.h" 00003 00004 // Variable 00005 static Part _part; 00006 static unsigned char _midiCmdCounter; 00007 static unsigned char _midiStatus; 00008 static unsigned char _midiDataByte1; 00009 static unsigned char _midiDataByte2; 00010 00011 // Prototype 00012 static void receiveDataByte( unsigned char byteStream ); 00013 static void generateMidiCmd(void); 00014 00015 void Fmdriver_init( void ) 00016 { 00017 _midiCmdCounter = 0; 00018 _midiStatus = 0; 00019 _midiDataByte1 = 0; 00020 _midiDataByte2 = 0; 00021 00022 Part_init(&_part); 00023 Part_pc(&_part,0); 00024 } 00025 void Fmdriver_sendMidi( unsigned char byteStream ) 00026 { 00027 if ( byteStream & 0x80 ){ 00028 if ( byteStream == 0xf7 ){ 00029 Tone_sendTone(); 00030 _midiStatus = 0; 00031 _midiCmdCounter = 0; 00032 } 00033 else { 00034 _midiStatus = byteStream; 00035 _midiCmdCounter = 1; 00036 } 00037 } 00038 else if ( _midiStatus == 0xf0 ){ 00039 Tone_setToneExc(byteStream,_midiCmdCounter); 00040 _midiCmdCounter += 1; 00041 } 00042 else if ( _midiStatus != 0 ){ 00043 receiveDataByte(byteStream); 00044 } 00045 } 00046 static void receiveDataByte( unsigned char byteStream ) 00047 { 00048 switch (_midiCmdCounter){ 00049 case 0: case 1:{ 00050 _midiDataByte1 = byteStream; 00051 switch ( _midiStatus & 0xf0 ){ 00052 case 0xc0: case 0xd0:{ 00053 _midiCmdCounter = 0; 00054 generateMidiCmd(); 00055 break; 00056 } 00057 default:{ 00058 _midiCmdCounter = 2; 00059 break; 00060 } 00061 } 00062 break; 00063 } 00064 case 2:{ 00065 _midiDataByte2 = byteStream; 00066 _midiCmdCounter = 0; 00067 generateMidiCmd(); 00068 break; 00069 } 00070 default: break; 00071 } 00072 } 00073 static void generateMidiCmd( void ) 00074 { 00075 switch ( _midiStatus ){ // receive only MIDI ch.1 00076 case 0x80: Part_note( &_part, _midiDataByte1, 0 ); break; 00077 case 0x90: Part_note( &_part, _midiDataByte1, _midiDataByte2 ); break; 00078 case 0xb0: Part_cc( &_part, _midiDataByte1, _midiDataByte2 ); break; 00079 case 0xc0: Part_pc( &_part, _midiDataByte1 ); break; 00080 case 0xe0: Part_pbend( &_part, _midiDataByte1, _midiDataByte2 ); break; 00081 default: break; 00082 } 00083 } 00084
Generated on Wed Jul 13 2022 08:46:10 by
1.7.2