Mirror with some correction

Dependencies:   mbed FastIO FastPWM USBDevice

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?

UserRevisionLine numberNew 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 //