python-schdoc/tests/altium_crap/Soft Designs/Instruments/Scripted Instruments/NBI/NBIMain.pas

293 lines
8.2 KiB
Plaintext
Raw Normal View History

////////// INSTRUMENTS //////////
var
MI : IMemoryInstrument;
Probe : IMemoryInstrument;
FreqGen : IFrequencyGeneratorInstrument;
FreqCnt : IFrequencyCounterInstrument;
Term : ITerminalInstrument;
Switch : ICrosspointSwitchInstrument;
TermChar : Char;
function MemoryInstrument : IMemoryInstrument;
begin
if MI = nil then
MI := MemoryInstrumentManager.GetMemoryInstrumentByDesignator('MI1');
Result := MI;
end;
function ProbeInstrument : IMemoryInstrument;
begin
if Probe = nil then
Probe := MemoryInstrumentManager.GetMemoryInstrumentByDesignator('PROBE1');
Result := Probe;
end;
function FreqGenInstrument : IFrequencyGeneratorInstrument;
begin
if FreqGen = nil then
FreqGen := FrequencyGeneratorInstrumentManager.GetInstrumentByDesignator('FREQGEN1');
Result := FreqGen;
end;
function FreqCntInstrument : IFrequencyCounterInstrument;
begin
if FreqCnt = nil then
FreqCnt := FrequencyCounterInstrumentManager.GetInstrumentByDesignator('FREQCNT1');
Result := FreqCnt;
end;
function TerminalInstrument : ITerminalInstrument;
begin
if Term = nil then
Term := TerminalInstrumentManager.GetInstrumentByDesignator('T1');
Result := Term;
end;
function SwitchInstrument : ICrosspointSwitchInstrument;
begin
if Switch = nil then
Switch := CrosspointSwitchInstrumentManager.GetInstrumentByDesignator('CPS1');
Result := Switch;
end;
////////// COMMON //////////
function GetBaseFolder : string;
begin
Result := ExtractFilePath(GetRunningScriptProjectName);
end;
procedure TForm1.Form1Create(Sender: TObject);
begin
MI := nil;
Probe := nil;
FreqGen := nil;
FreqCnt := nil;
Term := nil;
Switch := nil;
TermChar := #33;
end;
procedure TForm1.SignalLinkManager1Poll(Sender: TObject);
var
S : string;
InputName : widestring;
OutputName : widestring;
i : integer;
begin
Label_FreqGen_CurFreq .Caption := IntToStr (FreqGenInstrument.Frequency);
Label_FreqGen_CurTimeBase.Caption := IntToStr (FreqGenInstrument.TimeBase);
Label_FreqGen_Suspended .Caption := BoolToStr(FreqGenInstrument.Suspended, True);
Label_FreqCnt_CurTimeBase.Caption := IntToStr (FreqCntInstrument.TimeBase);
if FreqCntInstrument.ChannelA.EdgePolarity = eEdgeRising then
Label_FreqCntA_EdgePolarity.Caption := 'Rising'
else
Label_FreqCntA_EdgePolarity.Caption := 'Falling';
if FreqCntInstrument.ChannelB.EdgePolarity = eEdgeRising then
Label_FreqCntB_EdgePolarity.Caption := 'Rising'
else
Label_FreqCntB_EdgePolarity.Caption := 'Falling';
case FreqCntInstrument.ChannelA.MeasureMode of
eMeasureMode_Frequency : Label_FreqCntA_MeasureMode.Caption := 'Frequency';
eMeasureMode_Period : Label_FreqCntA_MeasureMode.Caption := 'Period';
eMeasureMode_Count : Label_FreqCntA_MeasureMode.Caption := 'Count';
end;
case FreqCntInstrument.ChannelB.MeasureMode of
eMeasureMode_Frequency : Label_FreqCntB_MeasureMode.Caption := 'Frequency';
eMeasureMode_Period : Label_FreqCntB_MeasureMode.Caption := 'Period';
eMeasureMode_Count : Label_FreqCntB_MeasureMode.Caption := 'Count';
end;
Label_FreqCntA_Gating .Caption := FloatToStr (FreqCntInstrument.ChannelA.Gating);
Label_FreqCntB_Gating .Caption := FloatToStr (FreqCntInstrument.ChannelB.Gating);
Label_FreqCntA_Suspended .Caption := BoolToStr (FreqCntInstrument.ChannelA.Suspended, True);
Label_FreqCntB_Suspended .Caption := BoolToStr (FreqCntInstrument.ChannelB.Suspended, True);
Label_FreqCntA_Measured .Caption := FloatToStr (FreqCntInstrument.ChannelA.Measured);
Label_FreqCntB_Measured .Caption := FloatToStr (FreqCntInstrument.ChannelB.Measured);
S := '';
InputName := '';
OutputName := '';
For i := 0 To SwitchInstrument.GetConnectionCount - 1 Do
Begin
If S <> '' Then
S := S + ', ';
SwitchInstrument.GetConnection(i, InputName, OutputName);
S := S + InputName + ' -> ' + OutputName;
End;
Label_CPS_Connectivity.Caption := S;
end;
////////// MEMORY UTILS //////////
procedure TestMemoryWrite(const MI : IMemoryInstrument);
var
Buffer : PByteArray;
i : integer;
begin
if MI = nil then exit;
Buffer := AllocateByteArray(26);
For i := 0 To 25 Do
SetByteArrayElement(Buffer, i, Ord('A') + i);
MI.Write(Buffer, 0, 26);
FreeByteArray(Buffer);
end;
procedure TestMemoryRead(const MI : IMemoryInstrument);
var
Buffer : PByteArray;
i : integer;
S : String;
V : Byte;
begin
if MI = nil then exit;
Buffer := AllocateByteArray(16);
MI.Read(Buffer, 0, 16);
S := 'Data:'#13#10;
For i := 0 To 15 Do
Begin
V := GetByteArrayElement(Buffer, i);
S := S + #13#10 + IntToStr(i) + ': ' + IntToStr(V);
End;
FreeByteArray(Buffer);
ShowInfo(S);
end;
procedure TestMemoryLoad(const MI : IMemoryInstrument);
begin
if MI = nil then exit;
MI.LoadFromFile(GetBaseFolder + 'NBIMain.pas', 0, 64);
end;
procedure TestMemorySave(const MI : IMemoryInstrument);
begin
if MI = nil then exit;
MI.SaveToFile(GetBaseFolder + 'mem.bin', 0, 64);
end;
////////// MEMORY INSTRUMENT //////////
procedure TForm1.InstrumentButton1Click(Sender: TObject);
begin
TestMemoryRead(MemoryInstrument);
end;
procedure TForm1.InstrumentButton2Click(Sender: TObject);
begin
TestMemoryWrite(MemoryInstrument);
end;
procedure TForm1.InstrumentButton3Click(Sender: TObject);
begin
TestMemoryLoad(MemoryInstrument);
end;
procedure TForm1.InstrumentButton4Click(Sender: TObject);
begin
TestMemorySave(MemoryInstrument);
end;
////////// WB_PROBE //////////
procedure TForm1.InstrumentButton5Click(Sender: TObject);
begin
TestMemoryRead(ProbeInstrument);
end;
procedure TForm1.InstrumentButton6Click(Sender: TObject);
begin
TestMemoryWrite(ProbeInstrument);
end;
procedure TForm1.InstrumentButton7Click(Sender: TObject);
begin
TestMemoryLoad(ProbeInstrument);
end;
procedure TForm1.InstrumentButton8Click(Sender: TObject);
begin
TestMemorySave(ProbeInstrument);
end;
////////// FREQUENCY GENERATOR //////////
procedure TForm1.InstrumentButton9Click(Sender: TObject);
begin
FreqGenInstrument.Suspended := not FreqGenInstrument.Suspended;
if FreqGenInstrument.Suspended then
InstrumentButton9.Caption := 'Resume'
else
InstrumentButton9.Caption := 'Suspend';
end;
procedure TForm1.InstrumentButton10Click(Sender: TObject);
begin
if FreqGenInstrument.TimeBase = 50000000 then
FreqGenInstrument.TimeBase := 25000000
else
FreqGenInstrument.TimeBase := 50000000;
end;
procedure TForm1.InstrumentButton11Click(Sender: TObject);
begin
if FreqGenInstrument.Frequency = 1000000 then
FreqGenInstrument.Frequency := 1
else
FreqGenInstrument.Frequency := 1000000;
end;
////////// FREQUENCY COUNTER //////////
procedure TForm1.InstrumentButton12Click(Sender: TObject);
begin
if FreqCntInstrument.TimeBase = 50000000 then
FreqCntInstrument.TimeBase := 25000000
else
FreqCntInstrument.TimeBase := 50000000;
end;
////////// TERMINAL //////////
procedure TForm1.InstrumentButton13Click(Sender: TObject);
begin
TerminalInstrument.PutChar(TermChar);
TermChar := Chr(Ord(TermChar) + 1);
end;
procedure TForm1.InstrumentButton14Click(Sender: TObject);
begin
TerminalInstrument.PutString('This line is added from the script');
end;
procedure TForm1.InstrumentButton15Click(Sender: TObject);
begin
TerminalInstrument.SaveContent(GetBaseFolder + 'terminal.txt');
end;
procedure TForm1.InstrumentButton16Click(Sender: TObject);
begin
ShowMessage(TerminalInstrument.GetContent);
end;
////////// CROSSPOINT SWITCH //////////
procedure TForm1.InstrumentButton17Click(Sender: TObject);
begin
SwitchInstrument.BeginReconnect;
if SwitchInstrument.ConnectionExists('BRIGHTNESS', 'DEBUG') then
begin
SwitchInstrument.RemoveConnection('BRIGHTNESS', 'DEBUG');
SwitchInstrument.AddConnection ('CONTRAST' , 'DEBUG');
end
else
begin
SwitchInstrument.RemoveConnection('CONTRAST' , 'DEBUG');
SwitchInstrument.AddConnection ('BRIGHTNESS', 'DEBUG');
end;
SwitchInstrument.EndReconnect;
end;