Fix for hack that worked around iOS app

Committer:
roysandberg
Date:
Wed May 11 02:28:16 2016 +0000
Revision:
5:c9d71618070d
Parent:
4:d3858592d3b5
Version with heart rate 30 second mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
roysandberg 0:8c0ecbdd3449 1 /******************************************************************************
roysandberg 0:8c0ecbdd3449 2 * Actuator_Waveforms.h
roysandberg 0:8c0ecbdd3449 3 *
roysandberg 0:8c0ecbdd3449 4 * Created on: Dec 16, 2011
roysandberg 0:8c0ecbdd3449 5 * Board: DRV2603EVM-CT RevD
roysandberg 0:8c0ecbdd3449 6 * Author: a0866685
roysandberg 0:8c0ecbdd3449 7 *
roysandberg 0:8c0ecbdd3449 8 * Desc: This file contains the waveform data arrays. See instructions below
roysandberg 0:8c0ecbdd3449 9 * to create new waveforms.
roysandberg 0:8c0ecbdd3449 10 *
roysandberg 0:8c0ecbdd3449 11 * Modified: Feb 15, 2011 - Updated for DRV2603EVM-CT RevC
roysandberg 0:8c0ecbdd3449 12 *
roysandberg 0:8c0ecbdd3449 13 ******************************************************************************
roysandberg 0:8c0ecbdd3449 14 * INSTRUCTIONS FOR CREATING A HAPTIC WAVEFORM
roysandberg 0:8c0ecbdd3449 15 * ****************************************************************************
roysandberg 0:8c0ecbdd3449 16 * 1. Create an array of data point pairs and label it
roysandberg 0:8c0ecbdd3449 17 * "effect_data". Where "effect" is the name of the
roysandberg 0:8c0ecbdd3449 18 * waveform. The first value in the pair is the
roysandberg 0:8c0ecbdd3449 19 * amplitude and the second value is the time. Each
roysandberg 0:8c0ecbdd3449 20 * unit of time is ~5ms.
roysandberg 0:8c0ecbdd3449 21 * waveform[] = {
roysandberg 0:8c0ecbdd3449 22 * amplitude,time,
roysandberg 0:8c0ecbdd3449 23 * amplitude,time,
roysandberg 0:8c0ecbdd3449 24 * ...
roysandberg 0:8c0ecbdd3449 25 * };
roysandberg 0:8c0ecbdd3449 26 *
roysandberg 0:8c0ecbdd3449 27 * 2. Create a Waveform struct below and call it "effect".
roysandberg 0:8c0ecbdd3449 28 *
roysandberg 0:8c0ecbdd3449 29 * 3. The Waveform structure should be set to:
roysandberg 0:8c0ecbdd3449 30 * Waveform effect = {
roysandberg 0:8c0ecbdd3449 31 * mode, // LRA_AUTOON, LRA_AUTOOFF, or ERM
roysandberg 0:8c0ecbdd3449 32 * length, // size in bytes of "effect_data"
roysandberg 0:8c0ecbdd3449 33 * data // name of the data array "effect_data"
roysandberg 0:8c0ecbdd3449 34 * };
roysandberg 0:8c0ecbdd3449 35 *
roysandberg 0:8c0ecbdd3449 36 * LRA_AUTOON - LRA with auto-resonance ON
roysandberg 0:8c0ecbdd3449 37 * LRA_AUTOFF - LRA waveform with auto-resonance OFF
roysandberg 0:8c0ecbdd3449 38 * ERM - ERM waveform
roysandberg 0:8c0ecbdd3449 39 ******************************************************************************/
roysandberg 0:8c0ecbdd3449 40
roysandberg 0:8c0ecbdd3449 41 #include "Actuator_Waveforms.h"
roysandberg 0:8c0ecbdd3449 42
roysandberg 0:8c0ecbdd3449 43 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 44 //LRA Standard Effects
roysandberg 0:8c0ecbdd3449 45 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 46 const unsigned char lra_click_data[] = {
roysandberg 0:8c0ecbdd3449 47 LRA_AUTOON_MAX, 0x05,
roysandberg 0:8c0ecbdd3449 48 0x00, 0x07};
roysandberg 0:8c0ecbdd3449 49 const Waveform lra_click = {LRA_AUTOON,4,lra_click_data};
roysandberg 0:8c0ecbdd3449 50
roysandberg 0:8c0ecbdd3449 51 const unsigned char lra_click_nobrake_data[] = {
roysandberg 0:8c0ecbdd3449 52 LRA_AUTOON_MAX, 0x0A,
roysandberg 0:8c0ecbdd3449 53 0x80, 0x02};
roysandberg 0:8c0ecbdd3449 54 const Waveform lra_click_nobrake = {LRA_AUTOON,4,lra_click_nobrake_data};
roysandberg 0:8c0ecbdd3449 55
roysandberg 0:8c0ecbdd3449 56 const unsigned char lra_doubleclick_data[] = {
roysandberg 0:8c0ecbdd3449 57 LRA_AUTOON_MAX, 0x08,
roysandberg 0:8c0ecbdd3449 58 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 59 LRA_AUTOON_MAX, 0x08,
roysandberg 0:8c0ecbdd3449 60 0x00, 0x09};
roysandberg 0:8c0ecbdd3449 61 const Waveform lra_doubleclick = {LRA_AUTOON,8,lra_doubleclick_data};
roysandberg 0:8c0ecbdd3449 62
roysandberg 0:8c0ecbdd3449 63 const unsigned char lra_doubleclick_nobrake_data[] = {
roysandberg 0:8c0ecbdd3449 64 LRA_AUTOON_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 65 0x80, 0x09,
roysandberg 0:8c0ecbdd3449 66 LRA_AUTOON_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 67 0x80, 0x09};
roysandberg 0:8c0ecbdd3449 68 const Waveform lra_doubleclick_nobrake = {LRA_AUTOON,8,lra_doubleclick_nobrake_data};
roysandberg 0:8c0ecbdd3449 69
roysandberg 0:8c0ecbdd3449 70 const unsigned char lra_tripleclick_nobrake_data[] = {
roysandberg 0:8c0ecbdd3449 71 LRA_AUTOON_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 72 0x80, 0x09,
roysandberg 0:8c0ecbdd3449 73 LRA_AUTOON_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 74 0x80, 0x09,
roysandberg 0:8c0ecbdd3449 75 LRA_AUTOON_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 76 0x80, 0x09};
roysandberg 0:8c0ecbdd3449 77 const Waveform lra_tripleclick_nobrake = {LRA_AUTOON,12,lra_tripleclick_nobrake_data};
roysandberg 0:8c0ecbdd3449 78
roysandberg 4:d3858592d3b5 79 const unsigned char lra_quarupleclick_nobrake_data[] = {
roysandberg 4:d3858592d3b5 80 LRA_AUTOON_MAX, 0x0D,
roysandberg 4:d3858592d3b5 81 0x80, 0x09,
roysandberg 4:d3858592d3b5 82 LRA_AUTOON_MAX, 0x0D,
roysandberg 4:d3858592d3b5 83 0x80, 0x09,
roysandberg 4:d3858592d3b5 84 LRA_AUTOON_MAX, 0x0D,
roysandberg 4:d3858592d3b5 85 0x80, 0x09,
roysandberg 4:d3858592d3b5 86 LRA_AUTOON_MAX, 0x0D,
roysandberg 4:d3858592d3b5 87 0x80, 0x09};
roysandberg 4:d3858592d3b5 88 const Waveform lra_quarupleclick_nobrake = {LRA_AUTOON,16,lra_quarupleclick_nobrake_data};
roysandberg 4:d3858592d3b5 89
roysandberg 4:d3858592d3b5 90
roysandberg 0:8c0ecbdd3449 91 const unsigned char lra_alert_data[] = {
roysandberg 0:8c0ecbdd3449 92 LRA_AUTOON_MAX, 0x05,
roysandberg 0:8c0ecbdd3449 93 LRA_AUTOON_MAX, 0x80};
roysandberg 0:8c0ecbdd3449 94 const Waveform lra_alert = {LRA_AUTOON,4,lra_alert_data};
roysandberg 0:8c0ecbdd3449 95
roysandberg 0:8c0ecbdd3449 96 const unsigned char lra_rampup_data[] = {
roysandberg 0:8c0ecbdd3449 97 0xFF, 0x02,
roysandberg 0:8c0ecbdd3449 98 0x90, 0x15,
roysandberg 0:8c0ecbdd3449 99 0xA0, 0x15,
roysandberg 0:8c0ecbdd3449 100 0xB0, 0x10,
roysandberg 0:8c0ecbdd3449 101 0xD0, 0x09,
roysandberg 0:8c0ecbdd3449 102 LRA_AUTOON_MAX, 0x05,
roysandberg 0:8c0ecbdd3449 103 0x00, 0x03
roysandberg 0:8c0ecbdd3449 104 };
roysandberg 0:8c0ecbdd3449 105 const Waveform lra_rampup = {LRA_AUTOON,14,lra_rampup_data};
roysandberg 0:8c0ecbdd3449 106
roysandberg 0:8c0ecbdd3449 107 const unsigned char lra_rampdown_data[] = {
roysandberg 0:8c0ecbdd3449 108 LRA_AUTOON_MAX, 0x06,
roysandberg 0:8c0ecbdd3449 109 0xD0, 0x09,
roysandberg 0:8c0ecbdd3449 110 0xB0, 0x10,
roysandberg 0:8c0ecbdd3449 111 0xA0, 0x15,
roysandberg 0:8c0ecbdd3449 112 0x90, 0x15,
roysandberg 0:8c0ecbdd3449 113 0x00, 0x08
roysandberg 0:8c0ecbdd3449 114 };
roysandberg 0:8c0ecbdd3449 115 const Waveform lra_rampdown = {LRA_AUTOON,12,lra_rampdown_data};
roysandberg 0:8c0ecbdd3449 116
roysandberg 5:c9d71618070d 117 // reward pattern is ramp up plus 2 staccato buzzes
roysandberg 5:c9d71618070d 118 const unsigned char lra_reward_pattern_data[] = {
roysandberg 5:c9d71618070d 119 0xFF, 0x02, // ramp up
roysandberg 5:c9d71618070d 120 0x90, 0x15,
roysandberg 5:c9d71618070d 121 0xA0, 0x15,
roysandberg 5:c9d71618070d 122 0xB0, 0x10,
roysandberg 5:c9d71618070d 123 0xD0, 0x09,
roysandberg 5:c9d71618070d 124 LRA_AUTOON_MAX, 0x05,
roysandberg 5:c9d71618070d 125 0x00, 0x03,
roysandberg 5:c9d71618070d 126 LRA_AUTOON_MAX, 0x0D, // click
roysandberg 5:c9d71618070d 127 0x80, 0x09,
roysandberg 5:c9d71618070d 128 LRA_AUTOON_MAX, 0x0D, // click
roysandberg 5:c9d71618070d 129 0x80, 0x09
roysandberg 5:c9d71618070d 130 };
roysandberg 5:c9d71618070d 131 const Waveform lra_reward_pattern = {LRA_AUTOON,22,lra_reward_pattern_data};
roysandberg 5:c9d71618070d 132
roysandberg 5:c9d71618070d 133
roysandberg 5:c9d71618070d 134
roysandberg 0:8c0ecbdd3449 135 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 136 //LRA Standard Effects in Dumb Mode
roysandberg 0:8c0ecbdd3449 137 //Note: Using ERM mode to emulate dumb drive, so it must be scaled for 2Vrms
roysandberg 0:8c0ecbdd3449 138 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 139 const unsigned char lra_click_dumb_data[] = {
roysandberg 0:8c0ecbdd3449 140 LRA_AUTOOFF_MAX, 0x0C,
roysandberg 0:8c0ecbdd3449 141 0x1A, 0x09};
roysandberg 0:8c0ecbdd3449 142 const Waveform lra_click_dumb = {LRA_AUTOOFF, 4,lra_click_dumb_data};
roysandberg 0:8c0ecbdd3449 143
roysandberg 0:8c0ecbdd3449 144 const unsigned char lra_click_nobrake_dumb_data[] = {
roysandberg 0:8c0ecbdd3449 145 LRA_AUTOOFF_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 146 0x80, 0x09};
roysandberg 0:8c0ecbdd3449 147 const Waveform lra_click_nobrake_dumb = {LRA_AUTOOFF,4,lra_click_nobrake_dumb_data};
roysandberg 0:8c0ecbdd3449 148
roysandberg 0:8c0ecbdd3449 149 const unsigned char lra_doubleclick_dumb_data[] = {
roysandberg 0:8c0ecbdd3449 150 LRA_AUTOOFF_MAX, 0x0C,
roysandberg 0:8c0ecbdd3449 151 0x1A, 0x09,
roysandberg 0:8c0ecbdd3449 152 LRA_AUTOOFF_MAX, 0x0C,
roysandberg 0:8c0ecbdd3449 153 0x1A, 0x09};
roysandberg 0:8c0ecbdd3449 154 const Waveform lra_doubleclick_dumb = {LRA_AUTOOFF,8,lra_doubleclick_dumb_data};
roysandberg 0:8c0ecbdd3449 155
roysandberg 0:8c0ecbdd3449 156 const unsigned char lra_doubleclick_nobrake_dumb_data[] = {
roysandberg 0:8c0ecbdd3449 157 LRA_AUTOOFF_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 158 0x80, 0x09,
roysandberg 0:8c0ecbdd3449 159 LRA_AUTOOFF_MAX, 0x0D,
roysandberg 0:8c0ecbdd3449 160 0x80, 0x09};
roysandberg 0:8c0ecbdd3449 161 const Waveform lra_doubleclick_nobrake_dumb = {LRA_AUTOOFF,8,lra_doubleclick_nobrake_dumb_data};
roysandberg 0:8c0ecbdd3449 162
roysandberg 0:8c0ecbdd3449 163 const unsigned char lra_alert_dumb_data[] = {
roysandberg 0:8c0ecbdd3449 164 LRA_AUTOOFF_MAX, 0x05,
roysandberg 0:8c0ecbdd3449 165 LRA_AUTOOFF_MAX, 0x80};
roysandberg 0:8c0ecbdd3449 166 const Waveform lra_alert_dumb = {LRA_AUTOOFF,4,lra_alert_dumb_data};
roysandberg 0:8c0ecbdd3449 167
roysandberg 0:8c0ecbdd3449 168 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 169 //ERM Standard Effects
roysandberg 0:8c0ecbdd3449 170 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 171 const unsigned char erm_click_data[] = {
roysandberg 0:8c0ecbdd3449 172 0xFF, 0x07,
roysandberg 0:8c0ecbdd3449 173 0x00, 0x04};
roysandberg 0:8c0ecbdd3449 174 const Waveform erm_click = {ERM,4,erm_click_data};
roysandberg 0:8c0ecbdd3449 175
roysandberg 0:8c0ecbdd3449 176 const unsigned char erm_bump_data[] = {
roysandberg 0:8c0ecbdd3449 177 0xFF, 0x05,
roysandberg 0:8c0ecbdd3449 178 0xB4, 0x07};
roysandberg 0:8c0ecbdd3449 179 const Waveform erm_bump = {ERM,4,erm_bump_data};
roysandberg 0:8c0ecbdd3449 180
roysandberg 0:8c0ecbdd3449 181 const unsigned char erm_doubleclick_data[] = {
roysandberg 0:8c0ecbdd3449 182 0xFF, 0x06,
roysandberg 0:8c0ecbdd3449 183 0xB4, 0x03,
roysandberg 0:8c0ecbdd3449 184 0x00, 0x04,
roysandberg 0:8c0ecbdd3449 185 0x80, 0x0C,
roysandberg 0:8c0ecbdd3449 186 0xFF, 0x07,
roysandberg 0:8c0ecbdd3449 187 0xB4, 0x03,
roysandberg 0:8c0ecbdd3449 188 0x00, 0x05};
roysandberg 0:8c0ecbdd3449 189 const Waveform erm_doubleclick = {ERM,14,erm_doubleclick_data};
roysandberg 0:8c0ecbdd3449 190
roysandberg 0:8c0ecbdd3449 191 const unsigned char erm_doublebump_data[] = {
roysandberg 0:8c0ecbdd3449 192 0xFF, 0x05,
roysandberg 0:8c0ecbdd3449 193 0xB4, 0x08,
roysandberg 0:8c0ecbdd3449 194 0x80, 0x0C,
roysandberg 0:8c0ecbdd3449 195 0xFF, 0x05,
roysandberg 0:8c0ecbdd3449 196 0xB4, 0x08};
roysandberg 0:8c0ecbdd3449 197 const Waveform erm_doublebump = {ERM,10,erm_doublebump_data};
roysandberg 0:8c0ecbdd3449 198
roysandberg 0:8c0ecbdd3449 199 const unsigned char erm_alert_data[] = {
roysandberg 0:8c0ecbdd3449 200 0xFF, 0x03,
roysandberg 0:8c0ecbdd3449 201 0xB4, 0x60};
roysandberg 0:8c0ecbdd3449 202 const Waveform erm_alert = {ERM,4,erm_alert_data};
roysandberg 0:8c0ecbdd3449 203
roysandberg 0:8c0ecbdd3449 204 const unsigned char erm_rampup_data[] = {
roysandberg 0:8c0ecbdd3449 205 0x90, 0x15,
roysandberg 0:8c0ecbdd3449 206 0xA0, 0x15,
roysandberg 0:8c0ecbdd3449 207 0xB0, 0x09,
roysandberg 0:8c0ecbdd3449 208 0xC0, 0x05,
roysandberg 0:8c0ecbdd3449 209 0xFF, 0x04,
roysandberg 0:8c0ecbdd3449 210 0x00, 0x04
roysandberg 0:8c0ecbdd3449 211 };
roysandberg 0:8c0ecbdd3449 212 const Waveform erm_rampup = {ERM,12,erm_rampup_data};
roysandberg 0:8c0ecbdd3449 213
roysandberg 0:8c0ecbdd3449 214 const unsigned char erm_rampdown_data[] = {
roysandberg 0:8c0ecbdd3449 215 0xFF, 0x04,
roysandberg 0:8c0ecbdd3449 216 0xC0, 0x09,
roysandberg 0:8c0ecbdd3449 217 0xB0, 0x10,
roysandberg 0:8c0ecbdd3449 218 0xA0, 0x15,
roysandberg 0:8c0ecbdd3449 219 0x90, 0x15,
roysandberg 0:8c0ecbdd3449 220 0x00, 0x02
roysandberg 0:8c0ecbdd3449 221 };
roysandberg 0:8c0ecbdd3449 222 const Waveform erm_rampdown = {ERM,12,erm_rampdown_data};
roysandberg 0:8c0ecbdd3449 223
roysandberg 0:8c0ecbdd3449 224 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 225 //Subtle LRA Effects
roysandberg 0:8c0ecbdd3449 226 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 227 const unsigned char lra_tick_data[] = {
roysandberg 0:8c0ecbdd3449 228 0xFF, 0x02,
roysandberg 0:8c0ecbdd3449 229 0x00, 0x02};
roysandberg 0:8c0ecbdd3449 230 const Waveform lra_tick = {LRA_AUTOON,4,lra_tick_data};
roysandberg 0:8c0ecbdd3449 231
roysandberg 0:8c0ecbdd3449 232 const unsigned char lra_softclick_data[] = {
roysandberg 0:8c0ecbdd3449 233 0xC0, 0x06,
roysandberg 0:8c0ecbdd3449 234 0x00, 0x07};
roysandberg 0:8c0ecbdd3449 235 const Waveform lra_softclick = {LRA_AUTOON,4,lra_softclick_data};
roysandberg 0:8c0ecbdd3449 236
roysandberg 0:8c0ecbdd3449 237 const unsigned char lra_softbump_data[] = {
roysandberg 0:8c0ecbdd3449 238 0xC0, 0x05,
roysandberg 0:8c0ecbdd3449 239 0xA0, 0x07};
roysandberg 0:8c0ecbdd3449 240 const Waveform lra_softbump = {LRA_AUTOON,4,lra_softbump_data};
roysandberg 0:8c0ecbdd3449 241
roysandberg 0:8c0ecbdd3449 242 const unsigned char lra_softalert_data[] = {
roysandberg 0:8c0ecbdd3449 243 0xB0, 0x80};
roysandberg 0:8c0ecbdd3449 244 const Waveform lra_softalert = {LRA_AUTOON,2,lra_softalert_data};
roysandberg 0:8c0ecbdd3449 245
roysandberg 0:8c0ecbdd3449 246 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 247 // Simon LRA Effects
roysandberg 0:8c0ecbdd3449 248 //--------------------------------------------------------//
roysandberg 0:8c0ecbdd3449 249 const unsigned char lra_rampupdoubleclick_data[] = {
roysandberg 0:8c0ecbdd3449 250 LRA_AUTOON_MAX, 0x02,
roysandberg 0:8c0ecbdd3449 251 0x90, 0x40,
roysandberg 0:8c0ecbdd3449 252 0xA0, 0x40,
roysandberg 0:8c0ecbdd3449 253 0xB0, 0x30,
roysandberg 0:8c0ecbdd3449 254 0xD0, 0x20,
roysandberg 0:8c0ecbdd3449 255 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 256 LRA_AUTOON_MAX, 0x08,
roysandberg 0:8c0ecbdd3449 257 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 258 LRA_AUTOON_MAX, 0x09,
roysandberg 0:8c0ecbdd3449 259 0x00, 0x09
roysandberg 0:8c0ecbdd3449 260 };
roysandberg 0:8c0ecbdd3449 261 const Waveform lra_rampupdoubleclick = {LRA_AUTOON,20,lra_rampupdoubleclick_data};
roysandberg 0:8c0ecbdd3449 262
roysandberg 0:8c0ecbdd3449 263 const unsigned char lra_threeclicks_data[] = {
roysandberg 0:8c0ecbdd3449 264 LRA_AUTOON_MAX, 0x02,
roysandberg 0:8c0ecbdd3449 265 0x90, 0x0C,
roysandberg 0:8c0ecbdd3449 266 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 267 0xD0, 0x0C,
roysandberg 0:8c0ecbdd3449 268 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 269 LRA_AUTOON_MAX, 0x0F,
roysandberg 0:8c0ecbdd3449 270 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 271 LRA_AUTOON_MAX, 0x0C,
roysandberg 0:8c0ecbdd3449 272 0x00, 0x09,
roysandberg 0:8c0ecbdd3449 273 LRA_AUTOON_MAX, 0x0C,
roysandberg 0:8c0ecbdd3449 274 0x00, 0x09
roysandberg 0:8c0ecbdd3449 275 };
roysandberg 0:8c0ecbdd3449 276 const Waveform lra_threeclicks = {LRA_AUTOON,22,lra_threeclicks_data};