Mirror with some correction
Dependencies: mbed FastIO FastPWM USBDevice
Updates.h@40:cc0d9814522b, 2016-02-03 (annotated)
- Committer:
- mjr
- Date:
- Wed Feb 03 22:57:25 2016 +0000
- Revision:
- 40:cc0d9814522b
- Parent:
- 39:b3815a1c3802
- Child:
- 56:195d891653c6
Gamma correction option for outputs; work in progress on new config program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mjr | 35:e959ffba78fd | 1 | // UPDATES |
mjr | 35:e959ffba78fd | 2 | // |
mjr | 35:e959ffba78fd | 3 | // This is a record of new features and changes in recent versions. |
mjr | 35:e959ffba78fd | 4 | // |
mjr | 35:e959ffba78fd | 5 | |
mjr | 35:e959ffba78fd | 6 | // January 2016 |
mjr | 35:e959ffba78fd | 7 | // |
mjr | 35:e959ffba78fd | 8 | // Dynamic configuration: all configuration options are now handled dynamically, |
mjr | 35:e959ffba78fd | 9 | // through the Windows config tool. In earlier versions, most configuration options |
mjr | 35:e959ffba78fd | 10 | // were set through compile-time constants, which made it necessary for everyone |
mjr | 35:e959ffba78fd | 11 | // who wanted to customize anything to create a private branched version of the |
mjr | 35:e959ffba78fd | 12 | // source repository, edit the source code, and compile their own binary. This |
mjr | 35:e959ffba78fd | 13 | // was cumbersome, and required way too much technical knowledge to be worth the |
mjr | 35:e959ffba78fd | 14 | // trouble to a lot of people. The goal of the new approach is that everyone can |
mjr | 35:e959ffba78fd | 15 | // use the same standard binary build, and set options from the Windows tool. |
mjr | 35:e959ffba78fd | 16 | // |
mjr | 35:e959ffba78fd | 17 | // TSL1410R and 1412R parallel mode support: these sensors are physically built |
mjr | 35:e959ffba78fd | 18 | // out of two separate pixel arrays, which can be read independently. Past |
mjr | 35:e959ffba78fd | 19 | // versions only supported "serial" mode pixel transfer, where we read all of |
mjr | 35:e959ffba78fd | 20 | // the first array's pixels before reading any of the second array's pixels. |
mjr | 35:e959ffba78fd | 21 | // In parallel mode, we can read pixels from both arrays at the same time. The |
mjr | 35:e959ffba78fd | 22 | // limiting factor in image read speed is the amount of time it takes for the |
mjr | 35:e959ffba78fd | 23 | // ADC to transfer charge from a pixel and stabilize on a reading. The KL25Z |
mjr | 35:e959ffba78fd | 24 | // has multiple ADC hardware channels, so we can read multiple analog values |
mjr | 35:e959ffba78fd | 25 | // concurrently - it takes the same amount of time for one ADC reading to |
mjr | 35:e959ffba78fd | 26 | // stabilize as two readings. So by reading from the two sensor sections |
mjr | 35:e959ffba78fd | 27 | // concurrently, we can essentially double the transfer speed. Faster pixel |
mjr | 35:e959ffba78fd | 28 | // transfer allows for more accurate motion tracking when the plunger is |
mjr | 35:e959ffba78fd | 29 | // moving at high speed, allowing for more realistic plunger action on the |
mjr | 35:e959ffba78fd | 30 | // virtual side. |
mjr | 35:e959ffba78fd | 31 | // |
mjr | 39:b3815a1c3802 | 32 | // Keyboard mappings for buttons: button inputs can now be mapped to keyboard |
mjr | 39:b3815a1c3802 | 33 | // keys. Joystick buttons are of course also still supported. Some software on |
mjr | 39:b3815a1c3802 | 34 | // the PC side is easier to configure for keyboard input than for joystick |
mjr | 39:b3815a1c3802 | 35 | // input, so many users might prefer to map some or all buttons to keys. If |
mjr | 39:b3815a1c3802 | 36 | // you map any buttons to keyboard input, the controller device will have |
mjr | 39:b3815a1c3802 | 37 | // two entries in the Windows Device Manager list, one as a joystick and |
mjr | 39:b3815a1c3802 | 38 | // the other as a keyboard. This is automatic; the keyboard interface will |
mjr | 39:b3815a1c3802 | 39 | // appear automatically if you have any keyboard keys mapped, otherwise only |
mjr | 39:b3815a1c3802 | 40 | // the joystick interface will appear. |
mjr | 39:b3815a1c3802 | 41 | // |
mjr | 39:b3815a1c3802 | 42 | // "Pulse" buttons: you can now designate individual button inputs as pulse |
mjr | 39:b3815a1c3802 | 43 | // mode buttons. When a button is configured in pulse mode, the software |
mjr | 39:b3815a1c3802 | 44 | // translates each ON/OFF or OFF/ON transition in the physical switch to a |
mjr | 39:b3815a1c3802 | 45 | // short virtual key press. This is especially designed to make it easier |
mjr | 39:b3815a1c3802 | 46 | // to wire a coin door switch, but could be used for other purposes as well. |
mjr | 39:b3815a1c3802 | 47 | // For the coin door, the VPinMAME software uses the End key to *toggle* the |
mjr | 39:b3815a1c3802 | 48 | // open/closed state of the door in the simulation, but it's much easier |
mjr | 39:b3815a1c3802 | 49 | // to wire a physical on/off switch to the door instead. Pulse mode bridges |
mjr | 39:b3815a1c3802 | 50 | // this gap by translating the on/off switch state to key presses. When |
mjr | 39:b3815a1c3802 | 51 | // you open the door, the switch will go from OFF to ON, so the controller |
mjr | 39:b3815a1c3802 | 52 | // will send one short key press, causing VPinMAME to toggle the simulated |
mjr | 39:b3815a1c3802 | 53 | // door to OPEN. When you close the door, the switch will go from ON to |
mjr | 39:b3815a1c3802 | 54 | // OFF, which will make the controller send another short key press, which |
mjr | 39:b3815a1c3802 | 55 | // in turn will make VPinMAME toggle the simulated door state to CLOSED. |
mjr | 39:b3815a1c3802 | 56 | // There are other ways to solve this problem (VP cab builders have come |
mjr | 39:b3815a1c3802 | 57 | // up with various physical devices and electronic timer circuits to deal |
mjr | 39:b3815a1c3802 | 58 | // with it), but the software approach implemented here is a lot simpler |
mjr | 39:b3815a1c3802 | 59 | // to set up and is very reliable. |
mjr | 39:b3815a1c3802 | 60 | // |
mjr | 39:b3815a1c3802 | 61 | // Night mode: you can now put the device in "night mode" by configuring a |
mjr | 39:b3815a1c3802 | 62 | // physical button input to activate the mode, or by sending a command from |
mjr | 39:b3815a1c3802 | 63 | // the PC config tool software. When night mode is activated, outputs that |
mjr | 39:b3815a1c3802 | 64 | // you designate as "noisemaker" devices are disabled. You can designate |
mjr | 39:b3815a1c3802 | 65 | // any outputs as noisy or not. This feature is designed to let you use your |
mjr | 39:b3815a1c3802 | 66 | // virtual pinball machine during quiet hours (e.g., late at night) without |
mjr | 39:b3815a1c3802 | 67 | // disturbing housemates or neighbors with noise from flippers, knockers, |
mjr | 39:b3815a1c3802 | 68 | // shaker motors, and so on. You can designate outputs individually as |
mjr | 39:b3815a1c3802 | 69 | // noisy, so you can still enjoy the rest of your feedback features during |
mjr | 39:b3815a1c3802 | 70 | // night play (e.g., flashers and other lighting effects). |
mjr | 39:b3815a1c3802 | 71 | // |
mjr | 40:cc0d9814522b | 72 | // Gamma correction: each output can now optionally have gamma correction |
mjr | 40:cc0d9814522b | 73 | // applied. This can be set in the configuration individually for each |
mjr | 40:cc0d9814522b | 74 | // output attached to an LED or lamp. Gamma correction translates the |
mjr | 40:cc0d9814522b | 75 | // computer's idea of linear brightness to the human eye's logarithmic |
mjr | 40:cc0d9814522b | 76 | // brightness curve, which makes make the perceived brightness level of a |
mjr | 40:cc0d9814522b | 77 | // lamp more linear. This can greatly improve the appearance of fading |
mjr | 40:cc0d9814522b | 78 | // effects and the fidelity of color mixing in RGB devices. Without gamma |
mjr | 40:cc0d9814522b | 79 | // correction, fades tend to saturate on the bright end of the scale, and |
mjr | 40:cc0d9814522b | 80 | // mixed colors tend to look washed out. |
mjr | 40:cc0d9814522b | 81 | // |
mjr | 39:b3815a1c3802 | 82 | // USB fixes: the low-level USB device code had some serious bugs that only |
mjr | 39:b3815a1c3802 | 83 | // very occasionally manifested in past versions, but became much more |
mjr | 39:b3815a1c3802 | 84 | // frequently triggered due to other changes in this release (particularly |
mjr | 39:b3815a1c3802 | 85 | // the USB keyboard input feature). These should now be fixed, so the USB |
mjr | 39:b3815a1c3802 | 86 | // connection should now be very reliable. |
mjr | 39:b3815a1c3802 | 87 | // |