//
// csc /t:winexe /addmodule:ccusb.netmodule,w32device.netmodule swsend.cs
// or
// csc /t:winexe swsend.cs ccusb.cs /unsafe w32device.cs
//
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Threading;
public class SWSend : Form
{
static Button getbutton = new Button();
static TextBox devnam = new TextBox();
static TextBox idnam = new TextBox();
static TextBox waitarea = new TextBox();
static TextBox evntarea = new TextBox();
static TextBox dataarea = new TextBox();
static TextBox stnumber = new TextBox();
static TextBox datestrt = new TextBox();
static TextBox datearea = new TextBox();
static CCUSB ccusb = new CCUSB();
static bool runit = false;
static int numevent = 0;
static int swn = 2;
static int waittime = 0;
Thread tdate = null;
Thread tdaq = null;
public SWSend()
{
Text = "CC/7700 USB Switch Register";
Size = new Size(320, 240);
// DeviceName
Panel devline = new Panel();
devline.Dock = DockStyle.Top;
devline.Size = new Size(320, 24);
devnam.Text = @"5&27ff6fc&0&1";
devnam.Dock = DockStyle.Fill;
devnam.TabStop = true;
devnam.TabIndex = 1;
devline.Controls.Add( devnam );
TextBox devlabel = new TextBox();
devlabel.Text = @"Device Name";
devlabel.Dock = DockStyle.Left;
devlabel.ReadOnly = true;
devlabel.TabStop = false;
devline.Controls.Add( devlabel );
// Station Number
Panel stnline = new Panel();
stnline.Dock = DockStyle.Top;
stnline.Size = new Size(320, 24);
stnumber.Text = swn.ToString();
stnumber.Dock = DockStyle.Fill;
stnumber.TabStop = true;
stnumber.TabIndex = 2;
stnline.Controls.Add( stnumber );
TextBox stnlabel = new TextBox();
stnlabel.Text = @"Station Number";
stnlabel.Dock = DockStyle.Left;
stnlabel.ReadOnly = true;
stnlabel.TabStop = false;
stnline.Controls.Add( stnlabel );
// Wait (Sleep) time
Panel waitline = new Panel();
waitline.Dock = DockStyle.Top;
waitline.Size = new Size(320, 24);
waitarea.Text = waittime.ToString();
waitarea.Dock = DockStyle.Fill;
waitarea.TabStop = true;
waitarea.TabIndex = 3;
waitline.Controls.Add( waitarea );
TextBox waitlabel = new TextBox();
waitlabel.Text = @"Sleep Time(msec)";
waitlabel.Dock = DockStyle.Left;
waitlabel.ReadOnly = true;
waitlabel.TabStop = false;
waitline.Controls.Add( waitlabel );
// DeviceId
Panel idline = new Panel();
idline.Dock = DockStyle.Top;
idline.Size = new Size(320, 24);
idnam.Dock = DockStyle.Fill;
idnam.ReadOnly = true;
idnam.TabStop = false;
idline.Controls.Add( idnam );
TextBox idlabel = new TextBox();
idlabel.Text = @"Adapter ID";
idlabel.Dock = DockStyle.Left;
idlabel.ReadOnly = true;
idlabel.TabStop = false;
idline.Controls.Add( idlabel );
// Number of Events Line
Panel evntline = new Panel();
evntline.Dock = DockStyle.Top;
evntline.Size = new Size(320, 24);
evntarea.Dock = DockStyle.Fill;
evntarea.Text = numevent.ToString();
evntarea.ReadOnly = true;
evntarea.TabStop = false;
evntline.Controls.Add( evntarea );
TextBox evntlabel = new TextBox();
evntlabel.Text = @"Number of Events";
evntlabel.Dock = DockStyle.Left;
evntlabel.ReadOnly = true;
evntlabel.TabStop = false;
evntline.Controls.Add( evntlabel );
// Data Line
Panel dataline = new Panel();
dataline.Dock = DockStyle.Top;
dataline.Size = new Size(320, 24);
dataarea.Dock = DockStyle.Fill;
dataarea.ReadOnly = true;
dataarea.TabStop = false;
dataline.Controls.Add( dataarea );
TextBox datalabel = new TextBox();
datalabel.Text = @"Data";
datalabel.Dock = DockStyle.Left;
datalabel.ReadOnly = true;
datalabel.TabStop = false;
dataline.Controls.Add( datalabel );
// Start Line
Panel strline = new Panel();
strline.Dock = DockStyle.Bottom;
strline.Size = new Size(320, 24);
// Start Date
datestrt.Dock = DockStyle.Left;
datestrt.Size = new Size(160,24);
datestrt.ReadOnly = true;
datestrt.TabStop = false;
strline.Controls.Add( datestrt );
// Bottom Line
Panel btmline = new Panel();
btmline.Dock = DockStyle.Bottom;
btmline.Size = new Size(320, 24);
// Button
getbutton.Text = @"ŠJŽn";
getbutton.Dock = DockStyle.Right;
getbutton.Size = new Size(80, 24);
getbutton.TabStop = true;
getbutton.TabIndex = 0;
getbutton.Click += new System.EventHandler(getbuttonClick);
btmline.Controls.Add( getbutton );
// Date and Time
datearea.Dock = DockStyle.Left;
datearea.Size = new Size(160,24);
datearea.ReadOnly = true;
datearea.TabStop = false;
btmline.Controls.Add( datearea );
Controls.AddRange(
new Control[]
{strline, btmline, dataline, evntline, idline, waitline, stnline, devline});
}
protected override void OnClosing(CancelEventArgs e)
{
runit = false;
if( tdaq != null )
tdaq.Abort();
if( tdate != null )
tdate.Abort();
ccusb.Close();
base.OnClosing(e);
}
public static void Main()
{
Application.Run(new SWSend());
}
public static void ShowNow()
{
DateTime datenow;
while( runit )
{
datenow = DateTime.Now;
datearea.Text = datenow.ToString();
datearea.Invalidate();
Thread.Sleep(200);
}
}
public static void RunDAQ()
{
int d;
int d24;
while( runit )
{
d = ccusb.NAF(swn,0,8); // Test LAM
Thread.Sleep(waittime);
ccusb.NAF(swn,0,24); // Disable LAM
d = ccusb.NAF(swn,1,0);
d24 = (numevent & 0x00ffffff);
ccusb.NAF(swn,0,16,d24);
ccusb.NAF(swn,0,10); // Clear LAM
ccusb.NAF(swn,0,26); // Enable LAM
numevent += 1;
dataarea.Text = d.ToString();
dataarea.Invalidate();
evntarea.Text = numevent.ToString();
evntarea.Invalidate();
}
}
private void getbuttonClick(object sender, EventArgs evArgs)
{
if( !runit )
{
ccusb.Open( devnam.Text );
swn = int.Parse( stnumber.Text );
waittime = int.Parse( waitarea.Text );
tdate = new Thread(new ThreadStart(ShowNow));
tdaq = new Thread(new ThreadStart(RunDAQ));
Byte bId = ccusb.GetId();
idnam.Text = bId.ToString();
idnam.Invalidate();
numevent = 0;
ccusb.Z();
ccusb.C();
ccusb.NAF(swn,0,10); // Clear LAM
ccusb.NAF(swn,0,26); // Enable LAM
DateTime strtdate = DateTime.Now;
datestrt.Text = strtdate.ToString();
datestrt.Invalidate();
runit = true;
tdate.Start();
tdaq.Start();
getbutton.Text = @"’âŽ~";
}
else
{
runit = false;
if( tdaq != null )
tdaq.Abort();
if( tdate != null )
tdate.Abort();
getbutton.Text = @"ŠJŽn";
}
}
}