我正在使用真正的 C 语言进行新开发。我有更多使用 Arduino 的经验。当我按下我的 Nordic nRF52 DK 的一个按钮时,我试图通过蓝牙 MIDI 发送 MIDI 消息。但我没有成功。我怎样才能做到这一点?
我尝试使用本教程:https ://www.novelbits.io/bluetooth-gatt-services-characteristics/ 一切正常,我能够创建一个可发现的 BLE MIDI 设备。但是我一直在设置一种发送实际 MIDI 消息的方法。我已经简单地使用按钮打开/关闭 DK LED 进行了测试,这里一切都很好
我想我应该以某种方式在这里配置一些东西(midi_service.c):
**@brief Function for handling the Write event.
*
* @param[in] p_midi_service LED Button Service structure.
* @param[in] p_ble_evt Event received from the BLE stack.
*/
static void on_write(ble_midi_service_t * p_midi_service, ble_evt_t const * p_ble_evt)
{
ble_gatts_evt_write_t * p_evt_write = (ble_gatts_evt_write_t *) &p_ble_evt->evt.gatts_evt.params.write;
if ((p_evt_write->handle == p_midi_service->data_io_char_handles.value_handle) &&
(p_evt_write->len == 1) &&
(p_midi_service->evt_handler != NULL))
{
// Handle what happens on a write event to the characteristic value
}
// Check if the Custom value CCCD is written to and that the value is the appropriate length, i.e 2 bytes.
if ((p_evt_write->handle == p_midi_service->data_io_char_handles.cccd_handle)
&& (p_evt_write->len == 2)
)
{
// CCCD written, call application event handler
if (p_midi_service->evt_handler != NULL)
{
ble_midi_evt_t evt;
if (ble_srv_is_notification_enabled(p_evt_write->data))
{
evt.evt_type = BLE_DATA_IO_EVT_NOTIFICATION_ENABLED;
}
else
{
evt.evt_type = BLE_DATA_IO_EVT_NOTIFICATION_DISABLED;
}
p_midi_service->evt_handler(p_midi_service, &evt);
}
}
}
然后在这里找到一种在我的主代码上调用它的方法:
case BSP_EVENT_KEY_3:
LEDS_ON(1 << LED_4);
//MIDI message
case BSP_EVENT_KEY_2:
LEDS_OFF(1 << LED_4);
//MIDI message
例如,如果我尝试:
case BSP_EVENT_KEY_3:
LEDS_ON(1 << LED_4);
ble_add_char_params_t (0x80, 0x80, 0x90, 0x3c, 127);
(这里的想法是发送一条注释消息)我在编译时收到错误“预期标识符或'('在数字常量之前”。可能这是一个非常愚蠢的方法,但正如我所说,我是这个的新手类型的编码,所以不太确定怎么做。使用 Arduino 我可以做到,但我想学习如何更“认真”地编码。