17#include <esp_gatt_common_api.h>
27static prepare_type_env_t MIDI_prepare_write_env;
28const static size_t PREPARE_BUF_MAX_SIZE = ESP_GATT_MAX_MTU_SIZE;
35 esp_ble_gatts_cb_param_t *param) {
36 if (param->write.need_rsp)
40 if (param->write.is_prep) {
41 esp_gatt_status_t status = ESP_GATT_OK;
43 if (MIDI_prepare_write_env.prepare_buf == NULL) {
44 MIDI_prepare_write_env.prepare_buf =
45 (uint8_t *)malloc(PREPARE_BUF_MAX_SIZE *
sizeof(uint8_t));
46 MIDI_prepare_write_env.prepare_len = 0;
47 if (MIDI_prepare_write_env.prepare_buf == NULL) {
48 ESP_LOGE(
"MIDIBLE",
"Gatt_server prep no mem\n");
49 status = ESP_GATT_NO_RESOURCES;
53 if (param->write.offset > PREPARE_BUF_MAX_SIZE) {
54 status = ESP_GATT_INVALID_OFFSET;
56 if ((param->write.offset + param->write.len) > PREPARE_BUF_MAX_SIZE) {
57 status = ESP_GATT_INVALID_ATTR_LEN;
62 if (status != ESP_GATT_OK) {
68 memcpy(MIDI_prepare_write_env.prepare_buf + param->write.offset,
69 param->write.value, param->write.len);
70 MIDI_prepare_write_env.prepare_len += param->write.len;
74 midi_callback(param->write.value, param->write.len);
80 esp_ble_gatts_cb_param_t *param) {
81 if (param->exec_write.exec_write_flag == ESP_GATT_PREP_WRITE_CANCEL) {
82 ESP_LOGI(
"MIDIBLE",
"ESP_GATT_PREP_WRITE_CANCEL");
85 if (midi_callback && MIDI_prepare_write_env.prepare_buf &&
86 MIDI_prepare_write_env.prepare_len)
87 midi_callback(MIDI_prepare_write_env.prepare_buf,
88 MIDI_prepare_write_env.prepare_len);
93 if (MIDI_prepare_write_env.prepare_buf) {
94 free(MIDI_prepare_write_env.prepare_buf);
95 MIDI_prepare_write_env.prepare_buf = NULL;
97 MIDI_prepare_write_env.prepare_len = 0;
99 esp_ble_gatts_send_response(gatts_if, param->exec_write.conn_id,
100 param->exec_write.trans_id, ESP_GATT_OK, NULL);
Declarations of internal functions for the MIDI over BLE system, used in the midi-*....
void midi_handle_write_event(esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param)
void midi_handle_write_exec_event(esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param)
void midi_set_write_callback(midi_write_callback_t cb)
Set the callback that is to be called when the client writes (sends) a MIDI packet.
void(* midi_write_callback_t)(const uint8_t *, size_t)
Type for the BLE MIDI write callback.