#region usings using System; using System.ComponentModel.Composition; using System.Runtime.InteropServices; using VVVV.PluginInterfaces.V1; using VVVV.PluginInterfaces.V2; using VVVV.Utils.VColor; using VVVV.Utils.VMath; using VVVV.Core.Logging; #endregion usings namespace VVVV.Nodes { #region PluginInfo [PluginInfo(Name = "k8055", Category = "Devices", Version = "1", Help = "connects to a Vellemann K8055 USB interface.", Tags = "")] #endregion PluginInfo public class C1Valuek8055Node : IPluginEvaluate { #region import [DllImport("k8055d.dll")] public static extern int OpenDevice(int devNumber); [DllImport("k8055d.dll")] public static extern void CloseDevice(); [DllImport("k8055d.dll")] public static extern int ReadAnalogChannel(int Channel); [DllImport("k8055d.dll")] public static extern void ReadAllAnalog(ref int Data1, ref int Data2); [DllImport("k8055d.dll")] public static extern void OutputAnalogChannel(int Channel, int Data); [DllImport("k8055d.dll")] public static extern void OutputAllAnalog(int Data1, int Data2); [DllImport("k8055d.dll")] public static extern void ClearAnalogChannel(int Channel); [DllImport("k8055d.dll")] public static extern void SetAllAnalog(); [DllImport("k8055d.dll")] public static extern void ClearAllAnalog(); [DllImport("k8055d.dll")] public static extern void SetAnalogChannel(int Channel); [DllImport("k8055d.dll")] public static extern void WriteAllDigital(int Data); [DllImport("k8055d.dll")] public static extern void ClearDigitalChannel(int Channel); [DllImport("k8055d.dll")] public static extern void ClearAllDigital(); [DllImport("k8055d.dll")] public static extern void SetDigitalChannel(int Channel); [DllImport("k8055d.dll")] public static extern void SetAllDigital(); [DllImport("k8055d.dll")] public static extern bool ReadDigitalChannel(int Channel); [DllImport("k8055d.dll")] public static extern int ReadAllDigital(); [DllImport("k8055d.dll")] public static extern int ReadCounter(int CounterNr); [DllImport("k8055d.dll")] public static extern void ResetCounter(int CounterNr); [DllImport("k8055d.dll")] public static extern void SetCounterDebounceTime(int CounterNr, int DebounceTime); [DllImport("k8055d.dll")] public static extern void Version(); [DllImport("k8055d.dll")] public static extern int SearchDevices(); [DllImport("k8055d.dll")] public static extern int SetCurrentDevice(int lngCardAddress); #endregion import #region fields & pins [Input("dOut", DefaultValue = 1)] ISpread dOut; [Input("aOut", DefaultValue = 1.0)] ISpread aOut; [Input("Adress", DefaultValue = 0, IsSingle = true)] ISpread adress; [Input("Connect", DefaultValue = 0, IsSingle = true)] ISpread connect; [Output("dIn")] ISpread dIn; [Output("aIn")] ISpread aIn; [Output("Connected", DefaultValue = 0, IsSingle = true)] ISpread connected; [Import()] ILogger FLogger; #endregion fields & pins #region variables int status = -1; int i_dOut; int i_aOut1; int i_aOut2; int i_dIn; int i_aIn1; int i_aIn2; #endregion variables public void Evaluate(int SpreadMax) { if((status != adress[0]) && connect[0]){ status = OpenDevice(adress[0]); connected[0] = (status == adress[0]); } if((status == adress[0]) && !connect[0]){ CloseDevice(); status = -1; connected[0] = false; } if(connected[0]){ // write dOut... i_dOut = 0; for(int i=7; i>=0; i--){ i_dOut = i_dOut << 1; if(dOut[i]) i_dOut |= 1; } WriteAllDigital(i_dOut); // FLogger.Log(LogType.Debug, i_dOut.ToString()); // write aOut... i_aOut1 = (int) (aOut[0]*255); i_aOut2 = (int) (aOut[1]*255); OutputAllAnalog(i_aOut1, i_aOut2); // get dIn... i_dIn = ReadAllDigital(); dIn.SliceCount = 5; for(int i=0; i<5; i++){ dIn[i] = ((i_dIn & 1) > 0); i_dIn = i_dIn >> 1;} // get aIn... ReadAllAnalog(ref i_aIn1, ref i_aIn2); aIn.SliceCount = 2; aIn[0] = i_aIn1; aIn[1] = i_aIn2; // get Counters... } //FLogger.Log(LogType.Debug, "Logging to Renderer (TTY)"); } } }