fix deep copy bugs for esp_hid component

Closes https://github.com/espressif/esp-idf/issues/6217
Closes https://github.com/espressif/esp-idf/issues/7169
This commit is contained in:
liqigan
2021-09-07 16:49:49 +08:00
parent 1e0219f16f
commit 9049974d6b
7 changed files with 195 additions and 54 deletions

View File

@@ -119,3 +119,29 @@ esp_err_t esp_hidd_dev_event_handler_unregister(esp_hidd_dev_t *dev, esp_event_h
}
return dev->event_handler_unregister(dev->dev, callback, event);
}
/**
* The deep copy data append the end of the esp_hidd_event_data_t, move the data pointer to the correct address. This is
* a workaround way, it's better to use flexiable array in the interface.
*/
void esp_hidd_process_event_data_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id,
void *event_data)
{
esp_hidd_event_t event = (esp_hidd_event_t)event_id;
esp_hidd_event_data_t *param = (esp_hidd_event_data_t *)event_data;
switch (event) {
case ESP_HIDD_OUTPUT_EVENT:
if (param->output.length && param->output.data) {
param->output.data = (uint8_t *)param + sizeof(esp_hidd_event_data_t);
}
break;
case ESP_HIDD_FEATURE_EVENT:
if (param->feature.length && param->feature.data) {
param->feature.data = (uint8_t *)param + sizeof(esp_hidd_event_data_t);
}
break;
default:
break;
}
}