Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.

Dependencies:   mbed

Committer:
AjK
Date:
Mon Oct 11 10:34:55 2010 +0000
Revision:
0:0a841b89d614
Totally Alpha quality as this project isn\t completed. Just publishing it as it answers many questions asked in the forums

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:0a841b89d614 1 /****************************************************************************
AjK 0:0a841b89d614 2 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd
AjK 0:0a841b89d614 3 *
AjK 0:0a841b89d614 4 * This file is part of the Satellite Observers Workbench (SOWB).
AjK 0:0a841b89d614 5 *
AjK 0:0a841b89d614 6 * SOWB is free software: you can redistribute it and/or modify
AjK 0:0a841b89d614 7 * it under the terms of the GNU General Public License as published by
AjK 0:0a841b89d614 8 * the Free Software Foundation, either version 3 of the License, or
AjK 0:0a841b89d614 9 * (at your option) any later version.
AjK 0:0a841b89d614 10 *
AjK 0:0a841b89d614 11 * SOWB is distributed in the hope that it will be useful,
AjK 0:0a841b89d614 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
AjK 0:0a841b89d614 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
AjK 0:0a841b89d614 14 * GNU General Public License for more details.
AjK 0:0a841b89d614 15 *
AjK 0:0a841b89d614 16 * You should have received a copy of the GNU General Public License
AjK 0:0a841b89d614 17 * along with SOWB. If not, see <http://www.gnu.org/licenses/>.
AjK 0:0a841b89d614 18 *
AjK 0:0a841b89d614 19 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $
AjK 0:0a841b89d614 20 *
AjK 0:0a841b89d614 21 ***************************************************************************/
AjK 0:0a841b89d614 22
AjK 0:0a841b89d614 23 #ifndef XBOX360GAMEPAD_H
AjK 0:0a841b89d614 24 #define XBOX360GAMEPAD_H
AjK 0:0a841b89d614 25
AjK 0:0a841b89d614 26 #include "usbeh_api.h"
AjK 0:0a841b89d614 27
AjK 0:0a841b89d614 28 #define BUTTON_PRESSED 1
AjK 0:0a841b89d614 29 #define BUTTON_RELEASED 0
AjK 0:0a841b89d614 30
AjK 0:0a841b89d614 31 #define BUTTON_HOLD_TIME 3000
AjK 0:0a841b89d614 32
AjK 0:0a841b89d614 33 #define BUTT_LS_PRESS 1
AjK 0:0a841b89d614 34 #define BUTT_RS_PRESS 2
AjK 0:0a841b89d614 35 #define BUTT_XBOX_PRESS 3
AjK 0:0a841b89d614 36 #define BUTT_UNUSED_PRESS 4
AjK 0:0a841b89d614 37 #define BUTT_A_PRESS 5
AjK 0:0a841b89d614 38 #define BUTT_B_PRESS 6
AjK 0:0a841b89d614 39 #define BUTT_X_PRESS 7
AjK 0:0a841b89d614 40 #define BUTT_Y_PRESS 8
AjK 0:0a841b89d614 41 #define BUTT_DPAD_UP_PRESS 9
AjK 0:0a841b89d614 42 #define BUTT_DPAD_DOWN_PRESS 10
AjK 0:0a841b89d614 43 #define BUTT_DPAD_LEFT_PRESS 11
AjK 0:0a841b89d614 44 #define BUTT_DPAD_RIGHT_PRESS 12
AjK 0:0a841b89d614 45 #define BUTT_START_PRESS 13
AjK 0:0a841b89d614 46 #define BUTT_BACK_PRESS 14
AjK 0:0a841b89d614 47 #define BUTT_LEFT_HAT_PRESS 15
AjK 0:0a841b89d614 48 #define BUTT_RIGHT_HAT_PRESS 16
AjK 0:0a841b89d614 49
AjK 0:0a841b89d614 50 #define BUTT_LS_RELEASE (BUTT_LS_PRESS + 16)
AjK 0:0a841b89d614 51 #define BUTT_RS_RELEASE (BUTT_RS_PRESS + 16)
AjK 0:0a841b89d614 52 #define BUTT_XBOX_RELEASE (BUTT_XBOX_PRESS + 16)
AjK 0:0a841b89d614 53 #define BUTT_UNUSED_RELEASE (BUTT_UNUSED_PRESS + 16)
AjK 0:0a841b89d614 54 #define BUTT_A_RELEASE (BUTT_A_PRESS + 16)
AjK 0:0a841b89d614 55 #define BUTT_B_RELEASE (BUTT_B_PRESS + 16)
AjK 0:0a841b89d614 56 #define BUTT_X_RELEASE (BUTT_X_PRESS + 16)
AjK 0:0a841b89d614 57 #define BUTT_Y_RELEASE (BUTT_Y_PRESS + 16)
AjK 0:0a841b89d614 58 #define BUTT_DPAD_UP_RELEASE (BUTT_DPAD_UP_PRESS + 16)
AjK 0:0a841b89d614 59 #define BUTT_DPAD_DOWN_RELEASE (BUTT_DPAD_DOWN_PRESS + 16)
AjK 0:0a841b89d614 60 #define BUTT_DPAD_LEFT_RELEASE (BUTT_DPAD_LEFT_PRESS + 16)
AjK 0:0a841b89d614 61 #define BUTT_DPAD_RIGHT_RELEASE (BUTT_DPAD_RIGHT_PRESS + 16)
AjK 0:0a841b89d614 62 #define BUTT_START_RELEASE (BUTT_START_PRESS + 16)
AjK 0:0a841b89d614 63 #define BUTT_BACK_RELEASE (BUTT_BACK_PRESS + 16)
AjK 0:0a841b89d614 64 #define BUTT_LEFT_HAT_RELEASE (BUTT_LEFT_HAT_PRESS + 16)
AjK 0:0a841b89d614 65 #define BUTT_RIGHT_HAT_RELEASE (BUTT_RIGHT_HAT_PRESS + 16)
AjK 0:0a841b89d614 66
AjK 0:0a841b89d614 67 #define BUTT_LS_HOLD (BUTT_LS_PRESS + 32)
AjK 0:0a841b89d614 68 #define BUTT_RS_HOLD (BUTT_RS_PRESS + 32)
AjK 0:0a841b89d614 69 #define BUTT_XBOX_HOLD (BUTT_XBOX_PRESS + 32)
AjK 0:0a841b89d614 70 #define BUTT_UNUSED_HOLD (BUTT_UNUSED_PRESS + 32)
AjK 0:0a841b89d614 71 #define BUTT_A_HOLD (BUTT_A_PRESS + 32)
AjK 0:0a841b89d614 72 #define BUTT_B_HOLD (BUTT_B_PRESS + 32)
AjK 0:0a841b89d614 73 #define BUTT_X_HOLD (BUTT_X_PRESS + 32)
AjK 0:0a841b89d614 74 #define BUTT_Y_HOLD (BUTT_Y_PRESS + 32)
AjK 0:0a841b89d614 75 #define BUTT_DPAD_UP_HOLD (BUTT_DPAD_UP_PRESS + 32)
AjK 0:0a841b89d614 76 #define BUTT_DPAD_DOWN_HOLD (BUTT_DPAD_DOWN_PRESS + 32)
AjK 0:0a841b89d614 77 #define BUTT_DPAD_LEFT_HOLD (BUTT_DPAD_LEFT_PRESS + 32)
AjK 0:0a841b89d614 78 #define BUTT_DPAD_RIGHT_HOLD (BUTT_DPAD_RIGHT_PRESS + 32)
AjK 0:0a841b89d614 79 #define BUTT_START_HOLD (BUTT_START_PRESS + 32)
AjK 0:0a841b89d614 80 #define BUTT_BACK_HOLD (BUTT_BACK_PRESS + 32)
AjK 0:0a841b89d614 81 #define BUTT_LEFT_HAT_HOLD (BUTT_LEFT_HAT_PRESS + 32)
AjK 0:0a841b89d614 82 #define BUTT_RIGHT_HAT_HOLD (BUTT_RIGHT_HAT_PRESS + 32)
AjK 0:0a841b89d614 83
AjK 0:0a841b89d614 84 #define LED_ALL_OFF 0x00
AjK 0:0a841b89d614 85 #define LED_ALL_BLINKING 0x01
AjK 0:0a841b89d614 86 #define LED_1_FLASH_THEN_ON 0x02
AjK 0:0a841b89d614 87 #define LED_2_FLASH_THEN_ON 0x03
AjK 0:0a841b89d614 88 #define LED_3_FLASH_THEN_ON 0x04
AjK 0:0a841b89d614 89 #define LED_4_FLASH_THEN_ON 0x05
AjK 0:0a841b89d614 90 #define LED_1_ON 0x06
AjK 0:0a841b89d614 91 #define LED_2_ON 0x07
AjK 0:0a841b89d614 92 #define LED_3_ON 0x08
AjK 0:0a841b89d614 93 #define LED_4_ON 0x09
AjK 0:0a841b89d614 94 #define LED_ROTATING 0x0A
AjK 0:0a841b89d614 95 #define LED_BLINKING 0x0B
AjK 0:0a841b89d614 96 #define LED_SLOW_BLINKING 0x0C
AjK 0:0a841b89d614 97 #define LED_ALTERNATING 0x0D
AjK 0:0a841b89d614 98
AjK 0:0a841b89d614 99 typedef struct {
AjK 0:0a841b89d614 100 uint16_t idVendor;
AjK 0:0a841b89d614 101 uint16_t idProduct;
AjK 0:0a841b89d614 102 const char* name;
AjK 0:0a841b89d614 103 } XBOX360_DEVICE;
AjK 0:0a841b89d614 104
AjK 0:0a841b89d614 105 typedef struct {
AjK 0:0a841b89d614 106 unsigned state;
AjK 0:0a841b89d614 107 unsigned mask;
AjK 0:0a841b89d614 108 unsigned count;
AjK 0:0a841b89d614 109 USBEH_SOF_COUNTER pressHold;
AjK 0:0a841b89d614 110 } XBOX360_BUTTON;
AjK 0:0a841b89d614 111
AjK 0:0a841b89d614 112 typedef struct {
AjK 0:0a841b89d614 113 short x;
AjK 0:0a841b89d614 114 short y;
AjK 0:0a841b89d614 115 short x_previous;
AjK 0:0a841b89d614 116 short y_previous;
AjK 0:0a841b89d614 117 } XBOX360_STICK;
AjK 0:0a841b89d614 118
AjK 0:0a841b89d614 119 /* API functions. */
AjK 0:0a841b89d614 120 char xbox360gamepad_get_button(void);
AjK 0:0a841b89d614 121 char xbox360gamepad_get_button_preview(void);
AjK 0:0a841b89d614 122 unsigned char xbox360gamepad_get_trigger_left(void);
AjK 0:0a841b89d614 123 unsigned char xbox360gamepad_get_trigger_right(void);
AjK 0:0a841b89d614 124 void xbox360gamepad_led(int code);
AjK 0:0a841b89d614 125 XBOX360_STICK * xbox360gamepad_get_stick_left(void);
AjK 0:0a841b89d614 126 XBOX360_STICK * xbox360gamepad_get_stick_right(void);
AjK 0:0a841b89d614 127
AjK 0:0a841b89d614 128 int xbox360gamepad_init(void);
AjK 0:0a841b89d614 129 void xbox360gamepad_process(void);
AjK 0:0a841b89d614 130
AjK 0:0a841b89d614 131 /* Button press and hold callback function. */
AjK 0:0a841b89d614 132 void xbox360gamepad_button_hold_callback(USBEH_SOF_COUNTER *q);
AjK 0:0a841b89d614 133
AjK 0:0a841b89d614 134 /* Onload callback function. */
AjK 0:0a841b89d614 135 int xbox360gamepad_onload_callback(int device, USBEH_deviceDescriptor *deviceDesc, USBEH_interfaceDescriptor **interfaceDesc);
AjK 0:0a841b89d614 136
AjK 0:0a841b89d614 137 void xbox360_chatpad_init(void);
AjK 0:0a841b89d614 138
AjK 0:0a841b89d614 139 #endif