diff --git a/C#/StaticFiles/fgt_sdk_dlls/linux/arm/libfgt_SDK.so b/C#/StaticFiles/fgt_sdk_dlls/linux/arm/libfgt_SDK.so index 39bf48a..56f4351 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/linux/arm/libfgt_SDK.so and b/C#/StaticFiles/fgt_sdk_dlls/linux/arm/libfgt_SDK.so differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/linux/arm64/libfgt_SDK.so b/C#/StaticFiles/fgt_sdk_dlls/linux/arm64/libfgt_SDK.so index 8f43043..173cdbd 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/linux/arm64/libfgt_SDK.so and b/C#/StaticFiles/fgt_sdk_dlls/linux/arm64/libfgt_SDK.so differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/linux/x64/libfgt_SDK.so b/C#/StaticFiles/fgt_sdk_dlls/linux/x64/libfgt_SDK.so index 914e8b8..7d85643 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/linux/x64/libfgt_SDK.so and b/C#/StaticFiles/fgt_sdk_dlls/linux/x64/libfgt_SDK.so differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/mac/x64/libfgt_SDK.dylib b/C#/StaticFiles/fgt_sdk_dlls/mac/x64/libfgt_SDK.dylib index 9883b6e..09f2006 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/mac/x64/libfgt_SDK.dylib and b/C#/StaticFiles/fgt_sdk_dlls/mac/x64/libfgt_SDK.dylib differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.dll b/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.dll index 56d89cd..767ea89 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.dll and b/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.dll differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.lib b/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.lib index 97e5643..032a6d2 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.lib and b/C#/StaticFiles/fgt_sdk_dlls/windows/x64/fgt_SDK.lib differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.dll b/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.dll index 223ddf1..ec669e0 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.dll and b/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.dll differ diff --git a/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.lib b/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.lib index e5a30aa..c2feace 100644 Binary files a/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.lib and b/C#/StaticFiles/fgt_sdk_dlls/windows/x86/fgt_SDK.lib differ diff --git a/C#/fgt_sdk_csharp.sln b/C#/fgt_sdk_csharp.sln index f13694b..9e5ad51 100644 --- a/C#/fgt_sdk_csharp.sln +++ b/C#/fgt_sdk_csharp.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.30204.135 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "fgt_sdk", "fgt_sdk_csharp\fgt_sdk.csproj", "{33B38AD3-45AB-47A7-A60A-FEF1F5F2C680}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{CCFEDF28-2E32-4486-A939-B8D48C3E2169}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{CCFEDF28-2E32-4486-A939-B8D48C3E2169}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{D0B23A9F-ECEC-45DB-998C-FD00A8C96626}" EndProject @@ -25,7 +25,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Basic Sensor Regulation", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Basic Set Pressure", "Examples\Basic Set Pressure\Basic Set Pressure.csproj", "{BC5CFC73-73E5-4589-99E9-D2FA6ED0D1C6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Basic Set Valve Position", "Examples\Basic Set Valve Position\Basic Set Valve Position.csproj", "{3BAF2C97-A143-4F04-9D17-8BF28380BF13}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Basic Set Valve Position", "Examples\Basic Set Valve Position\Basic Set Valve Position.csproj", "{3BAF2C97-A143-4F04-9D17-8BF28380BF13}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FD111F64-AE9B-41B6-98E5-6BF1A8BF86A2}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/C#/fgt_sdk_csharp/Enums/fgt_INSTRUMENT_TYPE.cs b/C#/fgt_sdk_csharp/Enums/fgt_INSTRUMENT_TYPE.cs index 0c3a57e..1c6ffc7 100644 --- a/C#/fgt_sdk_csharp/Enums/fgt_INSTRUMENT_TYPE.cs +++ b/C#/fgt_sdk_csharp/Enums/fgt_INSTRUMENT_TYPE.cs @@ -13,5 +13,6 @@ public enum fgt_INSTRUMENT_TYPE LineUP, IPS, ESS, + F_OEM, } } diff --git a/C#/fgt_sdk_csharp/Enums/fgt_SENSOR_TYPE.cs b/C#/fgt_sdk_csharp/Enums/fgt_SENSOR_TYPE.cs index c7a7954..425d043 100644 --- a/C#/fgt_sdk_csharp/Enums/fgt_SENSOR_TYPE.cs +++ b/C#/fgt_sdk_csharp/Enums/fgt_SENSOR_TYPE.cs @@ -18,5 +18,7 @@ public enum fgt_SENSOR_TYPE Pressure_S, Pressure_M, Pressure_XL, + Flow_M_plus_dual, + Flow_L_plus_dual, } -} \ No newline at end of file +} diff --git a/C#/fgt_sdk_csharp/Enums/fgt_VALVE_TYPE.cs b/C#/fgt_sdk_csharp/Enums/fgt_VALVE_TYPE.cs index 4a6e376..1019b3e 100644 --- a/C#/fgt_sdk_csharp/Enums/fgt_VALVE_TYPE.cs +++ b/C#/fgt_sdk_csharp/Enums/fgt_VALVE_TYPE.cs @@ -11,5 +11,8 @@ public enum fgt_VALVE_TYPE TwoSwitch, LSwitch, PSwitch, + M_X, + Two_X, + L_X, } -} \ No newline at end of file +} diff --git a/C#/fgt_sdk_csharp/fgtSdk.cs b/C#/fgt_sdk_csharp/fgtSdk.cs index 981f1d2..18c78b7 100644 --- a/C#/fgt_sdk_csharp/fgtSdk.cs +++ b/C#/fgt_sdk_csharp/fgtSdk.cs @@ -1,12 +1,12 @@ -using fgt_sdk.Structs; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; using fgt_sdk.Enums; -using System.Reflection; +using fgt_sdk.Structs; namespace fgt_sdk { @@ -43,7 +43,9 @@ private static IntPtr ArchResolver(string libraryName, Assembly assembly, DllImp libFile = "libfgt_SDK.dylib"; } else + { throw new NotSupportedException("Operating system not supported"); + } var archFolder = RuntimeInformation.ProcessArchitecture switch { @@ -287,6 +289,18 @@ private static IntPtr ArchResolver(string libraryName, Assembly assembly, DllImp [DllImport(FGT_SDK)] private static extern byte fgt_set_manual(uint pressureIndex, float value); + // unsigned char __stdcall fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char state); + [DllImport(FGT_SDK)] + private static extern byte fgt_set_digitalOutput(uint controllerIndex, byte port, byte state); + + // unsigned char __stdcall fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected); + [DllImport(FGT_SDK)] + private static extern byte fgt_get_sensorAirBubbleFlag(uint pressureIndex, ref byte detected); + + // unsigned char __stdcall fgt_get_inletPressure(unsigned int pressureIndex, float* pressure); + [DllImport(FGT_SDK)] + private static extern byte fgt_get_inletPressure(uint pressureIndex, ref float pressure); + #endregion #endregion @@ -356,7 +370,7 @@ private static fgt_ERROR_CODE ErrCheck(fgt_ERROR_CODE errorCode, fgt_ERRCHECK_TY /// Error code public static fgt_ERROR_CODE Fgt_init() { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_init(), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_init(), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -368,7 +382,7 @@ public static fgt_ERROR_CODE Fgt_init() /// Error code public static fgt_ERROR_CODE Fgt_close() { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_close(), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_close(), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -388,7 +402,7 @@ public static (byte count, List<(ushort serialNumber, fgt_INSTRUMENT_TYPE type)> { if (serialNumbers[i] != 0) { - tuplesList.Add((serialNumbers[i], (fgt_INSTRUMENT_TYPE) types[i])); + tuplesList.Add((serialNumbers[i], (fgt_INSTRUMENT_TYPE)types[i])); } } return (count, tuplesList); @@ -417,7 +431,7 @@ public static fgt_ERROR_CODE Fgt_initEx(List serialNumbers) throw; } - return ErrCheck((fgt_ERROR_CODE) fgt_initEx(sns), fgt_ERRCHECK_TYPE.Generic); + return ErrCheck((fgt_ERROR_CODE)fgt_initEx(sns), fgt_ERRCHECK_TYPE.Generic); } /// @@ -458,7 +472,7 @@ public static fgt_ERROR_CODE Fgt_remove_simulated_instr(fgt_INSTRUMENT_TYPE type public static (fgt_ERROR_CODE errCode, List info) Fgt_get_controllersInfo() { var controllersInfo = new fgt_CONTROLLER_INFO[256]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_controllersInfo(controllersInfo), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_controllersInfo(controllersInfo), fgt_ERRCHECK_TYPE.Generic); var controllersInfoList = controllersInfo.Where(c => c.SN != 0).ToList(); return (errCode, controllersInfoList); } @@ -481,8 +495,8 @@ public static (fgt_ERROR_CODE errCode, int count) Fgt_get_pressureChannelCount() public static (fgt_ERROR_CODE errCode, int count) Fgt_get_sensorChannelCount() { byte count = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorChannelCount(ref count), fgt_ERRCHECK_TYPE.Generic); - return (errCode, (int) count); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorChannelCount(ref count), fgt_ERRCHECK_TYPE.Generic); + return (errCode, count); } /// @@ -492,8 +506,8 @@ public static (fgt_ERROR_CODE errCode, int count) Fgt_get_sensorChannelCount() public static (fgt_ERROR_CODE errCode, int count) Fgt_get_TtlChannelCount() { byte count = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_TtlChannelCount(ref count), fgt_ERRCHECK_TYPE.Generic); - return (errCode, (int) count); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_TtlChannelCount(ref count), fgt_ERRCHECK_TYPE.Generic); + return (errCode, count); } /// @@ -506,7 +520,7 @@ public static (fgt_ERROR_CODE errCode, int count) Fgt_get_valveChannelCount() { byte count = 0; var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_valveChannelCount(ref count), fgt_ERRCHECK_TYPE.Generic); - return (errCode, (int)count); + return (errCode, count); } /// @@ -518,7 +532,7 @@ public static (fgt_ERROR_CODE errCode, int count) Fgt_get_valveChannelCount() public static (fgt_ERROR_CODE errCode, List info) Fgt_get_pressureChannelsInfo() { var info = new fgt_CHANNEL_INFO[256]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_pressureChannelsInfo(info), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_pressureChannelsInfo(info), fgt_ERRCHECK_TYPE.Generic); var controllersInfoList = info.Where(c => c.ControllerSN != 0).ToList(); return (errCode, controllersInfoList); } @@ -533,13 +547,13 @@ public static (fgt_ERROR_CODE errCode, List<(fgt_CHANNEL_INFO channelInfo, fgt_S { var info = new fgt_CHANNEL_INFO[256]; var type = new int[256]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorChannelsInfo(info, type), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorChannelsInfo(info, type), fgt_ERRCHECK_TYPE.Generic); var tuplesList = new List<(fgt_CHANNEL_INFO, fgt_SENSOR_TYPE)>(); for (var index = 0; index < info.Length; index++) { if (info[index].ControllerSN != 0) { - tuplesList.Add((info[index], (fgt_SENSOR_TYPE) type[index])); + tuplesList.Add((info[index], (fgt_SENSOR_TYPE)type[index])); } } @@ -554,7 +568,7 @@ public static (fgt_ERROR_CODE errCode, List<(fgt_CHANNEL_INFO channelInfo, fgt_S public static (fgt_ERROR_CODE errCode, List info) Fgt_get_TtlChannelsInfo() { var info = new fgt_CHANNEL_INFO[256]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_TtlChannelsInfo(info), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_TtlChannelsInfo(info), fgt_ERRCHECK_TYPE.Generic); var controllersInfoList = info.Where(c => c.ControllerSN != 0).ToList(); return (errCode, controllersInfoList); } @@ -593,7 +607,7 @@ public static (fgt_ERROR_CODE errCode, List<(fgt_CHANNEL_INFO channelInfo, fgt_V /// Error code public static fgt_ERROR_CODE Fgt_set_pressure(uint pressureIndex, float pressure) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_pressure(pressureIndex, pressure), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_pressure(pressureIndex, pressure), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } @@ -605,7 +619,7 @@ public static fgt_ERROR_CODE Fgt_set_pressure(uint pressureIndex, float pressure public static (fgt_ERROR_CODE errCode, float pressure) Fgt_get_pressure(uint pressureIndex) { var pressure = 0.0f; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_pressure(pressureIndex, ref pressure), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_pressure(pressureIndex, ref pressure), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return (errCode, pressure); } @@ -618,7 +632,7 @@ public static (fgt_ERROR_CODE errCode, float pressure, ushort timeStamp) Fgt_get { var pressure = 0.0f; ushort timestamp = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_pressureEx(pressureIndex, ref pressure, ref timestamp), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_pressureEx(pressureIndex, ref pressure, ref timestamp), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return (errCode, pressure, timestamp); } @@ -632,7 +646,7 @@ public static (fgt_ERROR_CODE errCode, float pressure, ushort timeStamp) Fgt_get /// Error code public static fgt_ERROR_CODE Fgt_set_sensorRegulation(uint sensorIndex, uint pressureIndex, float setpoint) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorRegulation(sensorIndex, pressureIndex, setpoint), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorRegulation(sensorIndex, pressureIndex, setpoint), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -644,7 +658,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorRegulation(uint sensorIndex, uint pre public static (fgt_ERROR_CODE errCode, float value) Fgt_get_sensorValue(uint sensorIndex) { var value = 0.0f; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorValue(sensorIndex, ref value), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorValue(sensorIndex, ref value), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return (errCode, value); } @@ -657,7 +671,7 @@ public static (fgt_ERROR_CODE errCode, float value, ushort timeStamp) Fgt_get_se { var value = 0.0f; ushort timestamp = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorValueEx(sensorIndex, ref value, ref timestamp), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorValueEx(sensorIndex, ref value, ref timestamp), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return (errCode, value, timestamp); } @@ -668,7 +682,7 @@ public static (fgt_ERROR_CODE errCode, float value, ushort timeStamp) Fgt_get_se /// Error code and current position public static (fgt_ERROR_CODE errCode, int position) Fgt_get_valvePosition(uint valveIndex) { - int position = 0; + var position = 0; var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_valvePosition(valveIndex, ref position), fgt_ERRCHECK_TYPE.Generic, valveIndex); return (errCode, position); } @@ -683,7 +697,7 @@ public static (fgt_ERROR_CODE errCode, int position) Fgt_get_valvePosition(uint /// Error code public static fgt_ERROR_CODE Fgt_set_valvePosition(uint valveIndex, int position, fgt_SWITCH_DIRECTION direction = fgt_SWITCH_DIRECTION.Shortest, bool wait = true) { - var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_valvePosition(valveIndex, position, (int) direction, wait ? 1 : 0), fgt_ERRCHECK_TYPE.Generic, valveIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_valvePosition(valveIndex, position, (int)direction, wait ? 1 : 0), fgt_ERRCHECK_TYPE.Generic, valveIndex); return errCode; } @@ -725,7 +739,7 @@ public static fgt_ERROR_CODE Fgt_set_sessionPressureUnit(string unit) throw; } - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sessionPressureUnit(pressureUnit), fgt_ERRCHECK_TYPE.Pressure); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sessionPressureUnit(pressureUnit), fgt_ERRCHECK_TYPE.Pressure); return errCode; } @@ -751,7 +765,7 @@ public static fgt_ERROR_CODE Fgt_set_pressureUnit(uint pressureIndex, string uni throw; } - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_pressureUnit(pressureIndex, pressureUnit), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_pressureUnit(pressureIndex, pressureUnit), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } @@ -764,7 +778,7 @@ public static fgt_ERROR_CODE Fgt_set_pressureUnit(uint pressureIndex, string uni public static (fgt_ERROR_CODE errCode, string unit) Fgt_get_pressureUnit(uint pressureIndex) { var pressureUnit = new char[140]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_pressureUnit(pressureIndex, pressureUnit), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_pressureUnit(pressureIndex, pressureUnit), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); var unitString = new string(pressureUnit.TakeWhile(c => c != '\0').ToArray()); return (errCode, unitString); @@ -792,7 +806,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorUnit(uint sensorIndex, string sensorU throw; } - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorUnit(sensorIndex, unit), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorUnit(sensorIndex, unit), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -805,7 +819,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorUnit(uint sensorIndex, string sensorU public static (fgt_ERROR_CODE errCode, string unit) Fgt_get_sensorUnit(uint sensorIndex) { var unit = new char[140]; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorUnit(sensorIndex, unit), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorUnit(sensorIndex, unit), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); var unitString = new string(unit.TakeWhile(c => c != '\0').ToArray()); return (errCode, unitString); @@ -820,7 +834,7 @@ public static (fgt_ERROR_CODE errCode, string unit) Fgt_get_sensorUnit(uint sens /// Error code public static fgt_ERROR_CODE Fgt_set_sensorCalibration(uint sensorIndex, fgt_SENSOR_CALIBRATION table) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorCalibration(sensorIndex, (int) table), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorCalibration(sensorIndex, (int)table), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -832,9 +846,9 @@ public static fgt_ERROR_CODE Fgt_set_sensorCalibration(uint sensorIndex, fgt_SEN public static (fgt_ERROR_CODE errCode, fgt_SENSOR_CALIBRATION table) Fgt_get_sensorCalibration(uint sensorIndex) { var table = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorCalibration(sensorIndex, ref table), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorCalibration(sensorIndex, ref table), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); - return (errCode, (fgt_SENSOR_CALIBRATION) table); + return (errCode, (fgt_SENSOR_CALIBRATION)table); } /// @@ -848,7 +862,7 @@ public static (fgt_ERROR_CODE errCode, fgt_SENSOR_CALIBRATION table) Fgt_get_sen /// Error code public static fgt_ERROR_CODE Fgt_set_sensorCustomScale(uint sensorIndex, (float a, float b, float c) scale) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorCustomScale(sensorIndex, scale.a, scale.b, scale.c), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorCustomScale(sensorIndex, scale.a, scale.b, scale.c), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -865,7 +879,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorCustomScale(uint sensorIndex, (float /// Error code public static fgt_ERROR_CODE Fgt_set_sensorCustomScaleEx(uint sensorIndex, (float a, float b, float c) scale, float sMax) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorCustomScaleEx(sensorIndex, scale.a, scale.b, scale.c, sMax), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorCustomScaleEx(sensorIndex, scale.a, scale.b, scale.c, sMax), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -877,7 +891,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorCustomScaleEx(uint sensorIndex, (floa /// Error code public static fgt_ERROR_CODE Fgt_calibratePressure(uint pressureIndex) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_calibratePressure(pressureIndex), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_calibratePressure(pressureIndex), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } @@ -896,7 +910,7 @@ public static fgt_ERROR_CODE Fgt_calibratePressure(uint pressureIndex) /// Error code public static fgt_ERROR_CODE Fgt_set_customSensorRegulation(float measure, float setpoint, float maxSensorRange, uint pressureIndex) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_customSensorRegulation(measure, setpoint, maxSensorRange, pressureIndex), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_customSensorRegulation(measure, setpoint, maxSensorRange, pressureIndex), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -908,7 +922,7 @@ public static fgt_ERROR_CODE Fgt_set_customSensorRegulation(float measure, float public static (fgt_ERROR_CODE errCode, float pMin, float pMax) Fgt_get_pressureRange(uint pressureIndex) { float pMin = 0, pMax = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_pressureRange(pressureIndex, ref pMin, ref pMax), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_pressureRange(pressureIndex, ref pMin, ref pMax), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return (errCode, pMin, pMax); } @@ -920,7 +934,7 @@ public static (fgt_ERROR_CODE errCode, float pMin, float pMax) Fgt_get_pressureR public static (fgt_ERROR_CODE errCode, (float sMin, float sMax) range) Fgt_get_sensorRange(uint sensorIndex) { float sMin = 0, sMax = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_get_sensorRange(sensorIndex, ref sMin, ref sMax), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorRange(sensorIndex, ref sMin, ref sMax), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return (errCode, (sMin, sMax)); } @@ -931,7 +945,7 @@ public static (fgt_ERROR_CODE errCode, (float sMin, float sMax) range) Fgt_get_s /// Error code and Maximum position of this valve public static (fgt_ERROR_CODE errCode, int posMax) Fgt_get_valveRange(uint valveIndex) { - int posMax = 0; + var posMax = 0; var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_valveRange(valveIndex, ref posMax), fgt_ERRCHECK_TYPE.Sensor, valveIndex); return (errCode, posMax); } @@ -944,7 +958,7 @@ public static (fgt_ERROR_CODE errCode, int posMax) Fgt_get_valveRange(uint valve /// public static fgt_ERROR_CODE Fgt_set_pressureLimit(uint pressureIndex, (float pMin, float pMax) limits) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_pressureLimit(pressureIndex, limits.pMin, limits.pMax), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_pressureLimit(pressureIndex, limits.pMin, limits.pMax), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } @@ -961,7 +975,7 @@ public static fgt_ERROR_CODE Fgt_set_pressureLimit(uint pressureIndex, (float pM /// Error code public static fgt_ERROR_CODE Fgt_set_sensorRegulationResponse(uint sensorIndex, uint responseTime) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_sensorRegulationResponse(sensorIndex, responseTime), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_sensorRegulationResponse(sensorIndex, responseTime), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); return errCode; } @@ -975,7 +989,7 @@ public static fgt_ERROR_CODE Fgt_set_sensorRegulationResponse(uint sensorIndex, /// Error code public static fgt_ERROR_CODE Fgt_set_pressureResponse(uint pressureIndex, byte value) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_pressureResponse(pressureIndex, value), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_pressureResponse(pressureIndex, value), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } @@ -1000,7 +1014,7 @@ public static (fgt_ERROR_CODE errCode, fgt_INSTRUMENT_TYPE type, ushort controll var detailsString = new string(details.TakeWhile(c => c != '\0').ToArray()); - return ((fgt_ERROR_CODE) errCode, (fgt_INSTRUMENT_TYPE) type, controllerSN: controllerSn, infoCode == 1, detailsString); + return ((fgt_ERROR_CODE)errCode, (fgt_INSTRUMENT_TYPE)type, controllerSN: controllerSn, infoCode == 1, detailsString); } /// @@ -1020,7 +1034,7 @@ public static (fgt_ERROR_CODE errCode, fgt_INSTRUMENT_TYPE type, ushort controll var detailsString = new string(details.TakeWhile(c => c != '\0').ToArray()); - return ((fgt_ERROR_CODE) errCode, (fgt_INSTRUMENT_TYPE) type, controllerSN: controllerSn, infoCode == 1, detailsString); + return ((fgt_ERROR_CODE)errCode, (fgt_INSTRUMENT_TYPE)type, controllerSN: controllerSn, infoCode == 1, detailsString); } /// @@ -1032,7 +1046,7 @@ public static (fgt_ERROR_CODE errCode, fgt_INSTRUMENT_TYPE type, ushort controll /// Error code public static fgt_ERROR_CODE Fgt_set_power(uint controllerIndex, fgt_POWER state) { - return (fgt_ERROR_CODE) fgt_set_power(controllerIndex, (byte) state); + return (fgt_ERROR_CODE)fgt_set_power(controllerIndex, (byte)state); } /// @@ -1045,7 +1059,7 @@ public static (fgt_ERROR_CODE errCode, fgt_POWER state) Fgt_get_power(uint contr { byte state = 0; var errCode = fgt_get_power(controllerIndex, ref state); - return ((fgt_ERROR_CODE) errCode, (fgt_POWER) state); + return ((fgt_ERROR_CODE)errCode, (fgt_POWER)state); } #endregion @@ -1060,7 +1074,7 @@ public static (fgt_ERROR_CODE errCode, fgt_POWER state) Fgt_get_power(uint contr /// Error code public static fgt_ERROR_CODE Fgt_set_TtlMode(uint TtlIndex, fgt_TTL_MODE mode) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_TtlMode(TtlIndex, (int) mode), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_TtlMode(TtlIndex, (int)mode), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -1072,8 +1086,8 @@ public static fgt_ERROR_CODE Fgt_set_TtlMode(uint TtlIndex, fgt_TTL_MODE mode) public static (fgt_ERROR_CODE errCode, bool ttlEvent) Fgt_read_Ttl(uint ttlIndex) { uint state = 0; - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_read_Ttl(ttlIndex, ref state), fgt_ERRCHECK_TYPE.Generic); - return ((fgt_ERROR_CODE) errCode, Convert.ToBoolean(state)); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_read_Ttl(ttlIndex, ref state), fgt_ERRCHECK_TYPE.Generic); + return (errCode, Convert.ToBoolean(state)); } /// @@ -1083,7 +1097,7 @@ public static (fgt_ERROR_CODE errCode, bool ttlEvent) Fgt_read_Ttl(uint ttlIndex /// Error code and a boolean indicating if an event (edge) has occured public static fgt_ERROR_CODE Fgt_trigger_Ttl(uint ttlIndex) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_trigger_Ttl(ttlIndex), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_trigger_Ttl(ttlIndex), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -1100,7 +1114,7 @@ public static fgt_ERROR_CODE Fgt_trigger_Ttl(uint ttlIndex) /// Error code public static fgt_ERROR_CODE Fgt_set_purge(uint controllerIndex, bool purge) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_purge(controllerIndex, (byte) (purge ? 1 : 0)), fgt_ERRCHECK_TYPE.Generic); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_purge(controllerIndex, (byte)(purge ? 1 : 0)), fgt_ERRCHECK_TYPE.Generic); return errCode; } @@ -1113,10 +1127,50 @@ public static fgt_ERROR_CODE Fgt_set_purge(uint controllerIndex, bool purge) /// public static fgt_ERROR_CODE Fgt_set_manual(uint pressureIndex, float value) { - var errCode = ErrCheck((fgt_ERROR_CODE) fgt_set_manual(pressureIndex, value), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_manual(pressureIndex, value), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); return errCode; } + /// + /// Set the digital output ON or OFF on a controller + /// This feature is only available on the F-OEM device. + /// + /// Index of controller or unique ID + /// Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + /// True to turn on the output, false to turn off + /// Error code + public static fgt_ERROR_CODE Fgt_set_digitalOutput(uint controllerIndex, byte port, bool state) + { + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_set_digitalOutput(controllerIndex, port, (byte)(state ? 1 : 0)), fgt_ERRCHECK_TYPE.Generic); + return errCode; + } + + /// + /// Read the flag indicating whether the flow rate sensor detects an air bubble. Only + /// available on Flow Unit sensor ranges M+ and L+. + /// + /// Index of sensor channel or unique ID + /// Error code and a boolean which is true if the sensor detects an air bubble + public static (fgt_ERROR_CODE errCode, bool detected) Fgt_get_sensorAirBubbleFlag(uint sensorIndex) + { + byte detected = 0; + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_sensorAirBubbleFlag(sensorIndex, ref detected), fgt_ERRCHECK_TYPE.Sensor, sensorIndex); + return (errCode, detected != 0); + } + + /// + /// Returns the pressure measured at the device's inlet. + /// This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + /// + /// Index of pressure channel or unique ID + /// Error code and current inlet pressure + public static (fgt_ERROR_CODE errCode, float pressure) Fgt_get_inletPressure(uint pressureIndex) + { + var pressure = 0.0f; + var errCode = ErrCheck((fgt_ERROR_CODE)fgt_get_inletPressure(pressureIndex, ref pressure), fgt_ERRCHECK_TYPE.Pressure, pressureIndex); + return (errCode, pressure); + } + #endregion /// diff --git a/C#/fgt_sdk_csharp/fgt_sdk.csproj b/C#/fgt_sdk_csharp/fgt_sdk.csproj index 9d23a5e..43c79fb 100644 --- a/C#/fgt_sdk_csharp/fgt_sdk.csproj +++ b/C#/fgt_sdk_csharp/fgt_sdk.csproj @@ -5,16 +5,16 @@ Fluigent Fluigent Software Development Kit C# Software Development Kit for Fluigent instruments - 21.4.0.0 + 22.0.0.0 Microfluidics, Control AnyCPU;x64;x86 true - 21.4.0.0 + 22.0.0.0 Apache-2.0 - Copyright (c) Fluigent 2021 + Copyright (c) Fluigent 2022 https://github.com/Fluigent/fgt-SDK https://www.fluigent.com/ - 21.4.0.0 + 22.0.0.0 diff --git a/C++/CMakeLists.txt b/C++/CMakeLists.txt index 13182cd..411843d 100644 --- a/C++/CMakeLists.txt +++ b/C++/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.13) -project(SDK_cpp_examples VERSION 21.4.0.0) +project(SDK_cpp_examples VERSION 22.0.0.0) set(CMAKE_CXX_STANDARD 11) add_subdirectory(fgt_SDK_Cpp) diff --git a/C++/fgt_SDK_Cpp/dlls/fgt_SDK.h b/C++/fgt_SDK_Cpp/dlls/fgt_SDK.h index 084a5fc..e53327b 100644 --- a/C++/fgt_SDK_Cpp/dlls/fgt_SDK.h +++ b/C++/fgt_SDK_Cpp/dlls/fgt_SDK.h @@ -1,13 +1,13 @@ /*============================================================================ * Fluigent Software Developement Kit *---------------------------------------------------------------------------- -* Copyright (c) Fluigent 2021. All Rights Reserved. +* Copyright (c) Fluigent 2022. All Rights Reserved. *---------------------------------------------------------------------------- * * Title: fgt_SDK.h * Purpose: Functions API for Fluigent instruments -* Version: 21.4.0.0 -* Date: 12/2021 +* Version: 22.0.0.0 +* Date: 04/2022 *============================================================================*/ #ifndef _FGT_SDK_H @@ -71,13 +71,15 @@ extern "C" }; /** @Description Instrument controller type */ - enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS }; + enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS, F_OEM }; /** @Description Sensor type */ enum class fgt_SENSOR_TYPE { None, Flow_XS_single, Flow_S_single, Flow_S_dual, Flow_M_single, Flow_M_dual, Flow_L_single, Flow_L_dual, Flow_XL_single, - Pressure_S, Pressure_M, Pressure_XL }; + Pressure_S, Pressure_M, Pressure_XL, + Flow_M_plus_dual, Flow_L_plus_dual, + }; /** @Description Sensor calibration table */ enum class fgt_SENSOR_CALIBRATION { None, H2O, IPA, HFE, FC40, OIL }; @@ -92,7 +94,7 @@ extern "C" enum class fgt_LINK_MODULE { None, FlowEZ, PSwitch = 3, SwitchEZ = 4 }; /** @Description Valve type */ - enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch }; + enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch, M_X, Two_X, L_X }; /** @Description Switch direction type */ enum class fgt_SWITCH_DIRECTION { Shortest, Anticlockwise, Clockwise }; @@ -351,6 +353,16 @@ typedef struct */ unsigned char FGT_API fgt_get_sensorValueEx(unsigned int sensorIndex, float* value, unsigned short* timeStamp); + /** + * @Description Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + * @param sensorIndex Index of sensor channel or unique ID + * @out detected 1 if an air bubble was detected, 0 otherwise. + * @return fgt_ERROR_CODE + * @see fgt_get_sensorStatus + */ + unsigned char FGT_API fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected); + /** * @Description Read the position of a specific valve channel. * @param valveIndex Index of valve channel @@ -660,6 +672,24 @@ typedef struct */ unsigned char FGT_API fgt_set_manual(unsigned int pressureIndex, float value); + /** + * @Description Set the digital output ON or OFF on a controller + * This feature is only available on the F-OEM device. + * @param controllerIndex Index of controller or unique ID + * @param port Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + * @param state 0: OFF, 1:ON + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char port, unsigned char state); + + /** + * @Description Returns the pressure measured at the device's inlet. + * This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + * @param pressureIndex Index of pressure channel or unique ID + * @out pressure Inlet pressure value in selected unit, default is "mbar" + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_get_inletPressure(unsigned int pressureIndex, float* pressure); #ifdef __cplusplus } diff --git a/C++/fgt_SDK_Cpp/dlls/linux/arm/libfgt_SDK.so b/C++/fgt_SDK_Cpp/dlls/linux/arm/libfgt_SDK.so index 39bf48a..56f4351 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/linux/arm/libfgt_SDK.so and b/C++/fgt_SDK_Cpp/dlls/linux/arm/libfgt_SDK.so differ diff --git a/C++/fgt_SDK_Cpp/dlls/linux/arm64/libfgt_SDK.so b/C++/fgt_SDK_Cpp/dlls/linux/arm64/libfgt_SDK.so index 8f43043..173cdbd 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/linux/arm64/libfgt_SDK.so and b/C++/fgt_SDK_Cpp/dlls/linux/arm64/libfgt_SDK.so differ diff --git a/C++/fgt_SDK_Cpp/dlls/linux/x64/libfgt_SDK.so b/C++/fgt_SDK_Cpp/dlls/linux/x64/libfgt_SDK.so index 914e8b8..7d85643 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/linux/x64/libfgt_SDK.so and b/C++/fgt_SDK_Cpp/dlls/linux/x64/libfgt_SDK.so differ diff --git a/C++/fgt_SDK_Cpp/dlls/mac/x64/libfgt_SDK.dylib b/C++/fgt_SDK_Cpp/dlls/mac/x64/libfgt_SDK.dylib index 9883b6e..09f2006 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/mac/x64/libfgt_SDK.dylib and b/C++/fgt_SDK_Cpp/dlls/mac/x64/libfgt_SDK.dylib differ diff --git a/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.dll b/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.dll index 56d89cd..767ea89 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.dll and b/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.dll differ diff --git a/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.lib b/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.lib index 97e5643..032a6d2 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.lib and b/C++/fgt_SDK_Cpp/dlls/windows/x64/fgt_SDK.lib differ diff --git a/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.dll b/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.dll index 223ddf1..ec669e0 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.dll and b/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.dll differ diff --git a/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.lib b/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.lib index e5a30aa..c2feace 100644 Binary files a/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.lib and b/C++/fgt_SDK_Cpp/dlls/windows/x86/fgt_SDK.lib differ diff --git a/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.cpp b/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.cpp index a59fa78..0ba8fc8 100644 --- a/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.cpp +++ b/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.cpp @@ -60,6 +60,7 @@ std::ostream& operator<<(std::ostream& str, fgt_INSTRUMENT_TYPE instrType) case fgt_INSTRUMENT_TYPE::LineUP: str << "LineUP"; break; case fgt_INSTRUMENT_TYPE::IPS: str << "IPS"; break; case fgt_INSTRUMENT_TYPE::ESS: str << "ESS"; break; + case fgt_INSTRUMENT_TYPE::F_OEM: str << "F_OEM"; break; default: str << "Unknown instrument type (" << int(instrType) << ")"; } return str; @@ -82,6 +83,8 @@ std::ostream& operator<<(std::ostream& str, fgt_SENSOR_TYPE sensorType) case fgt_SENSOR_TYPE::Pressure_S: str << "Pressure_S"; break; case fgt_SENSOR_TYPE::Pressure_M: str << "Pressure_M"; break; case fgt_SENSOR_TYPE::Pressure_XL: str << "Pressure_XL"; break; + case fgt_SENSOR_TYPE::Flow_M_plus_dual: str << "Flow_M_plus_dual"; break; + case fgt_SENSOR_TYPE::Flow_L_plus_dual: str << "Flow_L_plus_dual"; break; default: str << "Unknown sensor type (" << int(sensorType) << ")"; } return str; @@ -140,6 +143,9 @@ std::ostream& operator<<(std::ostream& str, fgt_VALVE_TYPE valveType) case fgt_VALVE_TYPE::TwoSwitch: str << "TwoSwitch"; break; case fgt_VALVE_TYPE::LSwitch: str << "LSwitch"; break; case fgt_VALVE_TYPE::PSwitch: str << "PSwitch"; break; + case fgt_VALVE_TYPE::M_X: str << "M_X"; break; + case fgt_VALVE_TYPE::Two_X: str << "Two_X"; break; + case fgt_VALVE_TYPE::L_X: str << "L_X"; break; default: str << "Unknown valve type (" << int(valveType) << ")"; } return str; @@ -1090,6 +1096,51 @@ fgt_ERROR_CODE Fgt_set_manual(unsigned int pressureIndex, float value) return returnCode; } +/** + * @Description Set the digital output ON or OFF on a controller + * This feature is only available on the F-OEM device. + * @param controllerIndex Index of controller or unique ID + * @param port Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + * @param state 0: OFF, 1:ON + * @return fgt_ERROR_CODE + */ +fgt_ERROR_CODE Fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char port, unsigned char state) +{ + fgt_ERROR_CODE returnCode = fgt_ERROR_CODE(fgt_set_digitalOutput(controllerIndex, port, state)); + Fgt_Manage_Generic_Status(returnCode, "Fgt_set_digitalOutput"); + return returnCode; +} + +/** + * @Description Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + * @param sensorIndex Index of sensor channel or unique ID + * @out detected 1 if an air bubble was detected, 0 otherwise. + * @return fgt_ERROR_CODE + * @see fgt_get_sensorStatus + */ +fgt_ERROR_CODE Fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected) +{ + fgt_ERROR_CODE returnCode = fgt_ERROR_CODE(fgt_get_sensorAirBubbleFlag(sensorIndex, detected)); + Fgt_Manage_Sensor_Status(sensorIndex, "Fgt_get_sensorAirBubbleFlag"); + return returnCode; +} + +/** + * @Description Returns the pressure measured at the device's inlet. + * This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + * @param pressureIndex Index of pressure channel or unique ID + * @param *pressure Inlet pressure value in selected unit, default is "mbar" + * @return errorCode + * @see fgt_get_pressureStatus + */ +fgt_ERROR_CODE Fgt_get_inletPressure(unsigned int pressureIndex, float* pressure) +{ + fgt_ERROR_CODE returnCode = fgt_ERROR_CODE(fgt_get_inletPressure(pressureIndex, pressure)); + Fgt_Manage_Pressure_Status(pressureIndex, "Fgt_get_inletPressure"); + return returnCode; +} + fgt_ERROR_CODE Fgt_set_errorReportMode(fgt_ERROR_REPORT_MODE mode) { error_report_mode = mode; diff --git a/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.h b/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.h index ae2c8e4..4a7e896 100644 --- a/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.h +++ b/C++/fgt_SDK_Cpp/fgt_SDK_Cpp.h @@ -1,14 +1,14 @@ /*============================================================================ * Fluigent Software Developement Kit for C++ *---------------------------------------------------------------------------- -* Copyright (c) Fluigent 2021. All Rights Reserved. +* Copyright (c) Fluigent 2022. All Rights Reserved. *---------------------------------------------------------------------------- * * Title: fgt_SDK_Cpp.h * Purpose: Wrapper to fgt_SDK library * Contains an interface to each dll function and type conversions -* Version: 21.4.0.0 -* Date: 12/2021 +* Version: 22.0.0.0 +* Date: 04/2022 *============================================================================*/ #ifndef _FGT_SDK_CPP_H @@ -601,6 +601,36 @@ fgt_ERROR_CODE Fgt_set_purge(unsigned int controllerIndex, unsigned char purge); */ fgt_ERROR_CODE Fgt_set_manual(unsigned int pressureIndex, float value); +/** + * @Description Set the digital output ON or OFF on a controller + * This feature is only available on the F-OEM device. + * @param controllerIndex Index of controller or unique ID + * @param port Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + * @param state 0: OFF, 1:ON + * @return fgt_ERROR_CODE + */ +fgt_ERROR_CODE Fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char port, unsigned char state); + +/** + * @Description Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + * @param sensorIndex Index of sensor channel or unique ID + * @out detected 1 if an air bubble was detected, 0 otherwise. + * @return fgt_ERROR_CODE + * @see fgt_get_sensorStatus + */ +fgt_ERROR_CODE FGT_API Fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected); + +/** + * @Description Returns the pressure measured at the device's inlet. + * This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + * @param pressureIndex Index of pressure channel or unique ID + * @param *pressure Inlet pressure value in selected unit, default is "mbar" + * @return errorCode + * @see fgt_get_pressureStatus + */ +fgt_ERROR_CODE Fgt_get_inletPressure(unsigned int pressureIndex, float* pressure); + /** * @Description Sets a flag that defines how SDK errors should be reported. * @param mode The report mode to use. diff --git a/Fluigent SDK.pdf b/Fluigent SDK.pdf index 5a565f0..ea72301 100644 Binary files a/Fluigent SDK.pdf and b/Fluigent SDK.pdf differ diff --git a/LabVIEW/dlls/fgt_SDK.h b/LabVIEW/dlls/fgt_SDK.h index 084a5fc..e53327b 100644 --- a/LabVIEW/dlls/fgt_SDK.h +++ b/LabVIEW/dlls/fgt_SDK.h @@ -1,13 +1,13 @@ /*============================================================================ * Fluigent Software Developement Kit *---------------------------------------------------------------------------- -* Copyright (c) Fluigent 2021. All Rights Reserved. +* Copyright (c) Fluigent 2022. All Rights Reserved. *---------------------------------------------------------------------------- * * Title: fgt_SDK.h * Purpose: Functions API for Fluigent instruments -* Version: 21.4.0.0 -* Date: 12/2021 +* Version: 22.0.0.0 +* Date: 04/2022 *============================================================================*/ #ifndef _FGT_SDK_H @@ -71,13 +71,15 @@ extern "C" }; /** @Description Instrument controller type */ - enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS }; + enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS, F_OEM }; /** @Description Sensor type */ enum class fgt_SENSOR_TYPE { None, Flow_XS_single, Flow_S_single, Flow_S_dual, Flow_M_single, Flow_M_dual, Flow_L_single, Flow_L_dual, Flow_XL_single, - Pressure_S, Pressure_M, Pressure_XL }; + Pressure_S, Pressure_M, Pressure_XL, + Flow_M_plus_dual, Flow_L_plus_dual, + }; /** @Description Sensor calibration table */ enum class fgt_SENSOR_CALIBRATION { None, H2O, IPA, HFE, FC40, OIL }; @@ -92,7 +94,7 @@ extern "C" enum class fgt_LINK_MODULE { None, FlowEZ, PSwitch = 3, SwitchEZ = 4 }; /** @Description Valve type */ - enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch }; + enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch, M_X, Two_X, L_X }; /** @Description Switch direction type */ enum class fgt_SWITCH_DIRECTION { Shortest, Anticlockwise, Clockwise }; @@ -351,6 +353,16 @@ typedef struct */ unsigned char FGT_API fgt_get_sensorValueEx(unsigned int sensorIndex, float* value, unsigned short* timeStamp); + /** + * @Description Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + * @param sensorIndex Index of sensor channel or unique ID + * @out detected 1 if an air bubble was detected, 0 otherwise. + * @return fgt_ERROR_CODE + * @see fgt_get_sensorStatus + */ + unsigned char FGT_API fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected); + /** * @Description Read the position of a specific valve channel. * @param valveIndex Index of valve channel @@ -660,6 +672,24 @@ typedef struct */ unsigned char FGT_API fgt_set_manual(unsigned int pressureIndex, float value); + /** + * @Description Set the digital output ON or OFF on a controller + * This feature is only available on the F-OEM device. + * @param controllerIndex Index of controller or unique ID + * @param port Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + * @param state 0: OFF, 1:ON + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char port, unsigned char state); + + /** + * @Description Returns the pressure measured at the device's inlet. + * This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + * @param pressureIndex Index of pressure channel or unique ID + * @out pressure Inlet pressure value in selected unit, default is "mbar" + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_get_inletPressure(unsigned int pressureIndex, float* pressure); #ifdef __cplusplus } diff --git a/LabVIEW/dlls/fgt_SDK_32.dll b/LabVIEW/dlls/fgt_SDK_32.dll index 223ddf1..ec669e0 100644 Binary files a/LabVIEW/dlls/fgt_SDK_32.dll and b/LabVIEW/dlls/fgt_SDK_32.dll differ diff --git a/LabVIEW/dlls/fgt_SDK_64.dll b/LabVIEW/dlls/fgt_SDK_64.dll index 56d89cd..767ea89 100644 Binary files a/LabVIEW/dlls/fgt_SDK_64.dll and b/LabVIEW/dlls/fgt_SDK_64.dll differ diff --git a/LabVIEW/sourceCode/TypeDefs/fgt_INSTRUMENT_TYPE.ctl b/LabVIEW/sourceCode/TypeDefs/fgt_INSTRUMENT_TYPE.ctl index a409f38..e148a4a 100644 Binary files a/LabVIEW/sourceCode/TypeDefs/fgt_INSTRUMENT_TYPE.ctl and b/LabVIEW/sourceCode/TypeDefs/fgt_INSTRUMENT_TYPE.ctl differ diff --git a/LabVIEW/sourceCode/TypeDefs/fgt_SENSOR_TYPE.ctl b/LabVIEW/sourceCode/TypeDefs/fgt_SENSOR_TYPE.ctl index 1cd8268..19c889c 100644 Binary files a/LabVIEW/sourceCode/TypeDefs/fgt_SENSOR_TYPE.ctl and b/LabVIEW/sourceCode/TypeDefs/fgt_SENSOR_TYPE.ctl differ diff --git a/LabVIEW/sourceCode/TypeDefs/fgt_VALVE_TYPE.ctl b/LabVIEW/sourceCode/TypeDefs/fgt_VALVE_TYPE.ctl index f2ec1c9..c4664e5 100644 Binary files a/LabVIEW/sourceCode/TypeDefs/fgt_VALVE_TYPE.ctl and b/LabVIEW/sourceCode/TypeDefs/fgt_VALVE_TYPE.ctl differ diff --git a/LabVIEW/sourceCode/VIs/Specific functions/fgt get inlet Pressure.vi b/LabVIEW/sourceCode/VIs/Specific functions/fgt get inlet Pressure.vi new file mode 100644 index 0000000..32c38aa Binary files /dev/null and b/LabVIEW/sourceCode/VIs/Specific functions/fgt get inlet Pressure.vi differ diff --git a/LabVIEW/sourceCode/VIs/Specific functions/fgt get sensor Air Bubble Flag.vi b/LabVIEW/sourceCode/VIs/Specific functions/fgt get sensor Air Bubble Flag.vi new file mode 100644 index 0000000..af336c8 Binary files /dev/null and b/LabVIEW/sourceCode/VIs/Specific functions/fgt get sensor Air Bubble Flag.vi differ diff --git a/LabVIEW/sourceCode/VIs/Specific functions/fgt set digital Output.vi b/LabVIEW/sourceCode/VIs/Specific functions/fgt set digital Output.vi new file mode 100644 index 0000000..984d3a3 Binary files /dev/null and b/LabVIEW/sourceCode/VIs/Specific functions/fgt set digital Output.vi differ diff --git a/LabVIEW/sourceCode/fgt_SDK.lvlib b/LabVIEW/sourceCode/fgt_SDK.lvlib index 4799c5b..5a737ad 100644 --- a/LabVIEW/sourceCode/fgt_SDK.lvlib +++ b/LabVIEW/sourceCode/fgt_SDK.lvlib @@ -17,6 +17,7 @@ + @@ -26,6 +27,7 @@ + @@ -60,6 +62,7 @@ + diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_inletPressure.m b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_inletPressure.m new file mode 100644 index 0000000..20c4b30 --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_inletPressure.m @@ -0,0 +1,8 @@ +function [error_code, pressure] = fgt_get_inletPressure( pressureIndex ) +%FGT_GET_INLETPRESSURE Summary of this function goes here +% Detailed explanation goes here +load_fgt +pressure = 0; +[error_code, pressure] = calllib('fgt_sdk', 'fgt_get_inletPressure', pressureIndex, pressure); +end + diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_sensorAirBubbleFlag.m b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_sensorAirBubbleFlag.m new file mode 100644 index 0000000..c56734b --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_get_sensorAirBubbleFlag.m @@ -0,0 +1,9 @@ +function [error_code, bubble_flag] = fgt_get_sensorAirBubbleFlag( sensorIndex ) +%fgt_get_sensorAirBubbleFlag Summary of this function goes here +% Detailed explanation goes here +load_fgt +bubble_flag = 0; +[error_code, bubble_flag] = calllib('fgt_sdk', 'fgt_get_sensorAirBubbleFlag', sensorIndex, bubble_flag); + +end + diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_set_digitalOutput.m b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_set_digitalOutput.m new file mode 100644 index 0000000..7f3f09f --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/fgt_set_digitalOutput.m @@ -0,0 +1,8 @@ +function [ error_code ] = fgt_set_digitalOutput( controllerIndex, port, state ) +%FGT_SET_DIGITALOUTPUT Summary of this function goes here +% Detailed explanation goes here +load_fgt +[error_code] = calllib('fgt_sdk', 'fgt_set_digitalOutput', controllerIndex, port, state); + +end + diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32.dll b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32.dll index 223ddf1..ec669e0 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32.dll and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32.dll differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32_prototype.m b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32_prototype.m index bf74dd0..028cfec 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32_prototype.m +++ b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_32_prototype.m @@ -1,7 +1,7 @@ function [methodinfo,structs,enuminfo,ThunkLibName]=fgt_SDK_32_prototype %FGT_SDK_32_PROTOTYPE Create structures to define interfaces found in 'fgt_SDK'. -%This function was generated by loadlibrary.m parser version on Thu Dec 9 17:17:20 2021 +%This function was generated by loadlibrary.m parser version on Fri Apr 1 14:11:51 2022 %perl options:'fgt_SDK.i -outfile=fgt_SDK_32_prototype.m' ival={cell(1,0)}; % change 0 to the actual number of functions to preallocate the data. structs=[];enuminfo=[];fcnNum=1; @@ -49,6 +49,8 @@ fcns.name{fcnNum}='fgt_get_sensorValue'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr'};fcnNum=fcnNum+1; % unsigned char _stdcall fgt_get_sensorValueEx ( unsigned int sensorIndex , float * value , unsigned short * timeStamp ); fcns.name{fcnNum}='fgt_get_sensorValueEx'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr', 'uint16Ptr'};fcnNum=fcnNum+1; +% unsigned char _stdcall fgt_get_sensorAirBubbleFlag ( unsigned int sensorIndex , unsigned char * detected ); +fcns.name{fcnNum}='fgt_get_sensorAirBubbleFlag'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8Ptr'};fcnNum=fcnNum+1; % unsigned char _stdcall fgt_get_valvePosition ( unsigned int valveIndex , int * position ); fcns.name{fcnNum}='fgt_get_valvePosition'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'int32Ptr'};fcnNum=fcnNum+1; % unsigned char _stdcall fgt_set_valvePosition ( unsigned int valveIndex , int position , fgt_switch_direction_t direction , int wait ); @@ -107,6 +109,10 @@ fcns.name{fcnNum}='fgt_set_purge'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8'};fcnNum=fcnNum+1; % unsigned char _stdcall fgt_set_manual ( unsigned int pressureIndex , float value ); fcns.name{fcnNum}='fgt_set_manual'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'single'};fcnNum=fcnNum+1; +% unsigned char _stdcall fgt_set_digitalOutput ( unsigned int controllerIndex , unsigned char port , unsigned char state ); +fcns.name{fcnNum}='fgt_set_digitalOutput'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8', 'uint8'};fcnNum=fcnNum+1; +% unsigned char _stdcall fgt_get_inletPressure ( unsigned int pressureIndex , float * pressure ); +fcns.name{fcnNum}='fgt_get_inletPressure'; fcns.calltype{fcnNum}='stdcall'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr'};fcnNum=fcnNum+1; structs.fgt_CHANNEL_INFO.members=struct('ControllerSN', 'uint16', 'firmware', 'uint16', 'DeviceSN', 'uint16', 'position', 'uint32', 'index', 'uint32', 'indexID', 'uint32', 'InstrType', 'int32'); structs.fgt_CONTROLLER_INFO.members=struct('SN', 'uint16', 'Firmware', 'uint16', 'id', 'uint32', 'InstrType', 'int32'); methodinfo=fcns; \ No newline at end of file diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64.dll b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64.dll index 56d89cd..767ea89 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64.dll and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64.dll differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64_prototype.m b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64_prototype.m index a1f690b..7dd301a 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64_prototype.m +++ b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_SDK_64_prototype.m @@ -1,7 +1,7 @@ function [methodinfo,structs,enuminfo,ThunkLibName]=fgt_SDK_64_prototype %FGT_SDK_64_PROTOTYPE Create structures to define interfaces found in 'fgt_SDK'. -%This function was generated by loadlibrary.m parser version on Thu Dec 9 17:17:20 2021 +%This function was generated by loadlibrary.m parser version on Fri Apr 1 14:11:51 2022 %perl options:'fgt_SDK.i -outfile=fgt_SDK_64_prototype.m -thunkfile=fgt_sdk_thunk_pcwin64.c -header=fgt_SDK.h' ival={cell(1,0)}; % change 0 to the actual number of functions to preallocate the data. structs=[];enuminfo=[];fcnNum=1; @@ -50,6 +50,8 @@ fcns.thunkname{fcnNum}='uint8uint32voidPtrThunk';fcns.name{fcnNum}='fgt_get_sensorValue'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr'};fcnNum=fcnNum+1; % unsigned char __stdcall fgt_get_sensorValueEx ( unsigned int sensorIndex , float * value , unsigned short * timeStamp ); fcns.thunkname{fcnNum}='uint8uint32voidPtrvoidPtrThunk';fcns.name{fcnNum}='fgt_get_sensorValueEx'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr', 'uint16Ptr'};fcnNum=fcnNum+1; +% unsigned char __stdcall fgt_get_sensorAirBubbleFlag ( unsigned int sensorIndex , unsigned char * detected ); +fcns.thunkname{fcnNum}='uint8uint32voidPtrThunk';fcns.name{fcnNum}='fgt_get_sensorAirBubbleFlag'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8Ptr'};fcnNum=fcnNum+1; % unsigned char __stdcall fgt_get_valvePosition ( unsigned int valveIndex , int * position ); fcns.thunkname{fcnNum}='uint8uint32voidPtrThunk';fcns.name{fcnNum}='fgt_get_valvePosition'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'int32Ptr'};fcnNum=fcnNum+1; % unsigned char __stdcall fgt_set_valvePosition ( unsigned int valveIndex , int position , fgt_switch_direction_t direction , int wait ); @@ -108,6 +110,10 @@ fcns.thunkname{fcnNum}='uint8uint32uint8Thunk';fcns.name{fcnNum}='fgt_set_purge'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8'};fcnNum=fcnNum+1; % unsigned char __stdcall fgt_set_manual ( unsigned int pressureIndex , float value ); fcns.thunkname{fcnNum}='uint8uint32floatThunk';fcns.name{fcnNum}='fgt_set_manual'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'single'};fcnNum=fcnNum+1; +% unsigned char __stdcall fgt_set_digitalOutput ( unsigned int controllerIndex , unsigned char port , unsigned char state ); +fcns.thunkname{fcnNum}='uint8uint32uint8uint8Thunk';fcns.name{fcnNum}='fgt_set_digitalOutput'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'uint8', 'uint8'};fcnNum=fcnNum+1; +% unsigned char __stdcall fgt_get_inletPressure ( unsigned int pressureIndex , float * pressure ); +fcns.thunkname{fcnNum}='uint8uint32voidPtrThunk';fcns.name{fcnNum}='fgt_get_inletPressure'; fcns.calltype{fcnNum}='Thunk'; fcns.LHS{fcnNum}='uint8'; fcns.RHS{fcnNum}={'uint32', 'singlePtr'};fcnNum=fcnNum+1; structs.fgt_CHANNEL_INFO.members=struct('ControllerSN', 'uint16', 'firmware', 'uint16', 'DeviceSN', 'uint16', 'position', 'uint32', 'index', 'uint32', 'indexID', 'uint32', 'InstrType', 'int32'); structs.fgt_CONTROLLER_INFO.members=struct('SN', 'uint16', 'Firmware', 'uint16', 'id', 'uint32', 'InstrType', 'int32'); methodinfo=fcns; \ No newline at end of file diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.dll b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.dll index 46f27df..a640bb2 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.dll and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.dll differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.exp b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.exp index 2290e6d..b245a53 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.exp and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.exp differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.lib b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.lib index aac1582..7d07f3d 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.lib and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.lib differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.obj b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.obj index f4f7a8f..a461df7 100644 Binary files a/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.obj and b/MATLAB/Toolbox/SDK/Fluigent/+LowLevel/private/fgt_sdk_thunk_pcwin64.obj differ diff --git a/MATLAB/Toolbox/SDK/Fluigent/Contents.m b/MATLAB/Toolbox/SDK/Fluigent/Contents.m index 22b453e..1625c41 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/Contents.m +++ b/MATLAB/Toolbox/SDK/Fluigent/Contents.m @@ -6,6 +6,7 @@ % fgt_SENSOR_CALIBRATION - Calibration table to be used by the sensor % fgt_SENSOR_TYPE - Fluigent sensor available types and ranges % fgt_TTL_MODE - TTL port direction and pulse type +% fgt_VALVE_TYPE - Fluigent valve types % % Functions % fgt_calibratePressure - Calibrate internal pressure sensor. diff --git a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_INSTRUMENT_TYPE.m b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_INSTRUMENT_TYPE.m index e1ede20..3f6b0a7 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_INSTRUMENT_TYPE.m +++ b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_INSTRUMENT_TYPE.m @@ -8,7 +8,8 @@ FRP (3), LineUP (4), IPS (5), - ESS (6) + ESS (6), + F_OEM (7), end properties diff --git a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_SENSOR_TYPE.m b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_SENSOR_TYPE.m index e381b80..016445a 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_SENSOR_TYPE.m +++ b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_SENSOR_TYPE.m @@ -14,6 +14,8 @@ Pressure_S (9), Pressure_M (10), Pressure_XL (11), + Flow_M_plus_dual (12), + Flow_L_plus_dual (13), end properties diff --git a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_VALVE_TYPE.m b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_VALVE_TYPE.m index 6399487..7686517 100644 --- a/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_VALVE_TYPE.m +++ b/MATLAB/Toolbox/SDK/Fluigent/enums/fgt_VALVE_TYPE.m @@ -7,6 +7,9 @@ TwoSwitch (2), LSwitch (3), PSwitch (4), + M_X (5), + Two_X (6), + L_X(7), end properties diff --git a/MATLAB/Toolbox/SDK/Fluigent/fgt_get_inletPressure.m b/MATLAB/Toolbox/SDK/Fluigent/fgt_get_inletPressure.m new file mode 100644 index 0000000..bf5ec85 --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/fgt_get_inletPressure.m @@ -0,0 +1,18 @@ +function varargout = fgt_get_inletPressure( pressureIndex ) +%FGT_GET_INLETPRESSURE Read the pressure measured at the device's inlet. +% +% This feature is only available on LineUP Flow EZ and FOEM Pressure +% Module instruments. +% +% pressure = fgt_get_inletPressure( pressureIndex ) returns the channel's +% inlet pressure in the selected unit, default is 'mbar' +% +% [pressure, error_code] = fgt_get_inletPressure( pressureIndex ) +% also returns the error code returned by the library function + +[error_code, pressure] = LowLevel.fgt_get_inletPressure(pressureIndex); +manage_pressure_status('fgt_get_inletPressure', pressureIndex); +error_code = fgt_ERROR_CODE(error_code); +varargout = {pressure, error_code}; +end + diff --git a/MATLAB/Toolbox/SDK/Fluigent/fgt_get_sensorAirBubbleFlag.m b/MATLAB/Toolbox/SDK/Fluigent/fgt_get_sensorAirBubbleFlag.m new file mode 100644 index 0000000..8e99816 --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/fgt_get_sensorAirBubbleFlag.m @@ -0,0 +1,15 @@ +function varargout = fgt_get_sensorAirBubbleFlag( sensorIndex ) +%FGT_GET_SENSORAIRBUBBLEFLAG Read the air bubble detected flag from a Flow Unit +% +% flag = fgt_get_sensorAirBubbleFlag( sensorIndex ) 1 if an air bubble was +% detected, 0 otherwise. Only available for Flow Unit ranges M+ and L+. +% +% [flag, error_code] = fgt_get_sensorAirBubbleFlag( sensorIndex ) +% also returns the error code returned by the library function. + +[error_code, bubble_flag] = LowLevel.fgt_get_sensorAirBubbleFlag(sensorIndex); +manage_sensor_status('fgt_get_sensorAirBubbleFlag', sensorIndex); +error_code = fgt_ERROR_CODE(error_code); +varargout = {bubble_flag, error_code}; +end + diff --git a/MATLAB/Toolbox/SDK/Fluigent/fgt_set_digitalOutput.m b/MATLAB/Toolbox/SDK/Fluigent/fgt_set_digitalOutput.m new file mode 100644 index 0000000..962e1f0 --- /dev/null +++ b/MATLAB/Toolbox/SDK/Fluigent/fgt_set_digitalOutput.m @@ -0,0 +1,20 @@ +function varargout = fgt_set_digitalOutput( controllerIndex, port, state ) +%FGT_SET_DIGITALOUTPUT Turns the digital output on or off +% +% fgt_set_digitalOutput(controllerIndex, port, state) turns the digital +% output ON if state is 1 and OFF if state is 0. +% +% error_code = fgt_set_digitalOutput(controllerIndex, port, state) also +% returns the error code returned by the library function. +% +% This feature is only available on F-OEM devices. +% On the F-OEM, port 0 corresponds to the pump output, and port 1 +% corresponds to the LED + +error_code = LowLevel.fgt_set_digitalOutput( controllerIndex, port, state ); +manage_generic_status('fgt_set_digitalOutput', error_code); +if nargout > 0 + varargout = {fgt_ERROR_CODE(error_code)}; +end +end + diff --git a/Python/Fluigent/SDK/__init__.py b/Python/Fluigent/SDK/__init__.py index 6a18291..320b94b 100644 --- a/Python/Fluigent/SDK/__init__.py +++ b/Python/Fluigent/SDK/__init__.py @@ -5,7 +5,7 @@ from . import low_level from . import exceptions -__version__ = "21.4.0" +__version__ = "22.0.0" # Enums class fgt_ERROR(low_level.fgt_ERROR): @@ -974,7 +974,23 @@ def fgt_set_manual(pressure_index, voltage): c_error, = low_level_function(pressure_index, voltage) exceptions.manage_pressure_status(low_level_function.__name__, pressure_index) return fgt_ERROR(c_error) + +def fgt_set_digitalOutput(controller_index, port, state): + """Activate/deactivate purge function. + This feature is only available on F-OEM devices. + + Args: + controller_index: Index of controller or unique ID + port: Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + state 0: OFF, 1:ON + """ + controller_index = int(controller_index) + low_level_function = low_level.fgt_set_digitalOutput + c_error, = low_level_function(controller_index, port, state) + exceptions.manage_generic_status(low_level_function.__name__, c_error) + return fgt_ERROR(c_error) + def fgt_detect(): """Detect all connected Fluigent instruments. @@ -989,6 +1005,44 @@ def fgt_detect(): n_instruments, serial_numbers, instr_types = low_level_function() return serial_numbers, [fgt_INSTRUMENT_TYPE(i) for i in instr_types] +def fgt_get_inletPressure(pressure_index, get_error = _get_error): + """Returns the pressure measured at the device's inlet. + This feature is only available on LineUP Flow EZ and FOEM Pressure Module + instruments. + + Args: + pressure_index: Index of pressure channel or unique ID + + Returns: + pressure Inlet pressure value in selected unit, default is "mbar" + + See also: + fgt_get_pressureStatus + """ + pressure_index = int(pressure_index) + c_error, pressure = low_level.fgt_get_inletPressure(pressure_index) + exceptions.manage_pressure_status("fgt_get_inletPressure", pressure_index) + c_error = fgt_ERROR(c_error) + return (c_error, pressure) if get_error else pressure + +def fgt_get_sensorAirBubbleFlag(sensor_index, get_error = _get_error): + """Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + + Args: + sensor_index Index of sensor channel or unique ID + + Returns + 0: no air bubble is detected + 1: an air bubble is detected + """ + sensor_index = int(sensor_index) + low_level_function = low_level.fgt_get_sensorAirBubbleFlag + c_error, bubble_detected = low_level_function(sensor_index) + exceptions.manage_sensor_status(low_level_function.__name__, sensor_index) + c_error = fgt_ERROR(c_error) + return (c_error, bubble_detected) if get_error else bubble_detected + def fgt_set_errorReportMode(mode): """Sets a flag that defines how SDK errors should be reported. diff --git a/Python/Fluigent/SDK/low_level.py b/Python/Fluigent/SDK/low_level.py index 27483e6..13eadb4 100644 --- a/Python/Fluigent/SDK/low_level.py +++ b/Python/Fluigent/SDK/low_level.py @@ -130,16 +130,17 @@ def make_enum(className, *sequential, **named): "NONE", "Flow_XS_single", "Flow_S_single", "Flow_S_dual", "Flow_M_single", "Flow_M_dual", "Flow_L_single", "Flow_L_dual", "Flow_XL_single", - "Pressure_S", "Pressure_M", "Pressure_XL") + "Pressure_S", "Pressure_M", "Pressure_XL", + "Flow_M_plus_dual", "Flow_L_plus_dual") fgt_INSTRUMENT_TYPE = make_enum("fgt_INSTRUMENT_TYPE", - "NONE","MFCS","MFCS_EZ","FRP","LineUP", "IPS", "ESS") + "NONE","MFCS","MFCS_EZ","FRP","LineUP", "IPS", "ESS", "F_OEM") fgt_SENSOR_CALIBRATION = make_enum("fgt_SENSOR_CALIBRATION", "NONE", "H2O", "IPA", "HFE", "FC40", "OIL") -fgt_VALVE_TYPE = make_enum("fgt_VALVE_TYPE", "NONE", "MSwitch", "TwoSwitch", "LSwitch", "PSwitch") +fgt_VALVE_TYPE = make_enum("fgt_VALVE_TYPE", "NONE", "MSwitch", "TwoSwitch", "LSwitch", "PSwitch", "M_X", "Two_X", "L_X") fgt_SWITCH_DIRECTION = make_enum("fgt_SWITCH_DIRECTION", "Shortest", "Anticlockwise", "Clockwise") @@ -233,10 +234,13 @@ class fgt_CONTROLLER_INFO(fgt_STRUCT): lib.fgt_trigger_Ttl.argtypes = [c_uint] lib.fgt_set_purge.argtypes = [c_uint, c_ubyte] lib.fgt_set_manual.argtypes = [c_uint, c_float] +lib.fgt_set_digitalOutput.argtypes = [c_uint, c_ubyte, c_ubyte] lib.fgt_detect.argtypes = [POINTER(c_ushort), POINTER(c_int)] lib.fgt_get_valvePosition.argtypes = [c_uint, POINTER(c_int)] lib.fgt_set_valvePosition.argtypes = [c_uint, c_int, c_int, c_int] lib.fgt_set_allValves.argtypes = [c_uint, c_uint, c_int] +lib.fgt_get_inletPressure.argtypes = [c_uint, POINTER(c_float)] +lib.fgt_get_sensorAirBubbleFlag.argtypes = [c_uint, POINTER(c_ubyte)] # Wrappers @@ -565,6 +569,12 @@ def fgt_set_manual(pressure_index, voltage): c_error = c_ubyte(lib.fgt_set_manual(c_uint(pressure_index), c_float(voltage))) return c_error.value, +def fgt_set_digitalOutput(controller_index, port, state): + """Sets the digital output on or off on the specified controller. + Only available on F-OEM""" + c_error = c_ubyte(lib.fgt_set_digitalOutput(c_uint(controller_index), c_ubyte(port), c_ubyte(state))) + return c_error.value, + def fgt_detect(): """Returns a list containing the serial numbers of all detected instruments and another list containing their types""" @@ -586,3 +596,15 @@ def fgt_set_valvePosition(valve_index, position, direction, wait): def fgt_set_allValves(controller_index, module_index, position): c_error = c_ubyte(lib.fgt_set_allValves(c_uint(controller_index),c_uint(module_index), c_int(position))) return c_error.value, + +def fgt_get_inletPressure(pressure_index): + """Returns the supply pressure on the specified channel, if available""" + pressure = c_float(0) + c_error = c_ubyte(lib.fgt_get_inletPressure(c_uint(pressure_index), byref(pressure))) + return c_error.value, pressure.value + +def fgt_get_sensorAirBubbleFlag(sensor_index): + """RRead the flag indicating whether the flow rate sensor detects an air bubble.""" + bubble_detected = c_ubyte(0) + c_error = c_ubyte(lib.fgt_get_sensorAirBubbleFlag(c_uint(sensor_index), byref(bubble_detected))) + return c_error.value, bubble_detected.value diff --git a/Python/Fluigent/SDK/shared/linux/arm/libfgt_SDK.so b/Python/Fluigent/SDK/shared/linux/arm/libfgt_SDK.so index 39bf48a..56f4351 100644 Binary files a/Python/Fluigent/SDK/shared/linux/arm/libfgt_SDK.so and b/Python/Fluigent/SDK/shared/linux/arm/libfgt_SDK.so differ diff --git a/Python/Fluigent/SDK/shared/linux/arm64/libfgt_SDK.so b/Python/Fluigent/SDK/shared/linux/arm64/libfgt_SDK.so index 8f43043..173cdbd 100644 Binary files a/Python/Fluigent/SDK/shared/linux/arm64/libfgt_SDK.so and b/Python/Fluigent/SDK/shared/linux/arm64/libfgt_SDK.so differ diff --git a/Python/Fluigent/SDK/shared/linux/x64/libfgt_SDK.so b/Python/Fluigent/SDK/shared/linux/x64/libfgt_SDK.so index 914e8b8..7d85643 100644 Binary files a/Python/Fluigent/SDK/shared/linux/x64/libfgt_SDK.so and b/Python/Fluigent/SDK/shared/linux/x64/libfgt_SDK.so differ diff --git a/Python/Fluigent/SDK/shared/mac/x64/libfgt_SDK.dylib b/Python/Fluigent/SDK/shared/mac/x64/libfgt_SDK.dylib index 9883b6e..09f2006 100644 Binary files a/Python/Fluigent/SDK/shared/mac/x64/libfgt_SDK.dylib and b/Python/Fluigent/SDK/shared/mac/x64/libfgt_SDK.dylib differ diff --git a/Python/Fluigent/SDK/shared/windows/x64/fgt_SDK.dll b/Python/Fluigent/SDK/shared/windows/x64/fgt_SDK.dll index 56d89cd..767ea89 100644 Binary files a/Python/Fluigent/SDK/shared/windows/x64/fgt_SDK.dll and b/Python/Fluigent/SDK/shared/windows/x64/fgt_SDK.dll differ diff --git a/Python/Fluigent/SDK/shared/windows/x86/fgt_SDK.dll b/Python/Fluigent/SDK/shared/windows/x86/fgt_SDK.dll index 223ddf1..ec669e0 100644 Binary files a/Python/Fluigent/SDK/shared/windows/x86/fgt_SDK.dll and b/Python/Fluigent/SDK/shared/windows/x86/fgt_SDK.dll differ diff --git a/README.md b/README.md index 12a3690..c1c51a6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Fluigent Software Developement Kit - version 21.4.0 +# Fluigent Software Developement Kit - version 22.0.0 # Overview The Fluigent Software Development Kit (SDK) allows you to fully integrate Fluigent devices in your application; diff --git a/Shared/fgt_SDK.h b/Shared/fgt_SDK.h index 084a5fc..e53327b 100644 --- a/Shared/fgt_SDK.h +++ b/Shared/fgt_SDK.h @@ -1,13 +1,13 @@ /*============================================================================ * Fluigent Software Developement Kit *---------------------------------------------------------------------------- -* Copyright (c) Fluigent 2021. All Rights Reserved. +* Copyright (c) Fluigent 2022. All Rights Reserved. *---------------------------------------------------------------------------- * * Title: fgt_SDK.h * Purpose: Functions API for Fluigent instruments -* Version: 21.4.0.0 -* Date: 12/2021 +* Version: 22.0.0.0 +* Date: 04/2022 *============================================================================*/ #ifndef _FGT_SDK_H @@ -71,13 +71,15 @@ extern "C" }; /** @Description Instrument controller type */ - enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS }; + enum class fgt_INSTRUMENT_TYPE { None, MFCS, MFCS_EZ, FRP, LineUP, IPS, ESS, F_OEM }; /** @Description Sensor type */ enum class fgt_SENSOR_TYPE { None, Flow_XS_single, Flow_S_single, Flow_S_dual, Flow_M_single, Flow_M_dual, Flow_L_single, Flow_L_dual, Flow_XL_single, - Pressure_S, Pressure_M, Pressure_XL }; + Pressure_S, Pressure_M, Pressure_XL, + Flow_M_plus_dual, Flow_L_plus_dual, + }; /** @Description Sensor calibration table */ enum class fgt_SENSOR_CALIBRATION { None, H2O, IPA, HFE, FC40, OIL }; @@ -92,7 +94,7 @@ extern "C" enum class fgt_LINK_MODULE { None, FlowEZ, PSwitch = 3, SwitchEZ = 4 }; /** @Description Valve type */ - enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch }; + enum class fgt_VALVE_TYPE { None, MSwitch, TwoSwitch, LSwitch, PSwitch, M_X, Two_X, L_X }; /** @Description Switch direction type */ enum class fgt_SWITCH_DIRECTION { Shortest, Anticlockwise, Clockwise }; @@ -351,6 +353,16 @@ typedef struct */ unsigned char FGT_API fgt_get_sensorValueEx(unsigned int sensorIndex, float* value, unsigned short* timeStamp); + /** + * @Description Read the flag indicating whether the flow rate sensor detects an air bubble. Only + available on Flow Unit sensor ranges M+ and L+. + * @param sensorIndex Index of sensor channel or unique ID + * @out detected 1 if an air bubble was detected, 0 otherwise. + * @return fgt_ERROR_CODE + * @see fgt_get_sensorStatus + */ + unsigned char FGT_API fgt_get_sensorAirBubbleFlag(unsigned int sensorIndex, unsigned char* detected); + /** * @Description Read the position of a specific valve channel. * @param valveIndex Index of valve channel @@ -660,6 +672,24 @@ typedef struct */ unsigned char FGT_API fgt_set_manual(unsigned int pressureIndex, float value); + /** + * @Description Set the digital output ON or OFF on a controller + * This feature is only available on the F-OEM device. + * @param controllerIndex Index of controller or unique ID + * @param port Address of the digital output to toggle. For F-OEM: 0: Pump, 1: LED + * @param state 0: OFF, 1:ON + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_set_digitalOutput(unsigned int controllerIndex, unsigned char port, unsigned char state); + + /** + * @Description Returns the pressure measured at the device's inlet. + * This feature is only available on LineUP Flow EZ and FOEM Pressure Module instruments. + * @param pressureIndex Index of pressure channel or unique ID + * @out pressure Inlet pressure value in selected unit, default is "mbar" + * @return fgt_ERROR_CODE + */ + unsigned char FGT_API fgt_get_inletPressure(unsigned int pressureIndex, float* pressure); #ifdef __cplusplus } diff --git a/Shared/fgt_SDK_32.dll b/Shared/fgt_SDK_32.dll index 223ddf1..ec669e0 100644 Binary files a/Shared/fgt_SDK_32.dll and b/Shared/fgt_SDK_32.dll differ diff --git a/Shared/fgt_SDK_64.dll b/Shared/fgt_SDK_64.dll index 56d89cd..767ea89 100644 Binary files a/Shared/fgt_SDK_64.dll and b/Shared/fgt_SDK_64.dll differ diff --git a/Shared/linux/arm/libfgt_SDK.so b/Shared/linux/arm/libfgt_SDK.so index 39bf48a..56f4351 100644 Binary files a/Shared/linux/arm/libfgt_SDK.so and b/Shared/linux/arm/libfgt_SDK.so differ diff --git a/Shared/linux/arm64/libfgt_SDK.so b/Shared/linux/arm64/libfgt_SDK.so index 8f43043..173cdbd 100644 Binary files a/Shared/linux/arm64/libfgt_SDK.so and b/Shared/linux/arm64/libfgt_SDK.so differ diff --git a/Shared/linux/x64/libfgt_SDK.so b/Shared/linux/x64/libfgt_SDK.so index 914e8b8..7d85643 100644 Binary files a/Shared/linux/x64/libfgt_SDK.so and b/Shared/linux/x64/libfgt_SDK.so differ diff --git a/Shared/mac/x64/libfgt_SDK.dylib b/Shared/mac/x64/libfgt_SDK.dylib index 9883b6e..09f2006 100644 Binary files a/Shared/mac/x64/libfgt_SDK.dylib and b/Shared/mac/x64/libfgt_SDK.dylib differ diff --git a/Shared/windows/x64/fgt_SDK.dll b/Shared/windows/x64/fgt_SDK.dll index 56d89cd..767ea89 100644 Binary files a/Shared/windows/x64/fgt_SDK.dll and b/Shared/windows/x64/fgt_SDK.dll differ diff --git a/Shared/windows/x64/fgt_SDK.lib b/Shared/windows/x64/fgt_SDK.lib index 97e5643..032a6d2 100644 Binary files a/Shared/windows/x64/fgt_SDK.lib and b/Shared/windows/x64/fgt_SDK.lib differ diff --git a/Shared/windows/x86/fgt_SDK.dll b/Shared/windows/x86/fgt_SDK.dll index 223ddf1..ec669e0 100644 Binary files a/Shared/windows/x86/fgt_SDK.dll and b/Shared/windows/x86/fgt_SDK.dll differ diff --git a/Shared/windows/x86/fgt_SDK.lib b/Shared/windows/x86/fgt_SDK.lib index e5a30aa..c2feace 100644 Binary files a/Shared/windows/x86/fgt_SDK.lib and b/Shared/windows/x86/fgt_SDK.lib differ diff --git a/linux-udev.sh b/linux-udev.sh index 5868b1e..4d99be0 100644 --- a/linux-udev.sh +++ b/linux-udev.sh @@ -7,4 +7,5 @@ KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04d8\", ATTRS{idProduct}==\"0002\", MODE KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04d8\", ATTRS{idProduct}==\"0003\", MODE=\"0666\" KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04d8\", ATTRS{idProduct}==\"0010\", MODE=\"0666\" KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04d8\", ATTRS{idProduct}==\"0012\", MODE=\"0666\" +KERNEL==\"hidraw*\", ATTRS{idVendor}==\"04d8\", ATTRS{idProduct}==\"0017\", MODE=\"0666\" " > /etc/udev/rules.d/99-fluigent.rules