274 lines
8.9 KiB
C#
274 lines
8.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace InpOut32.Net
|
|
{
|
|
public partial class CSharpExample : Form
|
|
{
|
|
|
|
[DllImport("inpout32.dll")]
|
|
private static extern UInt32 IsInpOutDriverOpen();
|
|
[DllImport("inpout32.dll")]
|
|
private static extern void Out32(short PortAddress, short Data);
|
|
[DllImport("inpout32.dll")]
|
|
private static extern char Inp32(short PortAddress);
|
|
|
|
[DllImport("inpout32.dll")]
|
|
private static extern void DlPortWritePortUshort(short PortAddress, ushort Data);
|
|
[DllImport("inpout32.dll")]
|
|
private static extern ushort DlPortReadPortUshort(short PortAddress);
|
|
|
|
[DllImport("inpout32.dll")]
|
|
private static extern void DlPortWritePortUlong(int PortAddress, uint Data);
|
|
[DllImport("inpout32.dll")]
|
|
private static extern uint DlPortReadPortUlong(int PortAddress);
|
|
|
|
[DllImport("inpoutx64.dll")]
|
|
private static extern bool GetPhysLong(ref int PortAddress, ref uint Data);
|
|
[DllImport("inpoutx64.dll")]
|
|
private static extern bool SetPhysLong(ref int PortAddress, ref uint Data);
|
|
|
|
|
|
[DllImport("inpoutx64.dll", EntryPoint="IsInpOutDriverOpen")]
|
|
private static extern UInt32 IsInpOutDriverOpen_x64();
|
|
[DllImport("inpoutx64.dll", EntryPoint = "Out32")]
|
|
private static extern void Out32_x64(short PortAddress, short Data);
|
|
[DllImport("inpoutx64.dll", EntryPoint = "Inp32")]
|
|
private static extern char Inp32_x64(short PortAddress);
|
|
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")]
|
|
private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data);
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")]
|
|
private static extern ushort DlPortReadPortUshort_x64(short PortAddress);
|
|
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")]
|
|
private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data);
|
|
[DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")]
|
|
private static extern uint DlPortReadPortUlong_x64(int PortAddress);
|
|
|
|
[DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")]
|
|
private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data);
|
|
[DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")]
|
|
private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data);
|
|
|
|
|
|
bool m_bX64 = false;
|
|
|
|
public CSharpExample()
|
|
{
|
|
InitializeComponent();
|
|
try
|
|
{
|
|
uint nResult = 0;
|
|
try
|
|
{
|
|
nResult = IsInpOutDriverOpen();
|
|
}
|
|
catch (BadImageFormatException)
|
|
{
|
|
nResult = IsInpOutDriverOpen_x64();
|
|
if (nResult != 0)
|
|
m_bX64 = true;
|
|
|
|
}
|
|
|
|
if (nResult == 0)
|
|
{
|
|
lblMessage.Text = "Unable to open InpOut32 driver";
|
|
button1.Enabled = false;
|
|
button2.Enabled = false;
|
|
button3.Enabled = false;
|
|
button4.Enabled = false;
|
|
button5.Enabled = false;
|
|
button6.Enabled = false;
|
|
button7.Enabled = false;
|
|
}
|
|
}
|
|
catch (DllNotFoundException ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine(ex.ToString());
|
|
lblMessage.Text = "Unable to find InpOut32.dll";
|
|
button1.Enabled = false;
|
|
button2.Enabled = false;
|
|
button3.Enabled = false;
|
|
button4.Enabled = false;
|
|
button5.Enabled = false;
|
|
button6.Enabled = false;
|
|
button7.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
short iPort = Convert.ToInt16(textBox1.Text);
|
|
|
|
char c;
|
|
if (m_bX64)
|
|
c = Inp32_x64(iPort);
|
|
else
|
|
c = Inp32(iPort);
|
|
|
|
textBox2.Text = Convert.ToInt32(c).ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
short iPort = Convert.ToInt16(textBox1.Text);
|
|
short iData = Convert.ToInt16(textBox2.Text);
|
|
textBox2.Text = "";
|
|
if (m_bX64)
|
|
Out32_x64(iPort, iData);
|
|
else
|
|
Out32(iPort, iData);
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void button3_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
short iPort = Convert.ToInt16(textBox1.Text);
|
|
ushort s;
|
|
if (m_bX64)
|
|
s = DlPortReadPortUshort_x64(iPort);
|
|
else
|
|
s = DlPortReadPortUshort(iPort);
|
|
|
|
textBox2.Text = Convert.ToUInt16(s).ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void button4_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int nPort = Convert.ToInt32(textBox1.Text);
|
|
|
|
uint l;
|
|
if (m_bX64)
|
|
l = DlPortReadPortUlong_x64(nPort);
|
|
else
|
|
l = DlPortReadPortUlong(nPort);
|
|
|
|
textBox2.Text = l.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void button5_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
short sPort = Convert.ToInt16(textBox1.Text);
|
|
ushort iData = Convert.ToUInt16(textBox2.Text);
|
|
textBox2.Text = "";
|
|
|
|
if (m_bX64)
|
|
DlPortWritePortUshort_x64(sPort, iData);
|
|
else
|
|
DlPortWritePortUshort(sPort, iData);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void button6_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int nPort = Convert.ToInt32(textBox1.Text);
|
|
uint nData = Convert.ToUInt32(textBox2.Text);
|
|
textBox2.Text = "";
|
|
if (m_bX64)
|
|
DlPortWritePortUlong_x64(nPort, nData);
|
|
else
|
|
DlPortWritePortUlong(nPort, nData);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("An error occured:\n" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void Beep(uint freq)
|
|
{
|
|
if (m_bX64)
|
|
{
|
|
Out32_x64(0x43, 0xB6);
|
|
Out32_x64(0x42, (byte)(freq & 0xFF));
|
|
Out32_x64(0x42, (byte)(freq >> 9));
|
|
System.Threading.Thread.Sleep(10);
|
|
Out32_x64(0x61, (byte)(Convert.ToByte(Inp32_x64(0x61)) | 0x03));
|
|
}
|
|
else
|
|
{
|
|
Out32(0x43, 0xB6);
|
|
Out32(0x42, (byte)(freq & 0xFF));
|
|
Out32(0x42, (byte)(freq >> 9));
|
|
System.Threading.Thread.Sleep(10);
|
|
Out32(0x61, (byte)(Convert.ToByte(Inp32(0x61)) | 0x03));
|
|
}
|
|
}
|
|
|
|
private void StopBeep()
|
|
{
|
|
if (m_bX64)
|
|
Out32_x64(0x61, (byte)(Convert.ToByte(Inp32_x64(0x61)) & 0xFC));
|
|
else
|
|
Out32(0x61, (byte)(Convert.ToByte(Inp32(0x61)) & 0xFC));
|
|
}
|
|
|
|
private void CSharpExample_Load(object sender, EventArgs e)
|
|
{
|
|
button7_Click(this, null);
|
|
}
|
|
|
|
|
|
private void ThreadBeeper()
|
|
{
|
|
for (uint i = 440000; i < 500000; i += 1000)
|
|
{
|
|
uint freq = 1193180000 / i; // 440Hz
|
|
Beep(freq);
|
|
}
|
|
StopBeep();
|
|
}
|
|
|
|
private void button7_Click(object sender, EventArgs e)
|
|
{
|
|
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadBeeper));
|
|
t.Start();
|
|
}
|
|
}
|
|
} |