#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 F7 / F0 55 54 41 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); }