Trackball based on the NXP LPC11U24 and the ADNS-9500

Dependencies:   ADNS9500 USBDevice mbed 25LCxxx_SPI

Committer:
xxann5
Date:
Sun Jan 06 19:48:26 2013 +0000
Revision:
6:4cb2c9a3abcd
Parent:
5:c7056267daa7
Child:
7:d6ee49a89009
Reworked main to allow for a programming mode via USB. Also added licensing to the main.cpp and main.h files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xxann5 6:4cb2c9a3abcd 1 /* Copyright (c) 2012-2013 Chris Majoros(chris@majoros.us), MIT License
xxann5 6:4cb2c9a3abcd 2 *
xxann5 6:4cb2c9a3abcd 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
xxann5 6:4cb2c9a3abcd 4 * and associated documentation files (the "Software"), to deal in the Software without
xxann5 6:4cb2c9a3abcd 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
xxann5 6:4cb2c9a3abcd 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
xxann5 6:4cb2c9a3abcd 7 * Software is furnished to do so, subject to the following conditions:
xxann5 6:4cb2c9a3abcd 8 *
xxann5 6:4cb2c9a3abcd 9 * The above copyright notice and this permission notice shall be included in all copies or
xxann5 6:4cb2c9a3abcd 10 * substantial portions of the Software.
xxann5 6:4cb2c9a3abcd 11 *
xxann5 6:4cb2c9a3abcd 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
xxann5 6:4cb2c9a3abcd 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
xxann5 6:4cb2c9a3abcd 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
xxann5 6:4cb2c9a3abcd 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
xxann5 6:4cb2c9a3abcd 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
xxann5 6:4cb2c9a3abcd 17 */
xxann5 6:4cb2c9a3abcd 18
xxann5 5:c7056267daa7 19 #include "mbed.h"
xxann5 5:c7056267daa7 20 #include "USBHID.h"
xxann5 5:c7056267daa7 21 #include "USBMouse.h"
xxann5 6:4cb2c9a3abcd 22
xxann5 5:c7056267daa7 23 #include <math.h>
xxann5 5:c7056267daa7 24 #include <stdint.h>
xxann5 5:c7056267daa7 25
xxann5 6:4cb2c9a3abcd 26
xxann5 6:4cb2c9a3abcd 27 #define PINDETECT_PIN_ASSTERED 0 //setAssertValue
xxann5 6:4cb2c9a3abcd 28 #define PINDETECT_SAMPLE_PERIOD 100 //setSampleFrequency
xxann5 6:4cb2c9a3abcd 29 #define PINDETECT_ASSERT_COUNT 10 //setSamplesTillAssert
xxann5 6:4cb2c9a3abcd 30 #define PINDETECT_HOLD_COUNT 500
xxann5 6:4cb2c9a3abcd 31
xxann5 6:4cb2c9a3abcd 32 #include "PinDetect.h"
xxann5 6:4cb2c9a3abcd 33
xxann5 5:c7056267daa7 34 #define ADNS9500_SROM_91
xxann5 5:c7056267daa7 35
xxann5 5:c7056267daa7 36 #define DEBUG
xxann5 5:c7056267daa7 37
xxann5 5:c7056267daa7 38 #include "adns9500.hpp"
xxann5 5:c7056267daa7 39 #include "Ser25lcxxx.h"
xxann5 5:c7056267daa7 40
xxann5 5:c7056267daa7 41 #define CHAT_SET 0x01
xxann5 5:c7056267daa7 42 #define CHAT_GET 0x02
xxann5 5:c7056267daa7 43
xxann5 5:c7056267daa7 44 #define CHAT_MOTION_DEFAULT_CPI 0x01
xxann5 5:c7056267daa7 45 #define CHAT_MOTION_MAX_CPI 0x02
xxann5 5:c7056267daa7 46 #define CHAT_MOTION_MIN_CPI 0x03
xxann5 5:c7056267daa7 47 #define CHAT_MOTION_STEP_CPI 0x04
xxann5 5:c7056267daa7 48 #define CHAT_Z_DEFAULT_CPI 0x05
xxann5 5:c7056267daa7 49 #define CHAT_HR_DEFAULT_CPI 0x06
xxann5 5:c7056267daa7 50
xxann5 5:c7056267daa7 51 #define CHAT_VID 0x07
xxann5 5:c7056267daa7 52 #define CHAT_PID 0x08
xxann5 5:c7056267daa7 53
xxann5 5:c7056267daa7 54 #define CHAT_ADNS_SROM 0x09
xxann5 5:c7056267daa7 55
xxann5 5:c7056267daa7 56 #define CHAT_LED_BEHAVIOR 0x0a
xxann5 5:c7056267daa7 57
xxann5 6:4cb2c9a3abcd 58 #define CHAT_BTN_TICKER_FREQ 0x0b
xxann5 6:4cb2c9a3abcd 59 #define CHAT_BTN_ASSERT_COUNT 0x0c
xxann5 6:4cb2c9a3abcd 60
xxann5 5:c7056267daa7 61
xxann5 5:c7056267daa7 62
xxann5 5:c7056267daa7 63 //This report will contain data to be sent
xxann5 5:c7056267daa7 64 HID_REPORT send_rep;
xxann5 5:c7056267daa7 65 HID_REPORT recv_rep;
xxann5 5:c7056267daa7 66
xxann5 5:c7056267daa7 67 DigitalOut led1(LED1);
xxann5 5:c7056267daa7 68 DigitalOut led2(LED2);
xxann5 5:c7056267daa7 69 DigitalOut led3(LED3);
xxann5 5:c7056267daa7 70 DigitalOut led4(LED4);
xxann5 5:c7056267daa7 71
xxann5 6:4cb2c9a3abcd 72 PinDetect btn_hr(p16);
xxann5 6:4cb2c9a3abcd 73 PinDetect btn_z(p17);
xxann5 6:4cb2c9a3abcd 74 DigitalIn btn_l(p18);
xxann5 6:4cb2c9a3abcd 75 PinDetect btn_m(p19);
xxann5 6:4cb2c9a3abcd 76 PinDetect btn_r(p20);
xxann5 6:4cb2c9a3abcd 77
xxann5 6:4cb2c9a3abcd 78
xxann5 6:4cb2c9a3abcd 79 DigitalIn btn_program(p22);
xxann5 6:4cb2c9a3abcd 80
xxann5 6:4cb2c9a3abcd 81 adns9500::ADNS9500 *sensor;
xxann5 6:4cb2c9a3abcd 82 USBMouse *mouse;
xxann5 5:c7056267daa7 83
xxann5 5:c7056267daa7 84 bool motion_triggered = false;
xxann5 5:c7056267daa7 85 bool z_axis_active = false;
xxann5 5:c7056267daa7 86 bool high_rez_active = false;
xxann5 5:c7056267daa7 87
xxann5 5:c7056267daa7 88 int default_motion_cpi = 1080;
xxann5 5:c7056267daa7 89 int default_z_cpi = 90;
xxann5 5:c7056267daa7 90 int default_hirez_cpi = 180;
xxann5 5:c7056267daa7 91
xxann5 6:4cb2c9a3abcd 92 void track();
xxann5 6:4cb2c9a3abcd 93 void program();
xxann5 5:c7056267daa7 94
xxann5 6:4cb2c9a3abcd 95 void motionCallback( void );
xxann5 6:4cb2c9a3abcd 96
xxann5 6:4cb2c9a3abcd 97 void btn_hr_press( void );
xxann5 6:4cb2c9a3abcd 98 void btn_hr_release( void );
xxann5 5:c7056267daa7 99
xxann5 6:4cb2c9a3abcd 100 void btn_z_press( void );
xxann5 6:4cb2c9a3abcd 101 void btn_z_release( void );
xxann5 5:c7056267daa7 102
xxann5 6:4cb2c9a3abcd 103 void btn_l_press(void);
xxann5 6:4cb2c9a3abcd 104 void btn_l_release( void );
xxann5 6:4cb2c9a3abcd 105
xxann5 6:4cb2c9a3abcd 106 void btn_m_press( void );
xxann5 6:4cb2c9a3abcd 107 void btn_m_release( void );
xxann5 6:4cb2c9a3abcd 108
xxann5 6:4cb2c9a3abcd 109 void btn_r_press( void );
xxann5 6:4cb2c9a3abcd 110 void btn_r_release( void );
xxann5 5:c7056267daa7 111
xxann5 5:c7056267daa7 112 void set( uint8_t attrib, uint8_t *val );
xxann5 5:c7056267daa7 113 void get( uint8_t attrib);