K1Guitar/midi/midi_send.c

88 lines
2.2 KiB
C
Raw Normal View History

#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);
}
void SendBankChangeMidiEvent(uint8_t CC)
{
uint8_t midibuff[3] = {0xB0 ,0x00, CC };
SendMidiDataToDreamDSP(midibuff,3);
}
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';
}
/*
* Dream BT rename SysEx reconstructed from factory tool
* /.../bluetooth_set/set_bl_name.exe
* prefixes: f0554c45 (BLE), f0555441 (BT Audio)
* Format: F0 55 4C 45 <ascii name> F7 / F0 55 54 41 <ascii name> F7
* Needs hardware confirmation after first flash.
*/
static void dream_send_name_sysex(uint8_t b1, uint8_t b2, uint8_t b3, const char *name)
{
uint8_t msg[4 + BLE_DEVICE_NAME_LEN + 1];
uint8_t n = BLE_DEVICE_NAME_LEN;
msg[0] = 0xF0;
msg[1] = b1;
msg[2] = b2;
msg[3] = b3;
memcpy(&msg[4], name, n);
msg[4 + n] = 0xF7;
SendMidiDataToDreamDSP(msg, (uint16_t)(5 + n));
}
void Dream_ApplyUniqueBtNames(void)
{
char name[BLE_DEVICE_NAME_LEN + 1];
BleBuildDeviceName(name);
dream_send_name_sysex(0x55, 0x4C, 0x45, name); /* BLE */
dream_send_name_sysex(0x55, 0x54, 0x41, name); /* BT Audio */
LOG_I("BT", "dream name set %s", name);
}