Subversion Repositories group.electronics

Rev

Rev 177 | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WindowsInput.Native;

namespace nitdcscore {
    public class Panel_AAP : Panel {

        private mcp23017 chip0;

        public Panel_AAP(mcp2221 mcp) : base(mcp) {
            chip0 = new mcp23017(mcp, 0x20);

            this.Init();
        }

        public override int Init() {
            this.addControl(new Switch2Pos(new CommandTrackIRKey(VirtualKeyCode.F9), 16));
            this.addControl(new Switch2Pos(new CommandTrackIRKey(VirtualKeyCode.F11), 17));
            this.addControl(new Switch2Pos(new CommandTrackIRKey(VirtualKeyCode.F7), 12));
            this.addControl(new Switch2Pos(new CommandVKey(OSInput.VirtualKeyCodes.VK_SPACE), 13));
            this.addControl(new Switch2Pos(new CommandVKey(OSInput.VirtualKeyCodes.VK_ENTER), 14));
            //this.addControl(new Switch2Pos(new CommandVKey(VirtualKeyCodes.VOLUME_MUTE), 15));
            this.addControl(new Switch2Pos(new CommandDCS("AAP_CDUPWR"), 11));
            this.addControl(new Switch2Pos(new CommandDCS("AAP_EGIPWR"), 10));
            this.addControl(new Switch3Pos(new CommandDCS("AAP_STEER"), 9, 8));
            this.addControl(new Selector(new CommandDCS("AAP_STEERPT"), new int[] {6, 5, 4 }));
            this.addControl(new Selector(new CommandDCS("AAP_PAGE"), new int[] { 0, 1, 2, 3 }));

            // Enable the mcp23017
            mcp.WriteGpio(3, 0);
            Utils.delayms(10);
            mcp.WriteGpio(3, 1);

            // Set io dir, pullups and rev polarity
            chip0.SetIODirection(0xff, 0xff);
            chip0.SetIOPolarity(0xff, 0xff);
            chip0.SetIOPullups(0xff, 0xff);

            this.Refresh();
            data.prev = data.buttons;
            data.changed = false;

            return 1;
        }
        public override int Refresh() {
            byte[] bytes;
            int rslt = 0;
            rslt = chip0.GetIO(out bytes);

            // Join all our buttons into a single inputs
            uint gpio = (uint)((1 - mcp.ReadGpio(0)) | ((1 - mcp.ReadGpio(1)) << 1));
            data.buttons = (uint)gpio << 16;
            data.buttons |= (uint)bytes[0] << 8;
            data.buttons |= (uint)bytes[1];

            if (data.buttons != data.prev)
                data.changed = true;
            else
                data.changed = false;

            return rslt;
        }

        public override int Input() {
            //Console.WriteLine(input.curr.ToString("X"));
            foreach (Control control in this.controls) {
                control.data = this.data;
                control.Tick();
            }
            data.prev = data.buttons;
            data.changed = false;
            return 1;
        }
    }
}