Class to interface with Sparkfun's Blackberry Trackball Breakout Board.

Dependents:   BBTrackball_Sample

Committer:
AdamGreen
Date:
Fri Dec 09 19:25:47 2011 +0000
Revision:
2:7715a78a7175
Parent:
1:94c8e1e74dc1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AdamGreen 0:ad0f8a08c470 1 /* Copyright 2011 Adam Green (http://mbed.org/users/AdamGreen/)
AdamGreen 0:ad0f8a08c470 2
AdamGreen 0:ad0f8a08c470 3 Licensed under the Apache License, Version 2.0 (the "License");
AdamGreen 0:ad0f8a08c470 4 you may not use this file except in compliance with the License.
AdamGreen 0:ad0f8a08c470 5 You may obtain a copy of the License at
AdamGreen 0:ad0f8a08c470 6
AdamGreen 0:ad0f8a08c470 7 http://www.apache.org/licenses/LICENSE-2.0
AdamGreen 0:ad0f8a08c470 8
AdamGreen 0:ad0f8a08c470 9 Unless required by applicable law or agreed to in writing, software
AdamGreen 0:ad0f8a08c470 10 distributed under the License is distributed on an "AS IS" BASIS,
AdamGreen 0:ad0f8a08c470 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AdamGreen 0:ad0f8a08c470 12 See the License for the specific language governing permissions and
AdamGreen 0:ad0f8a08c470 13 limitations under the License.
AdamGreen 0:ad0f8a08c470 14 */
AdamGreen 0:ad0f8a08c470 15 /* Implementation of class to control Sparkfun's Blackberry Trackball:
AdamGreen 0:ad0f8a08c470 16 http://www.sparkfun.com/products/9320
AdamGreen 0:ad0f8a08c470 17 */
AdamGreen 1:94c8e1e74dc1 18 #include <limits.h>
AdamGreen 0:ad0f8a08c470 19 #include "BBTrackball.h"
AdamGreen 0:ad0f8a08c470 20
AdamGreen 0:ad0f8a08c470 21
AdamGreen 0:ad0f8a08c470 22
AdamGreen 1:94c8e1e74dc1 23 // Public methods.
AdamGreen 1:94c8e1e74dc1 24 void CBBTrackball::GetState(SState* pState)
AdamGreen 1:94c8e1e74dc1 25 {
AdamGreen 1:94c8e1e74dc1 26 pState->ButtonPressed = !m_ButtonState;
AdamGreen 1:94c8e1e74dc1 27 pState->Up = UpCount();
AdamGreen 1:94c8e1e74dc1 28 pState->Down = DownCount();
AdamGreen 1:94c8e1e74dc1 29 pState->Left = LeftCount();
AdamGreen 1:94c8e1e74dc1 30 pState->Right = RightCount();
AdamGreen 1:94c8e1e74dc1 31 }
AdamGreen 1:94c8e1e74dc1 32
AdamGreen 1:94c8e1e74dc1 33
AdamGreen 1:94c8e1e74dc1 34 void CBBTrackball::SetColour(const SColour* pColour)
AdamGreen 1:94c8e1e74dc1 35 {
AdamGreen 1:94c8e1e74dc1 36 m_BluePWM.write((float)pColour->Blue / 255.0f);
AdamGreen 1:94c8e1e74dc1 37 m_RedPWM.write((float)pColour->Red / 255.0f);
AdamGreen 1:94c8e1e74dc1 38 m_GreenPWM.write((float)pColour->Green / 255.0f);
AdamGreen 1:94c8e1e74dc1 39 m_WhitePWM.write((float)pColour->White / 255.0f);
AdamGreen 1:94c8e1e74dc1 40 }
AdamGreen 1:94c8e1e74dc1 41
AdamGreen 1:94c8e1e74dc1 42
AdamGreen 1:94c8e1e74dc1 43
AdamGreen 1:94c8e1e74dc1 44 // Protected methods.
AdamGreen 0:ad0f8a08c470 45 void CBBTrackball::UpISR(void)
AdamGreen 0:ad0f8a08c470 46 {
AdamGreen 0:ad0f8a08c470 47 m_UpCount++;
AdamGreen 0:ad0f8a08c470 48 }
AdamGreen 0:ad0f8a08c470 49
AdamGreen 0:ad0f8a08c470 50 void CBBTrackball::DownISR(void)
AdamGreen 0:ad0f8a08c470 51 {
AdamGreen 0:ad0f8a08c470 52 m_DownCount++;
AdamGreen 0:ad0f8a08c470 53 }
AdamGreen 0:ad0f8a08c470 54
AdamGreen 0:ad0f8a08c470 55 void CBBTrackball::LeftISR(void)
AdamGreen 0:ad0f8a08c470 56 {
AdamGreen 0:ad0f8a08c470 57 m_LeftCount++;
AdamGreen 0:ad0f8a08c470 58 }
AdamGreen 0:ad0f8a08c470 59
AdamGreen 0:ad0f8a08c470 60 void CBBTrackball::RightISR(void)
AdamGreen 0:ad0f8a08c470 61 {
AdamGreen 0:ad0f8a08c470 62 m_RightCount++;
AdamGreen 0:ad0f8a08c470 63 }
AdamGreen 1:94c8e1e74dc1 64
AdamGreen 1:94c8e1e74dc1 65 void CBBTrackball::ButtonSampleISR(void)
AdamGreen 1:94c8e1e74dc1 66 {
AdamGreen 1:94c8e1e74dc1 67 int ButtonSample = m_Button.read();
AdamGreen 1:94c8e1e74dc1 68
AdamGreen 1:94c8e1e74dc1 69 if (ButtonSample != m_ButtonState)
AdamGreen 1:94c8e1e74dc1 70 {
AdamGreen 1:94c8e1e74dc1 71 // The button appears to be transition to a new state. Don't actually
AdamGreen 1:94c8e1e74dc1 72 // switch to the new state until enough samples have been seen to
AdamGreen 1:94c8e1e74dc1 73 // reduce button bounce.
AdamGreen 1:94c8e1e74dc1 74 if (m_ButtonNewStateCount++ > 5)
AdamGreen 1:94c8e1e74dc1 75 {
AdamGreen 1:94c8e1e74dc1 76 m_ButtonState = ButtonSample;
AdamGreen 1:94c8e1e74dc1 77 m_ButtonNewStateCount = 0;
AdamGreen 1:94c8e1e74dc1 78 }
AdamGreen 1:94c8e1e74dc1 79 }
AdamGreen 1:94c8e1e74dc1 80 else
AdamGreen 1:94c8e1e74dc1 81 {
AdamGreen 1:94c8e1e74dc1 82 m_ButtonNewStateCount = 0;
AdamGreen 1:94c8e1e74dc1 83 }
AdamGreen 1:94c8e1e74dc1 84 }
AdamGreen 1:94c8e1e74dc1 85
AdamGreen 1:94c8e1e74dc1 86 short CBBTrackball::ThresholdToShort(unsigned int Value)
AdamGreen 1:94c8e1e74dc1 87 {
AdamGreen 1:94c8e1e74dc1 88 if (Value > SHRT_MAX)
AdamGreen 1:94c8e1e74dc1 89 {
AdamGreen 1:94c8e1e74dc1 90 Value = SHRT_MAX;
AdamGreen 1:94c8e1e74dc1 91 }
AdamGreen 1:94c8e1e74dc1 92
AdamGreen 1:94c8e1e74dc1 93 return (short)Value;
AdamGreen 1:94c8e1e74dc1 94 }
AdamGreen 1:94c8e1e74dc1 95
AdamGreen 1:94c8e1e74dc1 96 short CBBTrackball::UpCount(void)
AdamGreen 1:94c8e1e74dc1 97 {
AdamGreen 1:94c8e1e74dc1 98 unsigned int Count;
AdamGreen 1:94c8e1e74dc1 99
AdamGreen 1:94c8e1e74dc1 100 Count = m_UpCount;
AdamGreen 1:94c8e1e74dc1 101 m_UpCount = 0;
AdamGreen 1:94c8e1e74dc1 102
AdamGreen 1:94c8e1e74dc1 103 return ThresholdToShort(Count);
AdamGreen 1:94c8e1e74dc1 104 }
AdamGreen 1:94c8e1e74dc1 105
AdamGreen 1:94c8e1e74dc1 106 short CBBTrackball::DownCount(void)
AdamGreen 1:94c8e1e74dc1 107 {
AdamGreen 1:94c8e1e74dc1 108 unsigned int Count;
AdamGreen 1:94c8e1e74dc1 109
AdamGreen 1:94c8e1e74dc1 110 Count = m_DownCount;
AdamGreen 1:94c8e1e74dc1 111 m_DownCount = 0;
AdamGreen 1:94c8e1e74dc1 112
AdamGreen 1:94c8e1e74dc1 113 return ThresholdToShort(Count);
AdamGreen 1:94c8e1e74dc1 114 }
AdamGreen 1:94c8e1e74dc1 115
AdamGreen 1:94c8e1e74dc1 116 short CBBTrackball::LeftCount(void)
AdamGreen 1:94c8e1e74dc1 117 {
AdamGreen 1:94c8e1e74dc1 118 unsigned int Count;
AdamGreen 1:94c8e1e74dc1 119
AdamGreen 1:94c8e1e74dc1 120 Count = m_LeftCount;
AdamGreen 1:94c8e1e74dc1 121 m_LeftCount = 0;
AdamGreen 1:94c8e1e74dc1 122
AdamGreen 1:94c8e1e74dc1 123 return ThresholdToShort(Count);
AdamGreen 1:94c8e1e74dc1 124 }
AdamGreen 1:94c8e1e74dc1 125
AdamGreen 1:94c8e1e74dc1 126 short CBBTrackball::RightCount(void)
AdamGreen 1:94c8e1e74dc1 127 {
AdamGreen 1:94c8e1e74dc1 128 unsigned int Count;
AdamGreen 1:94c8e1e74dc1 129
AdamGreen 1:94c8e1e74dc1 130 Count = m_RightCount;
AdamGreen 1:94c8e1e74dc1 131 m_RightCount = 0;
AdamGreen 1:94c8e1e74dc1 132
AdamGreen 1:94c8e1e74dc1 133 return ThresholdToShort(Count);
AdamGreen 1:94c8e1e74dc1 134 }