forked from adafruit/Pro_Trinket_USB_Mouse
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProTrinketGamepad.cpp
More file actions
60 lines (46 loc) · 1.77 KB
/
ProTrinketGamepad.cpp
File metadata and controls
60 lines (46 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
This is the part of the ProTrinketGamepad code that is exposed to the user
See the header file for more comments on the functions
Copyright (c) 2015 Adafruit Industries
All rights reserved.
ProTrinketGamepad is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
ProTrinketGamepad is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with ProTrinketGamepad. If not, see
<http://www.gnu.org/licenses/>.
*/
#include "cmdline_defs.h"
#include "ProTrinketGamepad.h"
#include "ProTrinketGamepadC.h"
#include <stdint.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// create an instance that the user can use
Trinket_Gamepad TrinketGamepad;
// empty constructor
Trinket_Gamepad::Trinket_Gamepad()
{
// nothing to do
}
// starts the USB driver, causes re-enumeration
void Trinket_Gamepad::begin()
{
usbBegin();
}
// makes a gamepad movement, must be called at least once every 10ms, even if no movement
void Trinket_Gamepad::move(signed int x, signed int y, signed int rx, signed int ry, uint16_t buttonMask)
{
int16_t * signed_ptr = (int16_t *)report_buffer;
uint16_t * unsigned_ptr = (uint16_t *)report_buffer;
unsigned_ptr[0] = buttonMask;
signed_ptr[1] = x;
signed_ptr[2] = y;
signed_ptr[3] = rx;
signed_ptr[4] = ry;
usbReportSend();
}
// checks if USB is connected, 0 if not connected
char Trinket_Gamepad::isConnected()
{
return usb_hasCommed;
}