0

我正在使用真正的 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 我可以做到,但我想学习如何更“认真”地编码。

4

0 回答 0