Skip to content

Commit

Permalink
Update Gamecube.c
Browse files Browse the repository at this point in the history
  • Loading branch information
mizuyoukanao authored Jul 9, 2021
1 parent b008b87 commit 8154019
Showing 1 changed file with 21 additions and 27 deletions.
48 changes: 21 additions & 27 deletions src/Gamecube.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,46 +78,41 @@ bool gc_read(const uint8_t pin, Gamecube_Report_t* report, const bool rumble)
// Gamecube Console
//================================================================================

void gc_report_convert(Gamecube_Report_t* report, Gamecube_Different_Report_t* dif, uint8_t mode)
void gc_report_convert(Gamecube_Report_t* report, uint8_t mode)
{
memcpy(dif, report, sizeof(dif));
if (mode == 1)
{
dif->mode1.cxAxis = report->cxAxis >> 4;
dif->mode1.cyAxis = report->cyAxis >> 4;
dif->mode1.left = report->left;
dif->mode1.right = report->right;
dif->mode1.analogA = 0;
dif->mode1.analogB = 0;
report->mode1.cxAxis = report->cxAxis >> 4;
report->mode1.cyAxis = report->cyAxis >> 4;
report->mode1.left = report->left;
report->mode1.right = report->right;
report->mode1.analogA = 0;
report->mode1.analogB = 0;
}
else if (mode == 2)
{
dif->mode2.cxAxis = report->cxAxis >> 4;
dif->mode2.cyAxis = report->cyAxis >> 4;
dif->mode2.left = report->left >> 4;
dif->mode2.right = report->right >> 4;
dif->mode2.analogA = 0;
dif->mode2.analogB = 0;
report->mode2.cxAxis = report->cxAxis >> 4;
report->mode2.cyAxis = report->cyAxis >> 4;
report->mode2.left = report->left >> 4;
report->mode2.right = report->right >> 4;
report->mode2.analogA = 0;
report->mode2.analogB = 0;
}
else if (mode == 4)
{
dif->mode4.cxAxis = report->cxAxis;
dif->mode4.cyAxis = report->cyAxis;
dif->mode4.analogA = 0;
dif->mode4.analogB = 0;
report->mode4.analogA = 0;
report->mode4.analogB = 0;
}
else if (mode == 3)
{
return;
}
else
{
dif->mode0.cxAxis = report->cxAxis;
dif->mode0.cyAxis = report->cyAxis;
dif->mode0.left = report->left >> 4;
dif->mode0.right = report->right >> 4;
dif->mode0.analogA = 0;
dif->mode0.analogB = 0;
report->mode0.left = report->left >> 4;
report->mode0.right = report->right >> 4;
report->mode0.analogA = 0;
report->mode0.analogB = 0;
}
}

Expand Down Expand Up @@ -157,9 +152,8 @@ uint8_t gc_write(const uint8_t pin, Gamecube_Status_t* status, Gamecube_Origin_t
// Get data. Do not check last byte (command[2]), as the flags are unknown
else if (receivedBytes == 3 && command[0] == 0x40 && command[1] <= 0x07)
{
Gamecube_Different_Report_t dif;
gc_report_convert(report, &dif, command[1]);
gc_n64_send(dif.raw8, sizeof(Gamecube_Different_Report_t), modePort, outPort, bitMask);
gc_report_convert(report, command[1]);
gc_n64_send(report->raw8, sizeof(Gamecube_Report_t), modePort, outPort, bitMask);
ret = 3;
// The first byte probably flags a gamecube reading (0x40), as the same
// protocol is also used for N64. The lower nibble seems to be the mode:
Expand Down

0 comments on commit 8154019

Please sign in to comment.