Compare commits
9 Commits
27951754ed
...
2af1a59480
| Author | SHA1 | Date | |
|---|---|---|---|
| 2af1a59480 | |||
| 7f11642b10 | |||
| 6734142f03 | |||
| e5b55e420d | |||
| c3295f047b | |||
| 30b6c220f9 | |||
| 15d9064e69 | |||
| 85d7d9f1e1 | |||
| 2ab4f9a595 |
@ -63,6 +63,7 @@ target_link_libraries( host_cdc_msc_hid PUBLIC
|
|||||||
hardware_spi
|
hardware_spi
|
||||||
hardware_sync
|
hardware_sync
|
||||||
pico_aon_timer
|
pico_aon_timer
|
||||||
|
pico_multicore
|
||||||
pico_stdlib
|
pico_stdlib
|
||||||
${HWDEP_LIBS}
|
${HWDEP_LIBS}
|
||||||
)
|
)
|
||||||
@ -75,3 +76,5 @@ add_custom_target(Flash
|
|||||||
DEPENDS host_cdc_msc_hid
|
DEPENDS host_cdc_msc_hid
|
||||||
COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/host_cdc_msc_hid.uf2
|
COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/host_cdc_msc_hid.uf2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_definitions(-DPICO_STDIO_ENABLE_CRLF_SUPPORT=0)
|
||||||
|
|||||||
288
hid_app.c
288
hid_app.c
@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "bsp/board_api.h"
|
#include "bsp/board_api.h"
|
||||||
|
#include "hid_app.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -43,11 +44,107 @@ static struct
|
|||||||
{
|
{
|
||||||
uint8_t report_count;
|
uint8_t report_count;
|
||||||
tuh_hid_report_info_t report_info[MAX_REPORT];
|
tuh_hid_report_info_t report_info[MAX_REPORT];
|
||||||
|
uint16_t vid, pid;
|
||||||
}hid_info[CFG_TUH_HID];
|
}hid_info[CFG_TUH_HID];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void process_kbd_report(hid_keyboard_report_t const *report);
|
static void process_kbd_report(hid_keyboard_report_t const *report);
|
||||||
static void process_mouse_report(hid_mouse_report_t const * report);
|
static void process_mouse_report(hid_mouse_report_t const * report);
|
||||||
static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
||||||
|
struct gamepad_data_t process_8bitpro_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
||||||
|
struct gamepad_data_t process_SonyDualShock4_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
||||||
|
struct gamepad_data_t process_BDA_NSW_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
||||||
|
void affiche_gamepad_data(struct gamepad_data_t _gamepad_report);
|
||||||
|
void refresh_gamepad_data(struct gamepad_data_t * gamepad_data);
|
||||||
|
|
||||||
|
// HID report from 8bitPro
|
||||||
|
|
||||||
|
typedef struct TU_ATTR_PACKED
|
||||||
|
{
|
||||||
|
uint8_t report_id;
|
||||||
|
uint b1:1; // Bouton A
|
||||||
|
uint b2:1; // Bouton B
|
||||||
|
uint b3:1; // 4 : ???
|
||||||
|
uint b4:1; // Bouton X
|
||||||
|
uint b5:1; // Bouton Y
|
||||||
|
uint b6:1; // 32 : ???
|
||||||
|
uint b7:1; // Bouton L
|
||||||
|
uint b8:1; // Bouton R
|
||||||
|
uint b9:1; // Bouton L2
|
||||||
|
uint b10:1; // Bouton R2
|
||||||
|
uint b11:1; // Start
|
||||||
|
uint b12:1; // Select
|
||||||
|
uint b13:1;
|
||||||
|
uint b14:1; // Click joystick gauche
|
||||||
|
uint b15:1; // Click joystick droit
|
||||||
|
uint b16:1; // 16 bits
|
||||||
|
uint8_t hat_switch; // OK
|
||||||
|
uint8_t x, y; // joystick Xg, Yg
|
||||||
|
uint8_t z, rz; // joystick Xd, Yd
|
||||||
|
|
||||||
|
uint8_t gachette_gauche; // ok
|
||||||
|
uint8_t gachette_droite; // ok
|
||||||
|
|
||||||
|
|
||||||
|
} _8bitpro_report_t ;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct TU_ATTR_PACKED
|
||||||
|
{
|
||||||
|
uint8_t report_id;
|
||||||
|
uint8_t x, y, z, rz; // joystick
|
||||||
|
uint hat_switch:4;
|
||||||
|
uint b1:1;
|
||||||
|
uint b2:1;
|
||||||
|
uint b3:1;
|
||||||
|
uint b4:1;
|
||||||
|
|
||||||
|
// 8 bits
|
||||||
|
uint b5:1;
|
||||||
|
uint b6:1;
|
||||||
|
uint b7:1;
|
||||||
|
uint b8:1;
|
||||||
|
uint b9:1;
|
||||||
|
uint b10:1;
|
||||||
|
uint b11:1;
|
||||||
|
uint b12:1; // 16 bits
|
||||||
|
|
||||||
|
uint data_1:8;
|
||||||
|
|
||||||
|
uint gachette_gauche:8;
|
||||||
|
uint gachette_droite:8;
|
||||||
|
|
||||||
|
|
||||||
|
} SonyDualShock4_report_t ;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct TU_ATTR_PACKED
|
||||||
|
{
|
||||||
|
uint b1:1; // Bouton Y
|
||||||
|
uint b2:1; // Bouton B
|
||||||
|
uint b3:1; // Bouton A
|
||||||
|
uint b4:1; // Bouton X
|
||||||
|
uint b5:1; // Bouton L
|
||||||
|
uint b6:1; // Bouton R
|
||||||
|
uint b7:1; // Bouton L2
|
||||||
|
uint b8:1; // Bouton R2
|
||||||
|
uint b9:1; // Bouton -
|
||||||
|
uint b10:1; // Bouton +
|
||||||
|
uint b11:1; // Bouton joystick droit
|
||||||
|
uint b12:1; // Bouton joystick gauche
|
||||||
|
uint b13:1; // Bouton Start
|
||||||
|
uint b14:1; // Bouton Select
|
||||||
|
uint b15:1; // --
|
||||||
|
uint b16:1; // --
|
||||||
|
uint8_t hat_switch; // OK
|
||||||
|
uint8_t x, y; // joystick Xg, Yg
|
||||||
|
uint8_t z, rz; // joystick Xd, Yd
|
||||||
|
|
||||||
|
} BDA_NSW_report_t ;
|
||||||
|
|
||||||
|
struct gamepad_data_t gamepad_data;
|
||||||
|
|
||||||
|
|
||||||
void hid_app_task(void)
|
void hid_app_task(void)
|
||||||
{
|
{
|
||||||
@ -67,6 +164,7 @@ void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_re
|
|||||||
{
|
{
|
||||||
printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance);
|
printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance);
|
||||||
|
|
||||||
|
|
||||||
// Interface protocol (hid_interface_protocol_enum_t)
|
// Interface protocol (hid_interface_protocol_enum_t)
|
||||||
const char* protocol_str[] = { "None", "Keyboard", "Mouse" };
|
const char* protocol_str[] = { "None", "Keyboard", "Mouse" };
|
||||||
uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance);
|
uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance);
|
||||||
@ -77,8 +175,26 @@ void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_re
|
|||||||
// Therefore for this simple example, we only need to parse generic report descriptor (with built-in parser)
|
// Therefore for this simple example, we only need to parse generic report descriptor (with built-in parser)
|
||||||
if ( itf_protocol == HID_ITF_PROTOCOL_NONE )
|
if ( itf_protocol == HID_ITF_PROTOCOL_NONE )
|
||||||
{
|
{
|
||||||
|
uint16_t vid, pid;
|
||||||
|
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||||||
|
printf("VID = %04x, PID = %04x\r\n", vid, pid);
|
||||||
|
hid_info[instance].vid = vid;
|
||||||
|
hid_info[instance].pid = pid;
|
||||||
|
|
||||||
|
|
||||||
hid_info[instance].report_count = tuh_hid_parse_report_descriptor(hid_info[instance].report_info, MAX_REPORT, desc_report, desc_len);
|
hid_info[instance].report_count = tuh_hid_parse_report_descriptor(hid_info[instance].report_info, MAX_REPORT, desc_report, desc_len);
|
||||||
printf("HID has %u reports \r\n", hid_info[instance].report_count);
|
printf("HID has %u reports \r\n", hid_info[instance].report_count);
|
||||||
|
|
||||||
|
for(int i=0; i< hid_info[instance].report_count; i++){
|
||||||
|
if(hid_info[instance].report_info->usage == 5 &&
|
||||||
|
hid_info[instance].report_info->usage_page == 1){
|
||||||
|
printf("Found Gamepad descriptor\n");
|
||||||
|
//create_gamepad_configuration(dev_addr, instance, desc_report, desc_len);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// request to receive report
|
// request to receive report
|
||||||
@ -114,7 +230,16 @@ void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t cons
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
// Generic report requires matching ReportID and contents with previous parsed report info
|
// Generic report requires matching ReportID and contents with previous parsed report info
|
||||||
process_generic_report(dev_addr, instance, report, len);
|
// Report - 2dc8:6002 8BitDo 8BitDo SN30 Pro+
|
||||||
|
if(hid_info[instance].vid == 0x2dc8 && hid_info[instance].pid == 0x6002){
|
||||||
|
gamepad_data = process_8bitpro_report(dev_addr, instance, report, len);
|
||||||
|
}else if(hid_info[instance].vid == 0x054c && hid_info[instance].pid == 0x05c4){
|
||||||
|
gamepad_data = process_SonyDualShock4_report(dev_addr, instance, report, len);
|
||||||
|
}else if(hid_info[instance].vid == 0x20d6 && hid_info[instance].pid == 0xa713){
|
||||||
|
gamepad_data = process_BDA_NSW_report(dev_addr, instance, report, len);
|
||||||
|
}else{
|
||||||
|
process_generic_report(dev_addr, instance, report, len);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,6 +354,113 @@ static void process_mouse_report(hid_mouse_report_t const * report)
|
|||||||
cursor_movement(report->x, report->y, report->wheel);
|
cursor_movement(report->x, report->y, report->wheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Report - 2dc8:6002 8BitDo 8BitDo SN30 Pro+
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
struct gamepad_data_t process_8bitpro_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len){
|
||||||
|
struct gamepad_data_t gamepad_data;
|
||||||
|
_8bitpro_report_t gamepad_report;
|
||||||
|
memcpy(&gamepad_report, report, sizeof(gamepad_report));
|
||||||
|
refresh_gamepad_data(&gamepad_data);
|
||||||
|
|
||||||
|
// Copie des données du rapport vers la structure standard
|
||||||
|
gamepad_data.joystick_x_gauche = gamepad_report.x;
|
||||||
|
gamepad_data.joystick_y_gauche = gamepad_report.y;
|
||||||
|
gamepad_data.joystick_x_droit = gamepad_report.z;
|
||||||
|
gamepad_data.joystick_y_droit = gamepad_report.rz;
|
||||||
|
gamepad_data.bouton_A = gamepad_report.b1;
|
||||||
|
gamepad_data.bouton_B = gamepad_report.b2;
|
||||||
|
gamepad_data.bouton_X = gamepad_report.b4;
|
||||||
|
gamepad_data.bouton_Y = gamepad_report.b5;
|
||||||
|
gamepad_data.bouton_L = gamepad_report.b7;
|
||||||
|
gamepad_data.bouton_R = gamepad_report.b8;
|
||||||
|
gamepad_data.bouton_L2 = gamepad_report.b9;
|
||||||
|
gamepad_data.bouton_R2 = gamepad_report.b10;
|
||||||
|
gamepad_data.bouton_Start = gamepad_report.b11;
|
||||||
|
gamepad_data.bouton_Select = gamepad_report.b12;
|
||||||
|
gamepad_data.bouton_joystick_gauche = gamepad_report.b15;
|
||||||
|
gamepad_data.bouton_joystick_droit = gamepad_report.b14;
|
||||||
|
gamepad_data.dpad = gamepad_report.hat_switch;
|
||||||
|
gamepad_data.gachette_droite = gamepad_report.gachette_droite;
|
||||||
|
gamepad_data.gachette_gauche = gamepad_report.gachette_gauche;
|
||||||
|
|
||||||
|
affiche_gamepad_data(gamepad_data);
|
||||||
|
return gamepad_data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// 054c:05c4 Sony Corp. DualShock 4 [CUH-ZCT1x]
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
struct gamepad_data_t process_SonyDualShock4_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len){
|
||||||
|
struct gamepad_data_t gamepad_data;
|
||||||
|
SonyDualShock4_report_t gamepad_report;
|
||||||
|
memcpy(&gamepad_report, report, sizeof(gamepad_report));
|
||||||
|
refresh_gamepad_data(&gamepad_data);
|
||||||
|
|
||||||
|
// Copie des données du rapport vers la structure standard
|
||||||
|
gamepad_data.joystick_x_gauche = gamepad_report.x;
|
||||||
|
gamepad_data.joystick_y_gauche = gamepad_report.y;
|
||||||
|
gamepad_data.joystick_x_droit = gamepad_report.z;
|
||||||
|
gamepad_data.joystick_y_droit = gamepad_report.rz;
|
||||||
|
gamepad_data.bouton_Y = gamepad_report.b4;
|
||||||
|
gamepad_data.bouton_A = gamepad_report.b3;
|
||||||
|
gamepad_data.bouton_B = gamepad_report.b2;
|
||||||
|
gamepad_data.bouton_X = gamepad_report.b1;
|
||||||
|
gamepad_data.bouton_joystick_droit = gamepad_report.b11;
|
||||||
|
gamepad_data.bouton_joystick_gauche = gamepad_report.b12;
|
||||||
|
gamepad_data.bouton_Select = gamepad_report.b10;
|
||||||
|
gamepad_data.bouton_Start = gamepad_report.b9;
|
||||||
|
gamepad_data.bouton_R2 = gamepad_report.b8;
|
||||||
|
gamepad_data.bouton_L2 = gamepad_report.b7;
|
||||||
|
gamepad_data.bouton_R = gamepad_report.b6;
|
||||||
|
gamepad_data.bouton_L = gamepad_report.b5;
|
||||||
|
gamepad_data.dpad = gamepad_report.hat_switch;
|
||||||
|
gamepad_data.gachette_droite = gamepad_report.gachette_droite;
|
||||||
|
gamepad_data.gachette_gauche = gamepad_report.gachette_gauche;
|
||||||
|
|
||||||
|
affiche_gamepad_data(gamepad_data);
|
||||||
|
return gamepad_data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Report - 20d6:a713 BDA NSW wired controller
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
struct gamepad_data_t process_BDA_NSW_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len){
|
||||||
|
struct gamepad_data_t gamepad_data;
|
||||||
|
BDA_NSW_report_t gamepad_report;
|
||||||
|
memcpy(&gamepad_report, report, sizeof(gamepad_report));
|
||||||
|
refresh_gamepad_data(&gamepad_data);
|
||||||
|
|
||||||
|
// Copie des données du rapport vers la structure standard
|
||||||
|
gamepad_data.joystick_x_gauche = gamepad_report.x;
|
||||||
|
gamepad_data.joystick_y_gauche = gamepad_report.y;
|
||||||
|
gamepad_data.joystick_x_droit = gamepad_report.z;
|
||||||
|
gamepad_data.joystick_y_droit = gamepad_report.rz;
|
||||||
|
gamepad_data.bouton_Y = gamepad_report.b1;
|
||||||
|
gamepad_data.bouton_B = gamepad_report.b2;
|
||||||
|
gamepad_data.bouton_A = gamepad_report.b3;
|
||||||
|
gamepad_data.bouton_X = gamepad_report.b4;
|
||||||
|
gamepad_data.bouton_L = gamepad_report.b5;
|
||||||
|
gamepad_data.bouton_R = gamepad_report.b6;
|
||||||
|
gamepad_data.bouton_L2 = gamepad_report.b7;
|
||||||
|
gamepad_data.bouton_R2 = gamepad_report.b8;
|
||||||
|
|
||||||
|
|
||||||
|
gamepad_data.bouton_joystick_gauche = gamepad_report.b12;
|
||||||
|
gamepad_data.bouton_joystick_droit = gamepad_report.b11;
|
||||||
|
|
||||||
|
gamepad_data.bouton_Start = gamepad_report.b13;
|
||||||
|
gamepad_data.bouton_Select = gamepad_report.b14;
|
||||||
|
|
||||||
|
gamepad_data.dpad = gamepad_report.hat_switch;
|
||||||
|
|
||||||
|
affiche_gamepad_data(gamepad_data);
|
||||||
|
return gamepad_data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Generic Report
|
// Generic Report
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -240,6 +472,14 @@ static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t c
|
|||||||
tuh_hid_report_info_t* rpt_info_arr = hid_info[instance].report_info;
|
tuh_hid_report_info_t* rpt_info_arr = hid_info[instance].report_info;
|
||||||
tuh_hid_report_info_t* rpt_info = NULL;
|
tuh_hid_report_info_t* rpt_info = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
//printf("HID Report brut\n");
|
||||||
|
printf(">a:1\n");
|
||||||
|
for(int i=0; i< len; i++){
|
||||||
|
printf("0x%X ", report[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
if ( rpt_count == 1 && rpt_info_arr[0].report_id == 0)
|
if ( rpt_count == 1 && rpt_info_arr[0].report_id == 0)
|
||||||
{
|
{
|
||||||
// Simple report without report ID as 1st byte
|
// Simple report without report ID as 1st byte
|
||||||
@ -292,7 +532,53 @@ static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t c
|
|||||||
process_mouse_report( (hid_mouse_report_t const*) report );
|
process_mouse_report( (hid_mouse_report_t const*) report );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HID_USAGE_DESKTOP_GAMEPAD:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process_gamepad_report(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void affiche_gamepad_data(struct gamepad_data_t _gamepad_report){
|
||||||
|
printf(">jxd:%d\n", _gamepad_report.joystick_x_gauche);
|
||||||
|
printf(">jyd:%d\n", _gamepad_report.joystick_y_gauche);
|
||||||
|
printf(">jxg:%d\n", _gamepad_report.joystick_x_droit);
|
||||||
|
printf(">jyg:%d\n", _gamepad_report.joystick_y_droit);
|
||||||
|
printf(">hat:%d\n", _gamepad_report.dpad);
|
||||||
|
|
||||||
|
printf(">ba:%d\n", _gamepad_report.bouton_A);
|
||||||
|
printf(">bb:%d\n", _gamepad_report.bouton_B);
|
||||||
|
printf(">bx:%d\n", _gamepad_report.bouton_X);
|
||||||
|
printf(">by:%d\n", _gamepad_report.bouton_Y);
|
||||||
|
printf(">bstart:%d\n", _gamepad_report.bouton_Start);
|
||||||
|
printf(">bselect:%d\n", _gamepad_report.bouton_Select);
|
||||||
|
printf(">bl:%d\n", _gamepad_report.bouton_L);
|
||||||
|
printf(">br:%d\n", _gamepad_report.bouton_R);
|
||||||
|
printf(">bl2:%d\n", _gamepad_report.bouton_L2);
|
||||||
|
printf(">br2:%d\n", _gamepad_report.bouton_R2);
|
||||||
|
printf(">bjg:%d\n", _gamepad_report.bouton_joystick_droit);
|
||||||
|
printf(">bjd:%d\n", _gamepad_report.bouton_joystick_gauche);
|
||||||
|
|
||||||
|
//printf(">data1:%d\n", _gamepad_report.data_1);
|
||||||
|
|
||||||
|
printf(">gd:%d\n", _gamepad_report.gachette_droite);
|
||||||
|
printf(">gg:%d\n", _gamepad_report.gachette_gauche);
|
||||||
|
}
|
||||||
|
|
||||||
|
void refresh_gamepad_data(struct gamepad_data_t * gamepad_data){
|
||||||
|
gamepad_data->temps_ms = (uint32_t) get_absolute_time() / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool gamepad_connecte(){
|
||||||
|
return ((get_absolute_time() / 1000) - gamepad_data.temps_ms < 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct gamepad_data_t get_gamepad_data(){
|
||||||
|
return gamepad_data;
|
||||||
|
}
|
||||||
29
hid_app.h
Normal file
29
hid_app.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
struct gamepad_data_t{
|
||||||
|
uint32_t temps_ms;
|
||||||
|
|
||||||
|
uint8_t joystick_x_gauche;
|
||||||
|
uint8_t joystick_y_gauche;
|
||||||
|
uint8_t joystick_x_droit;
|
||||||
|
uint8_t joystick_y_droit;
|
||||||
|
uint8_t gachette_gauche;
|
||||||
|
uint8_t gachette_droite;
|
||||||
|
uint8_t dpad;
|
||||||
|
bool bouton_A;
|
||||||
|
bool bouton_B;
|
||||||
|
bool bouton_X;
|
||||||
|
bool bouton_Y;
|
||||||
|
bool bouton_Start;
|
||||||
|
bool bouton_Select;
|
||||||
|
bool bouton_L;
|
||||||
|
bool bouton_L2;
|
||||||
|
bool bouton_R;
|
||||||
|
bool bouton_R2;
|
||||||
|
bool bouton_joystick_gauche;
|
||||||
|
bool bouton_joystick_droit;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool gamepad_connecte();
|
||||||
|
struct gamepad_data_t get_gamepad_data();
|
||||||
37
main.c
37
main.c
@ -28,7 +28,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "bsp/board_api.h"
|
#include "bsp/board_api.h"
|
||||||
|
#include "hid_app.h"
|
||||||
#include "lib/sd_driver/sd_card.h"
|
#include "lib/sd_driver/sd_card.h"
|
||||||
|
#include "pico/multicore.h"
|
||||||
#include "tusb.h"
|
#include "tusb.h"
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
#include "f_util.h"
|
#include "f_util.h"
|
||||||
@ -101,11 +103,28 @@ sd_card_t* sd_get_by_num(size_t num) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void usb_routine(){
|
||||||
|
while (1) {
|
||||||
|
// tinyusb host task
|
||||||
|
tuh_task();
|
||||||
|
|
||||||
|
led_blinking_task();
|
||||||
|
cdc_app_task();
|
||||||
|
hid_app_task();
|
||||||
|
|
||||||
|
|
||||||
|
//log_to_sd(big_big_buffer);
|
||||||
|
//log_to_usb(big_big_buffer); // à commenter pour obtenir un test juste sur la carte SD.(ou simplement ne pas brancher de clé USB)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------- MAIN -------------*/
|
/*------------- MAIN -------------*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
board_init();
|
board_init();
|
||||||
|
gpio_set_function(12, UART_FUNCSEL_NUM(uart0, 12));
|
||||||
|
gpio_set_function(13, UART_FUNCSEL_NUM(uart0, 13));
|
||||||
printf("TinyUSB Host CDC MSC HID Example - test comparatif\r\n");
|
printf("TinyUSB Host CDC MSC HID Example - test comparatif\r\n");
|
||||||
|
|
||||||
// init host stack on configured roothub port
|
// init host stack on configured roothub port
|
||||||
@ -153,16 +172,24 @@ int main(void) {
|
|||||||
strcat(big_big_buffer, buffer);
|
strcat(big_big_buffer, buffer);
|
||||||
size += strlen(buffer);
|
size += strlen(buffer);
|
||||||
}
|
}
|
||||||
|
multicore_launch_core1(usb_routine);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// tinyusb host task
|
// tinyusb host task
|
||||||
tuh_task();
|
/*tuh_task();
|
||||||
|
|
||||||
led_blinking_task();
|
led_blinking_task();
|
||||||
cdc_app_task();
|
cdc_app_task();
|
||||||
hid_app_task();
|
hid_app_task();*/
|
||||||
log_to_sd(big_big_buffer);
|
if(gamepad_connecte()){
|
||||||
log_to_usb(big_big_buffer); // à commenter pour obtenir un test juste sur la carte SD.(ou simplement ne pas brancher de clé USB)
|
struct gamepad_data_t gamepad_data;
|
||||||
|
gamepad_data = get_gamepad_data();
|
||||||
|
printf(">joystique_xd:%d\n", gamepad_data.joystick_x_gauche);
|
||||||
|
}
|
||||||
|
printf(">gc:%d\n", gamepad_connecte());
|
||||||
|
sleep_ms(1);
|
||||||
|
//log_to_sd(big_big_buffer);
|
||||||
|
//log_to_usb(big_big_buffer); // à commenter pour obtenir un test juste sur la carte SD.(ou simplement ne pas brancher de clé USB)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,7 +99,7 @@
|
|||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
// Size of buffer to hold descriptors and other data used for enumeration
|
// Size of buffer to hold descriptors and other data used for enumeration
|
||||||
#define CFG_TUH_ENUMERATION_BUFSIZE 256
|
#define CFG_TUH_ENUMERATION_BUFSIZE 512
|
||||||
|
|
||||||
#define CFG_TUH_HUB 1 // number of supported hubs
|
#define CFG_TUH_HUB 1 // number of supported hubs
|
||||||
#define CFG_TUH_CDC 1 // CDC ACM
|
#define CFG_TUH_CDC 1 // CDC ACM
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user