Arnaud VALLEY / Mbed 2 deprecated Pinscape_Controller_V2_arnoz

Dependencies:   mbed FastIO FastPWM USBDevice

Committer:
mjr
Date:
Wed May 04 03:59:44 2016 +0000
Revision:
55:4db125cd11a0
Parent:
53:9b2611964afc
Child:
61:3c7e6e9ec355
More KL25Z USB client cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mjr 40:cc0d9814522b 1 // Define the configuration variable USB get/set mapper. We use
mjr 40:cc0d9814522b 2 // macros for the get/set operations to allow for common source
mjr 40:cc0d9814522b 3 // code for the two operations. main.cpp #includes this file twice:
mjr 40:cc0d9814522b 4 // once for the SET function and once for the GET function. main.cpp
mjr 40:cc0d9814522b 5 // redefines the v_xxx macros according to the current inclusion mode.
mjr 40:cc0d9814522b 6 //
mjr 40:cc0d9814522b 7 // This is a little tricky to follow because of the macros, but the
mjr 40:cc0d9814522b 8 // benefit is that the get and set functions automatically stay in
mjr 40:cc0d9814522b 9 // sync in terms of the variable types and byte mappings in the USB
mjr 40:cc0d9814522b 10 // messages, since they're both generated automatically from the
mjr 40:cc0d9814522b 11 // same code.
mjr 40:cc0d9814522b 12 //
mjr 40:cc0d9814522b 13 // The SET function is called directly from the corresponding USB
mjr 40:cc0d9814522b 14 // protocol message to set one variable. The data buffer is simply
mjr 40:cc0d9814522b 15 // the data passed in from the USB message.
mjr 40:cc0d9814522b 16 //
mjr 40:cc0d9814522b 17 // The GET function is called in a loop from our configuration
mjr 40:cc0d9814522b 18 // variable reporting function. The report function loops through
mjr 40:cc0d9814522b 19 // each variable in turn to generate a series of reports. The
mjr 40:cc0d9814522b 20 // caller in this case fills in data[1] with the variable ID, and
mjr 40:cc0d9814522b 21 // it also fills in data[2] with the current index being queried
mjr 40:cc0d9814522b 22 // for the array variables (buttons, outputs). We fill in the
mjr 40:cc0d9814522b 23 // rest of the data[] bytes with the current variable value(s),
mjr 40:cc0d9814522b 24 // encoded for the USB protocol message.
mjr 40:cc0d9814522b 25
mjr 40:cc0d9814522b 26
mjr 40:cc0d9814522b 27 void v_func(uint8_t *data)
mjr 40:cc0d9814522b 28 {
mjr 40:cc0d9814522b 29 switch (data[1])
mjr 40:cc0d9814522b 30 {
mjr 53:9b2611964afc 31 // ********** DESCRIBE CONFIGURATION VARIABLES **********
mjr 53:9b2611964afc 32 case 0:
mjr 53:9b2611964afc 33 v_byte_ro(15, 2); // number of SCALAR variables
mjr 53:9b2611964afc 34 v_byte_ro(2, 3); // number of ARRAY variables
mjr 53:9b2611964afc 35 break;
mjr 53:9b2611964afc 36
mjr 53:9b2611964afc 37 // ********** SCALAR VARIABLES **********
mjr 53:9b2611964afc 38
mjr 40:cc0d9814522b 39 case 1:
mjr 40:cc0d9814522b 40 // USB identification (Vendor ID, Product ID)
mjr 40:cc0d9814522b 41 v_ui16(usbVendorID, 2);
mjr 40:cc0d9814522b 42 v_ui16(usbProductID, 4);
mjr 40:cc0d9814522b 43 break;
mjr 40:cc0d9814522b 44
mjr 40:cc0d9814522b 45 case 2:
mjr 40:cc0d9814522b 46 // Pinscape Controller unit number (nominal unit number, 1-16)
mjr 40:cc0d9814522b 47 if_msg_valid(data[2] >= 1 && data[2] <= 16)
mjr 40:cc0d9814522b 48 v_byte(psUnitNo, 2);
mjr 40:cc0d9814522b 49 break;
mjr 40:cc0d9814522b 50
mjr 40:cc0d9814522b 51 case 3:
mjr 40:cc0d9814522b 52 // Enable/disable joystick
mjr 40:cc0d9814522b 53 v_byte(joystickEnabled, 2);
mjr 40:cc0d9814522b 54 break;
mjr 40:cc0d9814522b 55
mjr 40:cc0d9814522b 56 case 4:
mjr 40:cc0d9814522b 57 // Accelerometer orientation
mjr 40:cc0d9814522b 58 v_byte(orientation, 2);
mjr 40:cc0d9814522b 59 break;
mjr 40:cc0d9814522b 60
mjr 40:cc0d9814522b 61 case 5:
mjr 40:cc0d9814522b 62 // Plunger sensor type
mjr 40:cc0d9814522b 63 v_byte(plunger.sensorType, 2);
mjr 40:cc0d9814522b 64 break;
mjr 40:cc0d9814522b 65
mjr 40:cc0d9814522b 66 case 6:
mjr 40:cc0d9814522b 67 // Plunger sensor pin assignments
mjr 53:9b2611964afc 68 v_byte(plunger.sensorPin[0], 2);
mjr 53:9b2611964afc 69 v_byte(plunger.sensorPin[1], 3);
mjr 53:9b2611964afc 70 v_byte(plunger.sensorPin[2], 4);
mjr 53:9b2611964afc 71 v_byte(plunger.sensorPin[3], 5);
mjr 40:cc0d9814522b 72 break;
mjr 40:cc0d9814522b 73
mjr 40:cc0d9814522b 74 case 7:
mjr 40:cc0d9814522b 75 // Plunger calibration button and indicator light pin assignments
mjr 55:4db125cd11a0 76 v_byte(plunger.cal.features, 2);
mjr 55:4db125cd11a0 77 v_byte(plunger.cal.btn, 3);
mjr 55:4db125cd11a0 78 v_byte(plunger.cal.led, 4);
mjr 40:cc0d9814522b 79 break;
mjr 40:cc0d9814522b 80
mjr 40:cc0d9814522b 81 case 8:
mjr 40:cc0d9814522b 82 // ZB Launch Ball setup
mjr 40:cc0d9814522b 83 v_byte(plunger.zbLaunchBall.port, 2);
mjr 53:9b2611964afc 84 v_byte(plunger.zbLaunchBall.keytype, 3);
mjr 53:9b2611964afc 85 v_byte(plunger.zbLaunchBall.keycode, 4);
mjr 53:9b2611964afc 86 v_ui16(plunger.zbLaunchBall.pushDistance, 5);
mjr 40:cc0d9814522b 87 break;
mjr 40:cc0d9814522b 88
mjr 40:cc0d9814522b 89 case 9:
mjr 40:cc0d9814522b 90 // TV ON setup
mjr 53:9b2611964afc 91 v_byte(TVON.statusPin, 2);
mjr 53:9b2611964afc 92 v_byte(TVON.latchPin, 3);
mjr 53:9b2611964afc 93 v_byte(TVON.relayPin, 4);
mjr 40:cc0d9814522b 94 v_ui16(TVON.delayTime, 5);
mjr 40:cc0d9814522b 95 break;
mjr 40:cc0d9814522b 96
mjr 40:cc0d9814522b 97 case 10:
mjr 40:cc0d9814522b 98 // TLC5940NT PWM controller chip setup
mjr 40:cc0d9814522b 99 v_byte(tlc5940.nchips, 2);
mjr 53:9b2611964afc 100 v_byte(tlc5940.sin, 3);
mjr 53:9b2611964afc 101 v_byte(tlc5940.sclk, 4);
mjr 53:9b2611964afc 102 v_byte(tlc5940.xlat, 5);
mjr 53:9b2611964afc 103 v_byte(tlc5940.blank, 6);
mjr 53:9b2611964afc 104 v_byte(tlc5940.gsclk, 7);
mjr 40:cc0d9814522b 105 break;
mjr 40:cc0d9814522b 106
mjr 40:cc0d9814522b 107 case 11:
mjr 40:cc0d9814522b 108 // 74HC595 shift register chip setup
mjr 40:cc0d9814522b 109 v_byte(hc595.nchips, 2);
mjr 53:9b2611964afc 110 v_byte(hc595.sin, 3);
mjr 53:9b2611964afc 111 v_byte(hc595.sclk, 4);
mjr 53:9b2611964afc 112 v_byte(hc595.latch, 5);
mjr 53:9b2611964afc 113 v_byte(hc595.ena, 6);
mjr 40:cc0d9814522b 114 break;
mjr 40:cc0d9814522b 115
mjr 40:cc0d9814522b 116 case 12:
mjr 53:9b2611964afc 117 // Disconnect reboot timeout
mjr 53:9b2611964afc 118 v_byte(disconnectRebootTimeout, 2);
mjr 53:9b2611964afc 119 break;
mjr 53:9b2611964afc 120
mjr 53:9b2611964afc 121 case 13:
mjr 53:9b2611964afc 122 // plunger calibration
mjr 53:9b2611964afc 123 v_ui16(plunger.cal.zero, 2);
mjr 53:9b2611964afc 124 v_ui16(plunger.cal.max, 4);
mjr 53:9b2611964afc 125 v_byte(plunger.cal.tRelease, 6);
mjr 53:9b2611964afc 126 break;
mjr 53:9b2611964afc 127
mjr 53:9b2611964afc 128 case 14:
mjr 53:9b2611964afc 129 // expansion board configuration
mjr 53:9b2611964afc 130 v_byte(expan.typ, 2);
mjr 53:9b2611964afc 131 v_byte(expan.vsn, 3);
mjr 53:9b2611964afc 132 v_byte(expan.ext[0], 4);
mjr 53:9b2611964afc 133 v_byte(expan.ext[1], 5);
mjr 53:9b2611964afc 134 v_byte(expan.ext[2], 6);
mjr 53:9b2611964afc 135 break;
mjr 53:9b2611964afc 136
mjr 53:9b2611964afc 137 case 15:
mjr 53:9b2611964afc 138 // night mode configuration
mjr 53:9b2611964afc 139 v_byte(nightMode.btn, 2);
mjr 53:9b2611964afc 140 v_byte(nightMode.flags, 3);
mjr 53:9b2611964afc 141 v_byte(nightMode.port, 4);
mjr 53:9b2611964afc 142 break;
mjr 53:9b2611964afc 143
mjr 53:9b2611964afc 144
mjr 53:9b2611964afc 145 // case n: // new scalar variable
mjr 53:9b2611964afc 146 //
mjr 53:9b2611964afc 147 // ATTENTION!
mjr 53:9b2611964afc 148 // UPDATE CASE 0 ABOVE WHEN ADDING A NEW VARIABLE!!!
mjr 53:9b2611964afc 149
mjr 53:9b2611964afc 150 // ********** ARRAY VARIABLES **********
mjr 53:9b2611964afc 151
mjr 53:9b2611964afc 152 // case n: // new array variable
mjr 53:9b2611964afc 153 //
mjr 53:9b2611964afc 154 // ATTENTION!
mjr 53:9b2611964afc 155 // UPDATE CASE 0 ABOVE WHEN ADDING A NEW ARRAY VARIABLE!!!
mjr 53:9b2611964afc 156
mjr 53:9b2611964afc 157 case 254:
mjr 40:cc0d9814522b 158 // button setup
mjr 40:cc0d9814522b 159 {
mjr 40:cc0d9814522b 160 // get the button number
mjr 40:cc0d9814522b 161 int idx = data[2];
mjr 40:cc0d9814522b 162
mjr 40:cc0d9814522b 163 // if it's in range, set the button data
mjr 53:9b2611964afc 164 if (idx == 0)
mjr 53:9b2611964afc 165 {
mjr 53:9b2611964afc 166 // index 0 on query retrieves number of slots
mjr 53:9b2611964afc 167 v_byte_ro(MAX_EXT_BUTTONS, 3);
mjr 53:9b2611964afc 168 }
mjr 53:9b2611964afc 169 else if (idx > 0 && idx <= MAX_EXT_BUTTONS)
mjr 40:cc0d9814522b 170 {
mjr 40:cc0d9814522b 171 // adjust to an array index
mjr 40:cc0d9814522b 172 --idx;
mjr 40:cc0d9814522b 173
mjr 40:cc0d9814522b 174 // set the values
mjr 40:cc0d9814522b 175 v_byte(button[idx].pin, 3);
mjr 40:cc0d9814522b 176 v_byte(button[idx].typ, 4);
mjr 40:cc0d9814522b 177 v_byte(button[idx].val, 5);
mjr 40:cc0d9814522b 178 v_byte(button[idx].flags, 6);
mjr 40:cc0d9814522b 179 }
mjr 40:cc0d9814522b 180 }
mjr 40:cc0d9814522b 181 break;
mjr 40:cc0d9814522b 182
mjr 53:9b2611964afc 183 case 255:
mjr 40:cc0d9814522b 184 // LedWiz output port setup
mjr 40:cc0d9814522b 185 {
mjr 40:cc0d9814522b 186 // get the port number
mjr 40:cc0d9814522b 187 int idx = data[2];
mjr 40:cc0d9814522b 188
mjr 40:cc0d9814522b 189 // if it's in range, set the port data
mjr 53:9b2611964afc 190 if (idx == 0)
mjr 53:9b2611964afc 191 {
mjr 53:9b2611964afc 192 // index 0 on query retrieves number of slots
mjr 53:9b2611964afc 193 v_byte_ro(MAX_OUT_PORTS, 3);
mjr 53:9b2611964afc 194 }
mjr 53:9b2611964afc 195 else if (idx > 0 && idx <= MAX_OUT_PORTS)
mjr 40:cc0d9814522b 196 {
mjr 40:cc0d9814522b 197 // adjust to an array index
mjr 40:cc0d9814522b 198 --idx;
mjr 40:cc0d9814522b 199
mjr 40:cc0d9814522b 200 // set the values
mjr 40:cc0d9814522b 201 v_byte(outPort[idx].typ, 3);
mjr 40:cc0d9814522b 202 v_byte(outPort[idx].pin, 4);
mjr 40:cc0d9814522b 203 v_byte(outPort[idx].flags, 5);
mjr 40:cc0d9814522b 204 }
mjr 40:cc0d9814522b 205 }
mjr 40:cc0d9814522b 206 break;
mjr 40:cc0d9814522b 207 }
mjr 40:cc0d9814522b 208 }
mjr 40:cc0d9814522b 209