This commit is contained in:
awalol
2026-03-15 13:35:45 +08:00
parent 51157ce997
commit 5251ae1f5b
4 changed files with 14 additions and 11 deletions
+2 -1
View File
@@ -88,7 +88,8 @@ target_link_libraries(ds5-bridge
hardware_interp hardware_interp
hardware_timer hardware_timer
pico_btstack_classic pico_btstack_classic
pico_cyw43_arch_threadsafe_background # pico_cyw43_arch_threadsafe_background
pico_cyw43_arch_poll
pico_btstack_cyw43 pico_btstack_cyw43
tinyusb_device tinyusb_device
tinyusb_board tinyusb_board
+3 -3
View File
@@ -443,16 +443,16 @@ void bt_write(uint8_t *data, uint16_t len) {
} }
} }
uint8_t *get_feature_data(uint8_t reportId, uint16_t len) { std::vector<uint8_t> get_feature_data(uint8_t reportId, uint16_t len) {
if (feature_data.find(reportId) == feature_data.end() || feature_data[reportId].empty()) { if (feature_data.find(reportId) == feature_data.end() || feature_data[reportId].empty()) {
if (hid_control_cid != 0) { if (hid_control_cid != 0) {
uint8_t get_feature[] = {0x43, reportId}; uint8_t get_feature[] = {0x43, reportId};
l2cap_send(hid_control_cid, get_feature, len); l2cap_send(hid_control_cid, get_feature, len);
printf("[L2CAP] Requesting Feature Report 0x%02X\n", reportId); printf("[L2CAP] Requesting Feature Report 0x%02X\n", reportId);
} }
return 0; return {};
} }
return feature_data[reportId].data(); return feature_data[reportId];
} }
void init_feature() { void init_feature() {
+3 -2
View File
@@ -5,7 +5,8 @@
#ifndef DS5_BRIDGE_BT_H #ifndef DS5_BRIDGE_BT_H
#define DS5_BRIDGE_BT_H #define DS5_BRIDGE_BT_H
#include <stdint.h> #include <cstdint>
#include <vector>
enum CHANNEL_TYPE { enum CHANNEL_TYPE {
INTERRUPT, INTERRUPT,
@@ -19,7 +20,7 @@ void bt_register_data_callback(bt_data_callback_t callback);
void bt_send_packet(uint8_t *data, uint16_t len); void bt_send_packet(uint8_t *data, uint16_t len);
void bt_send_control(uint8_t *data, uint16_t len); void bt_send_control(uint8_t *data, uint16_t len);
void bt_write(uint8_t* data,uint16_t len); void bt_write(uint8_t* data,uint16_t len);
uint8_t* get_feature_data(uint8_t reportId,uint16_t len); std::vector<uint8_t> get_feature_data(uint8_t reportId,uint16_t len);
void init_feature(); void init_feature();
#endif //DS5_BRIDGE_BT_H #endif //DS5_BRIDGE_BT_H
+6 -5
View File
@@ -7,9 +7,9 @@
#include "usb.h" #include "usb.h"
#include "bt.h" #include "bt.h"
#include "utils.h" #include "utils.h"
#include "pico/multicore.h"
#include "resample.h" #include "resample.h"
#include "audio.h" #include "audio.h"
#include "pico/cyw43_arch.h"
int reportSeqCounter = 0; int reportSeqCounter = 0;
uint8_t packetCounter = 0; uint8_t packetCounter = 0;
@@ -53,12 +53,12 @@ uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t
(void) buffer; (void) buffer;
(void) reqlen; (void) reqlen;
uint8_t *feature_data = get_feature_data(report_id, reqlen); std::vector<uint8_t> feature_data = get_feature_data(report_id, reqlen);
if (feature_data) { if (!feature_data.empty()) {
memcpy(buffer, feature_data, reqlen); memcpy(buffer, feature_data.data() + 1, feature_data.size() - 1);
} }
return feature_data ? reqlen : 0; return feature_data.empty() ? 0 : feature_data.size() - 1;
} }
// Invoked when received SET_REPORT control request or // Invoked when received SET_REPORT control request or
@@ -104,6 +104,7 @@ int main() {
audio_init(); audio_init();
while (1) { while (1) {
cyw43_arch_poll();
tud_task(); tud_task();
audio_loop(); audio_loop();
interrupt_loop(); interrupt_loop();