namespace pxsim {

    export class EV3ButtonState extends CommonButtonState {

        constructor() {
            super();
            this.buttons = [
                new CommonButton(DAL.BUTTON_ID_UP),
                new CommonButton(DAL.BUTTON_ID_ENTER),
                new CommonButton(DAL.BUTTON_ID_DOWN),
                new CommonButton(DAL.BUTTON_ID_RIGHT),
                new CommonButton(DAL.BUTTON_ID_LEFT),
                new CommonButton(DAL.BUTTON_ID_ESCAPE)
            ];
            let data = new Uint8Array(this.buttons.length)
            MMapMethods.register("/dev/lms_ui", {
                data,
                beforeMemRead: () => {
                    for (let i = 0; i < this.buttons.length; ++i)
                        data[i] = this.buttons[i].isPressed() ? 1 : 0
                },
                read: buf => {
                    let v = "vSIM"
                    for (let i = 0; i < buf.data.length; ++i)
                        buf.data[i] = v.charCodeAt(i) || 0
                    return buf.data.length
                },
                write: buf => {
                    pxsim.output.setLights(buf.data[0] - 48)
                    return 2
                }
            })
        }
    }
}