Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minor changes to pademu #228

Merged
merged 2 commits into from
Oct 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion modules/ds34bt/iop/ds34bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1158,7 +1158,7 @@ static void l2cap_event_cb(int resultCode, int bytes, void *arg)
}
}

UsbBulkTransfer(bt_dev.inEndp, l2cap_buf, MAX_BUFFER_SIZE, l2cap_event_cb, arg);
UsbBulkTransfer(bt_dev.inEndp, l2cap_buf, MAX_BUFFER_SIZE + 23, l2cap_event_cb, arg);
SignalSema(bt_dev.hid_sema);
}

Expand Down
23 changes: 14 additions & 9 deletions modules/ds34usb/iop/ds34usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ static u8 link_key[] = //for ds4 authorisation
0xC0, 0x7F, 0x12, 0xAA, 0xD9, 0x66, 0x3C, 0xCE
};

static u8 usb_buf[MAX_BUFFER_SIZE + 20] __attribute((aligned(4))) = {0};
static u8 usb_buf[MAX_BUFFER_SIZE + 32] __attribute((aligned(4))) = {0};

int usb_probe(int devId);
int usb_connect(int devId);
Expand Down Expand Up @@ -239,14 +239,15 @@ static void usb_config_set(int result, int count, void *arg)
DelayThread(10000);
led[0] = led_patterns[pad][1];
led[3] = 0;
} else if(ds34pad[pad].type == DS4) {
} else if (ds34pad[pad].type == DS4) {
led[0] = rgbled_patterns[pad][1][0];
led[1] = rgbled_patterns[pad][1][1];
led[2] = rgbled_patterns[pad][1][2];
led[3] = 0;
}

LEDRumble(led, 0, 0, pad);
DelayThread(20000);

ds34pad[pad].status |= DS34USB_STATE_RUNNING;

Expand Down Expand Up @@ -408,8 +409,7 @@ static int LEDRumble(u8 *led, u8 lrum, u8 rrum, int pad)

usb_buf[9] = led[0] & 0x7F; //LED Conf

if (led[3]) //means charging, so blink
{
if (led[3]) { //means charging, so blink
usb_buf[13] = 0x32;
usb_buf[18] = 0x32;
usb_buf[23] = 0x32;
Expand All @@ -428,8 +428,7 @@ static int LEDRumble(u8 *led, u8 lrum, u8 rrum, int pad)
usb_buf[7] = led[1]; //g
usb_buf[8] = led[2]; //b

if (led[3]) //means charging, so blink
{
if (led[3]) { //means charging, so blink
usb_buf[9] = 0x80; // Time to flash bright (255 = 2.5 seconds)
usb_buf[10] = 0x80; // Time to flash dark (255 = 2.5 seconds)
}
Expand Down Expand Up @@ -502,7 +501,7 @@ void ds34usb_set_rumble(u8 lrum, u8 rrum, int port)
{
if (port >= MAX_PADS)
return;

Rumble(lrum, rrum, port);
}

Expand Down Expand Up @@ -566,8 +565,11 @@ int ds34usb_get_bdaddr(u8 *data, int port)

for (i = 0; i < 6; i++)
data[5 - i] = usb_buf[2 + i];

ret = 1;
} else {
DPRINTF("DS34USB: ds3usb_get_bdaddr usb transfer error %d\n", ret);
ret = 0;
}
} else {
ret = UsbControlTransfer(ds34pad[port].controlEndp, REQ_USB_IN, USB_REQ_GET_REPORT, (HID_USB_GET_REPORT_FEATURE << 8) | 0x12, 0, 16, usb_buf, usb_cmd_cb, (void *)port);
Expand All @@ -577,15 +579,18 @@ int ds34usb_get_bdaddr(u8 *data, int port)

for (i = 0; i < 6; i++)
data[5 - i] = usb_buf[15 - i];

ret = 1;
} else {
DPRINTF("DS34USB: ds3usb_get_bdaddr usb transfer error %d\n", ret);
ret = 0;
}
}

ds34pad[port].update_rum = 1;
SignalSema(ds34pad[port].sema);

return 1;
return ret;
}

void ds34usb_set_bdaddr(u8 *data, int port)
Expand Down Expand Up @@ -697,7 +702,7 @@ void *rpc_sf(int cmd, void *data, int size)
*(u8 *)data = ds34usb_get_status(*(u8 *)data);
break;
case DS34USB_GET_BDADDR:
*(u8 *)data = ds34usb_get_bdaddr((u8 *)data + 1, *(u8 *)data);
*(u8 *)data = ds34usb_get_bdaddr((u8 *)(data + 1), *(u8 *)data);
break;
case DS34USB_SET_BDADDR:
ds34usb_set_bdaddr((u8 *)(data + 1), *(u8 *)data);
Expand Down
2 changes: 1 addition & 1 deletion modules/pademu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ endif

ifeq ($(USE_BT),1)
IOP_BIN = bt_pademu.irx
IOP_CFLAGS += -DBT -DUSE_THREAD
IOP_CFLAGS += -DBT
IOP_OBJS_DIR = obj.bt/
IOP_OBJS += ds34bt.o
endif
Expand Down
23 changes: 8 additions & 15 deletions modules/pademu/ds34bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -528,8 +528,7 @@ static void HCI_event_task(int result)
break;

case HCI_EVENT_COMMAND_STATUS:
if (hci_buf[2]) // show status on serial if not OK
{
if (hci_buf[2]) { // show status on serial if not OK
DPRINTF("HCI Command Failed: \n");
DPRINTF("\t Status = 0x%02X \n", hci_buf[2]);
DPRINTF("\t Command_OpCode(OGF) = 0x%02X \n", ((hci_buf[5] & 0xFC) >> 2));
Expand All @@ -539,8 +538,7 @@ static void HCI_event_task(int result)

case HCI_EVENT_CONNECT_COMPLETE:
DPRINTF("HCI event Connect Complete: \n");
if (!hci_buf[2]) // check if connected OK
{
if (!hci_buf[2]) { // check if connected OK
DPRINTF("\t Connection_Handle 0x%02X \n", hci_buf[3] | ((hci_buf[4] & 0x0F) << 8));
DPRINTF("\t Requested by BD_ADDR: \n\t");
for (i = 0; i < 6; i++) {
Expand Down Expand Up @@ -645,8 +643,7 @@ static void HCI_event_task(int result)
}
DPRINTF("\n\t Link = 0x%02X \n", hci_buf[11]);
DPRINTF("\t Class = 0x%02X 0x%02X 0x%02X \n", hci_buf[8], hci_buf[9], hci_buf[10]);
for (i = 0; i < MAX_PADS; i++) //find free slot
{
for (i = 0; i < MAX_PADS; i++) { //find free slot
if (!pad_status_check(DS34BT_STATE_RUNNING, i) && ds34pad[i].enabled) {
if (pad_status_check(DS34BT_STATE_CONNECTED, i)) {
if (pad_status_check(DS34BT_STATE_DISCONNECTING, i)) //if we're waiting for hci disconnect event
Expand All @@ -657,8 +654,7 @@ static void HCI_event_task(int result)
break;
}
}
if (i >= MAX_PADS) //no free slot
{
if (i >= MAX_PADS) { //no free slot
hci_reject_connection(hci_buf + 2);
break;
}
Expand All @@ -667,8 +663,7 @@ static void HCI_event_task(int result)
ds34pad[pad].isfake = 0;
if (!disable_fake) {
ds34pad[pad].isfake = 1; //fake ds3
for (i = 0; i < sizeof(GenuineMacAddress) / 3; i++) //check if ds3 is genuine
{
for (i = 0; i < sizeof(GenuineMacAddress) / 3; i++) { //check if ds3 is genuine
if (ds34pad[pad].bdaddr[5] == GenuineMacAddress[i][0] &&
ds34pad[pad].bdaddr[4] == GenuineMacAddress[i][1] &&
ds34pad[pad].bdaddr[3] == GenuineMacAddress[i][2]) {
Expand Down Expand Up @@ -1102,7 +1097,7 @@ static void l2cap_event_cb(int resultCode, int bytes, void *arg)
}
}

UsbBulkTransfer(bt_dev.inEndp, l2cap_buf, MAX_BUFFER_SIZE, l2cap_event_cb, arg);
UsbBulkTransfer(bt_dev.inEndp, l2cap_buf, MAX_BUFFER_SIZE + 23, l2cap_event_cb, arg);
SignalSema(bt_dev.hid_sema);
}

Expand Down Expand Up @@ -1175,8 +1170,7 @@ static int hid_LEDRumble(u8 *led, u8 lrum, u8 rrum, int pad)

led_buf[11] = led[0] & 0x7F; //LED Conf

if (led[3]) //means charging, so blink
{
if (led[3]) { //means charging, so blink
led_buf[15] = 0x32;
led_buf[20] = 0x32;
led_buf[25] = 0x32;
Expand All @@ -1199,8 +1193,7 @@ static int hid_LEDRumble(u8 *led, u8 lrum, u8 rrum, int pad)
led_buf[10] = led[1]; //g
led_buf[11] = led[2]; //b

if (led[3]) //means charging, so blink
{
if (led[3]) { //means charging, so blink
led_buf[12] = 0x80; // Time to flash bright (255 = 2.5 seconds)
led_buf[13] = 0x80; // Time to flash dark (255 = 2.5 seconds)
}
Expand Down
31 changes: 17 additions & 14 deletions modules/pademu/ds34usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ static u8 rgbled_patterns[][2][3] =
{{0x00, 0x10, 0x10}, {0x00, 0x7F, 0x7F}}, // light cyan/cyan
};

static u8 usb_buf[MAX_BUFFER_SIZE + 20] __attribute((aligned(4))) = {0};
static u8 usb_buf[MAX_BUFFER_SIZE + 32] __attribute((aligned(4))) = {0};

int usb_probe(int devId);
int usb_connect(int devId);
Expand Down Expand Up @@ -231,7 +231,7 @@ static void usb_config_set(int result, int count, void *arg)
DelayThread(10000);
led[0] = led_patterns[pad][1];
led[3] = 0;
} else if(ds34pad[pad].type == DS4) {
} else if (ds34pad[pad].type == DS4) {
led[0] = rgbled_patterns[pad][1][0];
led[1] = rgbled_patterns[pad][1][1];
led[2] = rgbled_patterns[pad][1][2];
Expand Down Expand Up @@ -265,7 +265,10 @@ static void readReport(u8 *data, int pad)
struct ds3report *report;

report = (struct ds3report *)&data[2];


if (report->RightStickX == 0 && report->RightStickY == 0) // ledrumble cmd causes null report sometime
return;

ds34pad[pad].data[0] = ~report->ButtonStateL;
ds34pad[pad].data[1] = ~report->ButtonStateH;

Expand Down Expand Up @@ -510,16 +513,6 @@ int ds34usb_get_data(u8 *dst, int size, int port)
int ret = 0;

WaitSema(ds34pad[port].sema);

if (ds34pad[port].update_rum) {
ret = LEDRumble(ds34pad[port].oldled, ds34pad[port].lrum, ds34pad[port].rrum, port);
if (ret == USB_RC_OK)
TransferWait(ds34pad[port].cmd_sema);
else
DPRINTF("DS34USB: LEDRumble usb transfer error %d\n", ret);

ds34pad[port].update_rum = 0;
}

PollSema(ds34pad[port].sema);

Expand All @@ -529,14 +522,24 @@ int ds34usb_get_data(u8 *dst, int size, int port)
TransferWait(ds34pad[port].sema);
if (!usb_resulCode)
readReport(usb_buf, port);

usb_resulCode = 1;
} else {
DPRINTF("DS34USB: ds34usb_get_data usb transfer error %d\n", ret);
}

mips_memcpy(dst, ds34pad[port].data, size);
ret = ds34pad[port].analog_btn & 1;

if (ds34pad[port].update_rum) {
ret = LEDRumble(ds34pad[port].oldled, ds34pad[port].lrum, ds34pad[port].rrum, port);
if (ret == USB_RC_OK)
TransferWait(ds34pad[port].cmd_sema);
else
DPRINTF("DS34USB: LEDRumble usb transfer error %d\n", ret);

ds34pad[port].update_rum = 0;
}

SignalSema(ds34pad[port].sema);

Expand Down
4 changes: 2 additions & 2 deletions modules/pademu/pademu.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,9 @@ extern struct irx_export_table _exp_pademu;

int _start(int argc, char *argv[])
{
u8 pad_vibration = 0xFF;
u8 pad_vibration = 0x03;

pad_enable = 0xFF;
pad_enable = 0x03;

if (argc > 1) {
pad_enable = argv[1][0];
Expand Down
20 changes: 10 additions & 10 deletions src/gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -843,17 +843,17 @@ static int guiPadEmuUpdater(int modified)
diaSetEnabled(diaPadEmuConfig, PADCFG_PADPORT, PadEmuEnable);
diaSetEnabled(diaPadEmuConfig, PADCFG_PADEMU_VIB, PadEmuPort & PadEmuEnable);

diaSetVisible(diaPadEmuConfig, PADCFG_USBDG_MAC, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAD_MAC, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAIR, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_USBDG_MAC, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAD_MAC, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAIR, (PadEmuMode == 1) & PadEmuEnable);

diaSetVisible(diaPadEmuConfig, PADCFG_USBDG_MAC_STR, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAD_MAC_STR, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAIR_STR, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_USBDG_MAC_STR, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAD_MAC_STR, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PAIR_STR, (PadEmuMode == 1) & PadEmuEnable);

diaSetVisible(diaPadEmuConfig, PADCFG_BTINFO, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PADEMU_WORKAROUND, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PADEMU_WORKAROUND_STR, PadEmuMode & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_BTINFO, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PADEMU_WORKAROUND, (PadEmuMode == 1) & PadEmuEnable);
diaSetVisible(diaPadEmuConfig, PADCFG_PADEMU_WORKAROUND_STR, (PadEmuMode == 1) & PadEmuEnable);

if (modified) {
if (PadEmuMtap) {
Expand Down Expand Up @@ -881,7 +881,7 @@ static int guiPadEmuUpdater(int modified)
PadEmuSettings |= PadEmuMode | (PadEmuPort << (8 + PadPort)) | (PadEmuVib << (16 + PadPort)) | (PadEmuMtap << 24) | ((PadEmuMtapPort - 1) << 25) | (PadEmuWorkaround << 26);
PadEmuSettings &= (~(!PadEmuMode) & ~(!PadEmuPort << (8 + PadPort)) & ~(!PadEmuVib << (16 + PadPort)) & ~(!PadEmuMtap << 24) & ~(!(PadEmuMtapPort - 1) << 25) & ~(!PadEmuWorkaround << 26));

if (PadEmuMode) {
if (PadEmuMode == 1) {
if (ds34bt_get_status(0) & DS34BT_STATE_USB_CONFIGURED) {
if (dg_discon) {
dgmacset = 0;
Expand Down