//===========================================================================//
// File:    l4keylight.h                                                     //
// Project: MUNGA           Brick: RGB keyboard lamp mirror                  //
// Contents: Windows Dynamic Lighting bridge (vRIO's KeyboardLampMirror)     //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc.                //
//                      PROPRIETARY AND CONFIDENTIAL                         //
//===========================================================================//

#pragma once

//########################################################################
// Mirrors the game-commanded RIO lamp states onto per-key RGB keyboards
// through Windows Dynamic Lighting (the WinRT LampArray API), following
// vRIO's KeyboardLampMirror: keys bound to lamp addresses glow with the
// panel palette (red for the banks, yellow for the Secondary/Screen
// columns), flash modes blink at the panel's rates, other keys are
// blacked out so the keyboard reads as the button field. Zone-lit
// keyboards mirror the strongest lamp board-wide. Dynamic Lighting
// grants LED control to the FOREGROUND app - which is the game itself,
// so no Windows settings dance is needed.
//
// The implementation is C++/WinRT on a private worker thread, compiled
// with default struct packing (the engine builds /Zp1, which would
// break the WinRT ABI) - hence this interface is scalars only. All
// functions are safe to call when Dynamic Lighting is unavailable;
// failures log once and the mirror stays dormant.
//########################################################################

// Where the mirror's status lines go (the caller owns the sink).
void
	KeyLight_SetLogger(void (*logger)(const char *line));

// The key map: parallel arrays of virtual keys, their RIO lamp
// addresses (0x00-0x47), and whether each paints yellow (Secondary /
// Screen columns) instead of red.
void
	KeyLight_SetMap(
		const int *virtual_keys,
		const int *addresses,
		const unsigned char *yellow,
		int count
	);

// Latest game-commanded lamp bytes (indexed by RIO lamp number).
void
	KeyLight_UpdateLamps(const unsigned char *lamp_state, int count);

// Claim keyboards and start painting / release the LEDs to Windows.
void
	KeyLight_Start();
void
	KeyLight_Stop();
