Rev 147 | Rev 153 | Go to most recent revision | 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 LibUsbDotNet;
using LibUsbDotNet.Main;
using LibUsbDotNet.DeviceNotify;
namespace NITNavComm {
public class NITNavCommDevice : NITDevice {
enum UsbCommands : byte {
CMD_LATCH_DISPLAY = 20,
CMD_SET_DISPLAY0 = 21
};
private byte[,] display { get; set; }
private byte[] buttons {get; set; }
private sbyte[,] rotary;
public NITNavCommDevice(NITDevice nitDevice) :
base(nitDevice.usbRegistry, "NITNavComm", nitDevice.vid, nitDevice.pid) {
init();
}
public NITNavCommDevice(UsbRegistry usbRegistry, string type, int vid, int pid) :
base(usbRegistry, "NITNavComm", 0x20a0, 0x4236) {
init();
}
private void init()
{
this.display = new byte[2, 10];
for (byte j = 0; j < 2; j++)
for (byte i = 0; i < 10; i++)
this.display[j, i] = 0x0a;
this.buttons = new byte[2];
this.buttons[0] = 0x00;
this.buttons[1] = 0x00;
this.rotary = new sbyte[2, 2];
this.rotary[0, 0] = 0x00;
this.rotary[0, 1] = 0x00;
this.rotary[1, 0] = 0x00;
this.rotary[1, 1] = 0x00;
}
new public bool Close() {
byte[] blank = { 0x0a, 0x0a, 0x0a, 0x0a, 0x0a };
for (byte i = 0; i < 4; i++)
setFreq(i, ref blank);
this.updateDisplay();
return base.Close();
}
public byte[] getFreq(byte freq) {
byte[] ret = new byte[5];
switch (freq) {
case 0:
for (byte i = 0; i < 5; i++)
ret[i] = display[0, i];
break;
case 1:
for (byte i = 0; i < 5; i++)
ret[i] = display[0, i + 5];
break;
case 2:
for (byte i = 0; i < 5; i++)
ret[i] = display[1, i];
break;
case 3:
for (byte i = 0; i < 5; i++)
ret[i] = display[1, i + 5];
break;
}
return ret;
}
public void setFreq(byte freq, ref byte[] data) {
switch (freq) {
case 0:
for (byte i = 0; i < 5; i++)
display[0, i] = data[i];
break;
case 1:
for (byte i = 0; i < 5; i++)
display[0, i+5] = data[i];
break;
case 2:
for (byte i = 0; i < 5; i++)
display[1, i] = data[i];
break;
case 3:
for (byte i = 0; i < 5; i++)
display[1, i + 5] = data[i];
break;
}
}
private void sendDigit(byte dis, byte dig, byte val, byte dp) {
ushort wxValue = (ushort)(dis <<8);
wxValue |= dig;
ushort wxIndex = (ushort)(dp << 8);
wxIndex |= val;
base.SendCommand(21, (short)wxValue, (short)wxIndex);
}
private void sendLatch(byte dis) {
base.SendCommand(20, (short)dis, 0);
}
public void updateInput() {
//this.updateInput(0);
//this.updateInput(1);
byte[] data = new byte[8];
int transferred;
base.SendCommand(30, 0, 0, data, out transferred);
this.buttons[0] = data[0];
this.rotary[0, 0] += (sbyte)data[1];
this.buttons[1] = data[2];
this.rotary[1, 0] += (sbyte)data[3];
}
public bool isSwapSet(byte dis) {
if ((this.buttons[dis] & 0x01)>0)
return true;
return false;
}
public bool isFlipSet(byte dis) {
if ((this.buttons[dis] & 0x02) > 0)
return true;
return false;
}
public sbyte getRotary(byte dis, byte rotary) {
return this.rotary[dis, rotary];
}
public void resetRotary(byte display, byte rotary) {
this.rotary[display, rotary] = 0x00;
}
public void updateDisplay() {
this.updateDisplay(0);
this.updateDisplay(1);
}
public void updateDisplay(byte dis) {
for (byte i = 0; i < 10; i++) {
this.sendDigit(dis, i, display[dis,i], 0);
}
this.sendLatch(dis);
}
public void swapFreq(byte display) {
if (display == 0) {
byte[] left = this.getFreq(0);
byte[] right = this.getFreq(1);
this.setFreq(0, ref right);
this.setFreq(1, ref left);
} else if (display == 1) {
byte[] left = this.getFreq(2);
byte[] right = this.getFreq(3);
this.setFreq(2, ref right);
this.setFreq(3, ref left);
}
}
}
}