K1Guitar/midi/midi_send.c

70 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "includes.h"
// Note Off 0x8n
void SendNoteOffMidiEvent(uint8_t Key, uint8_t OffVal)
{
uint8_t midibuff[3] = {0x80 , Key , OffVal};
USART2_SendData(midibuff,sizeof(midibuff));
}
// Note On 0x9n
void SendNoteOnMidiEvent(uint8_t Key, uint8_t OnVal)
{
uint8_t midibuff[3] = {0x90 , Key , OnVal};
USART2_SendData(midibuff,sizeof(midibuff));
}
void SendProgramChangeMidiEvent(uint8_t channel,uint8_t CC)
{
uint8_t midibuff[2] = {0xC0|channel , CC };
SendMidiDataToDreamDSP(midibuff,2);
}
void SendVolumeChangeMidiEvent(uint8_t channel,uint8_t CC)
{
uint8_t midibuff[3] = {0xB0|channel ,0x07, CC };
SendMidiDataToDreamDSP(midibuff,3);
}
/* Bank Select:CC0(MSB)=bank,CC32(LSB)=0。Dream 双音色库:0=伴奏,1=主弦 */
void SendBankChangeMidiEvent(uint8_t channel, uint8_t bank)
{
uint8_t midibuff[3] = {0xB0|(channel & 0x0F) ,0x00, bank };
SendMidiDataToDreamDSP(midibuff,3);
midibuff[1] = 0x20; /* CC32 Bank LSB */
midibuff[2] = 0;
SendMidiDataToDreamDSP(midibuff,3);
}
/* 先选 Bank 再 Program Change,避免漏发 Bank Select 落到错误音色库 */
void SendProgramWithBankMidiEvent(uint8_t channel, uint8_t bank, uint8_t program)
{
SendBankChangeMidiEvent(channel, bank);
SendProgramChangeMidiEvent(channel, program);
}
void SendMidiDataToDreamDSP(uint8_t* buff, uint16_t cnt)
{
USART2_SendData(buff,cnt);
}
#define AT32_UID_BASE 0x1FFFF7E8UL
void BleBuildDeviceName(char *out)
{
static const char hex[] = "0123456789ABCDEF";
const uint32_t *uid = (const uint32_t *)AT32_UID_BASE;
uint32_t tail = uid[2] & 0x00FFFFFFu;
unsigned i;
out[0] = 'P';
out[1] = 'H';
out[2] = 'O';
out[3] = 'N';
out[4] = '_';
for (i = 0; i < 6; i++)
out[5 + i] = hex[(tail >> (4 * (5 - i))) & 0xFu];
out[BLE_DEVICE_NAME_LEN] = '\0';
}