Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FastIO FastPWM USBDevice
Diff: cfgVarMsgMap.h
- Revision:
- 40:cc0d9814522b
- Child:
- 51:57eb311faafa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cfgVarMsgMap.h Wed Feb 03 22:57:25 2016 +0000 @@ -0,0 +1,156 @@ +// Define the configuration variable USB get/set mapper. We use +// macros for the get/set operations to allow for common source +// code for the two operations. main.cpp #includes this file twice: +// once for the SET function and once for the GET function. main.cpp +// redefines the v_xxx macros according to the current inclusion mode. +// +// This is a little tricky to follow because of the macros, but the +// benefit is that the get and set functions automatically stay in +// sync in terms of the variable types and byte mappings in the USB +// messages, since they're both generated automatically from the +// same code. +// +// The SET function is called directly from the corresponding USB +// protocol message to set one variable. The data buffer is simply +// the data passed in from the USB message. +// +// The GET function is called in a loop from our configuration +// variable reporting function. The report function loops through +// each variable in turn to generate a series of reports. The +// caller in this case fills in data[1] with the variable ID, and +// it also fills in data[2] with the current index being queried +// for the array variables (buttons, outputs). We fill in the +// rest of the data[] bytes with the current variable value(s), +// encoded for the USB protocol message. + + +void v_func(uint8_t *data) +{ + switch (data[1]) + { + case 1: + // USB identification (Vendor ID, Product ID) + v_ui16(usbVendorID, 2); + v_ui16(usbProductID, 4); + break; + + case 2: + // Pinscape Controller unit number (nominal unit number, 1-16) + if_msg_valid(data[2] >= 1 && data[2] <= 16) + v_byte(psUnitNo, 2); + break; + + case 3: + // Enable/disable joystick + v_byte(joystickEnabled, 2); + break; + + case 4: + // Accelerometer orientation + v_byte(orientation, 2); + break; + + case 5: + // Plunger sensor type + v_byte(plunger.sensorType, 2); + break; + + case 6: + // Plunger sensor pin assignments + v_pin(plunger.sensorPin[0], 2); + v_pin(plunger.sensorPin[1], 3); + v_pin(plunger.sensorPin[2], 4); + v_pin(plunger.sensorPin[3], 5); + break; + + case 7: + // Plunger calibration button and indicator light pin assignments + v_pin(plunger.cal.btn, 2); + v_pin(plunger.cal.led, 3); + break; + + case 8: + // ZB Launch Ball setup + v_byte(plunger.zbLaunchBall.port, 2); + v_byte(plunger.zbLaunchBall.btn, 3); + v_ui16(plunger.zbLaunchBall.pushDistance, 4); + break; + + case 9: + // TV ON setup + v_pin(TVON.statusPin, 2); + v_pin(TVON.latchPin, 3); + v_pin(TVON.relayPin, 4); + v_ui16(TVON.delayTime, 5); + break; + + case 10: + // TLC5940NT PWM controller chip setup + v_byte(tlc5940.nchips, 2); + v_pin(tlc5940.sin, 3); + v_pin(tlc5940.sclk, 4); + v_pin(tlc5940.xlat, 5); + v_pin(tlc5940.blank, 6); + v_pin(tlc5940.gsclk, 7); + break; + + case 11: + // 74HC595 shift register chip setup + v_byte(hc595.nchips, 2); + v_pin(hc595.sin, 3); + v_pin(hc595.sclk, 4); + v_pin(hc595.latch, 5); + v_pin(hc595.ena, 6); + break; + + case 12: + // button setup + { + // get the button number + int idx = data[2]; + + // if it's in range, set the button data + if (idx > 0 && idx <= MAX_BUTTONS) + { + // adjust to an array index + --idx; + + // set the values + v_byte(button[idx].pin, 3); + v_byte(button[idx].typ, 4); + v_byte(button[idx].val, 5); + v_byte(button[idx].flags, 6); + } + } + break; + + case 13: + // LedWiz output port setup + { + // get the port number + int idx = data[2]; + + // if it's in range, set the port data + if (idx > 0 && idx <= MAX_OUT_PORTS) + { + // adjust to an array index + --idx; + + // set the values + v_byte(outPort[idx].typ, 3); + v_byte(outPort[idx].pin, 4); + v_byte(outPort[idx].flags, 5); + } + else if (idx == 254) + { + // special ports + idx -= 254; + v_byte(specialPort[idx].typ, 3); + v_byte(specialPort[idx].pin, 4); + v_byte(specialPort[idx].flags, 5); + } + } + break; + } +} +