Out of the current set of supported models, the Velleman LABPS3005D is
the only device which requires special OVP enable handling. In future
implementations, more quirks could get identified or other models could
be affected. Add a quirks flags field to the models[] table, so that
other driver code paths need not care about individual models.
This commit only provides the flag. Calling code is not adjusted in this
commit, to reduce the diff size and simplify review. There are a lot of
"no quirks" additions in this commit already.
static const double amps_5[] = { 0, 5.1, 0.001, };
static const struct korad_kaxxxxp_model models[] = {
static const double amps_5[] = { 0, 5.1, 0.001, };
static const struct korad_kaxxxxp_model models[] = {
- /* Device enum, vendor, model, ID reply, channels, voltage, current */
+ /* Device enum, vendor, model, ID reply, channels, voltage, current, quirks. */
{KORAD_KA3005P, "Korad", "KA3005P", "KORADKA3005PV2.0",
{KORAD_KA3005P, "Korad", "KA3005P", "KORADKA3005PV2.0",
+ 1, volts_30, amps_5, 0},
/* Sometimes the KA3005P has an extra 0x01 after the ID. */
{KORAD_KA3005P_0X01, "Korad", "KA3005P", "KORADKA3005PV2.0\x01",
/* Sometimes the KA3005P has an extra 0x01 after the ID. */
{KORAD_KA3005P_0X01, "Korad", "KA3005P", "KORADKA3005PV2.0\x01",
+ 1, volts_30, amps_5, 0},
/* Sometimes the KA3005P has an extra 0xBC after the ID. */
{KORAD_KA3005P_0XBC, "Korad", "KA3005P", "KORADKA3005PV2.0\xBC",
/* Sometimes the KA3005P has an extra 0xBC after the ID. */
{KORAD_KA3005P_0XBC, "Korad", "KA3005P", "KORADKA3005PV2.0\xBC",
+ 1, volts_30, amps_5, 0},
{KORAD_KA3005P_V42, "Korad", "KA3005P", "KORAD KA3005P V4.2",
{KORAD_KA3005P_V42, "Korad", "KA3005P", "KORAD KA3005P V4.2",
+ 1, volts_30, amps_5, 0},
{KORAD_KA3005P_V55, "Korad", "KA3005P", "KORAD KA3005P V5.5",
{KORAD_KA3005P_V55, "Korad", "KA3005P", "KORAD KA3005P V5.5",
+ 1, volts_30, amps_5, 0},
{KORAD_KD3005P_V20, "Korad", "KD3005P", "KORAD KD3005P V2.0",
{KORAD_KD3005P_V20, "Korad", "KD3005P", "KORAD KD3005P V2.0",
+ 1, volts_30, amps_5, 0},
{KORAD_KD3005P_V20_NOSP, "Korad", "KD3005P", "KORADKD3005PV2.0",
{KORAD_KD3005P_V20_NOSP, "Korad", "KD3005P", "KORADKD3005PV2.0",
+ 1, volts_30, amps_5, 0},
{KORAD_KD3005P_V21_NOSP, "Korad", "KD3005P", "KORADKD3005PV2.1",
{KORAD_KD3005P_V21_NOSP, "Korad", "KD3005P", "KORADKD3005PV2.1",
+ 1, volts_30, amps_5, 0},
{KORAD_KD3005P_V41, "Korad", "KD3005P", "KORAD KD3005P V4.1",
{KORAD_KD3005P_V41, "Korad", "KD3005P", "KORAD KD3005P V4.1",
+ 1, volts_30, amps_5, 0},
{KORAD_KD3005P_V68, "Korad", "KD3005P", "KORAD KD3005P V6.8",
{KORAD_KD3005P_V68, "Korad", "KD3005P", "KORAD KD3005P V6.8",
+ 1, volts_30, amps_5, 0},
{KORAD_KD6005P, "Korad", "KD6005P", "KORAD KD6005P V2.2",
{KORAD_KD6005P, "Korad", "KD6005P", "KORAD KD6005P V2.2",
+ 1, volts_60, amps_5, 0},
{RND_320_KA3005P, "RND", "KA3005P", "RND 320-KA3005P V5.5",
{RND_320_KA3005P, "RND", "KA3005P", "RND 320-KA3005P V5.5",
+ 1, volts_30, amps_5, 0},
{RND_320_KD3005P, "RND", "KD3005P", "RND 320-KD3005P V4.2",
{RND_320_KD3005P, "RND", "KD3005P", "RND 320-KD3005P V4.2",
+ 1, volts_30, amps_5, 0},
{RND_320K30PV, "RND", "KA3005P", "RND 320-KA3005P V2.0",
{RND_320K30PV, "RND", "KA3005P", "RND 320-KA3005P V2.0",
+ 1, volts_30, amps_5, 0},
{STAMOS_SLS31_V20, "Stamos Soldering", "S-LS-31", "S-LS-31 V2.0",
{STAMOS_SLS31_V20, "Stamos Soldering", "S-LS-31", "S-LS-31 V2.0",
+ 1, volts_30, amps_5, 0},
{TENMA_72_2535_V21, "Tenma", "72-2535", "TENMA 72-2535 V2.1",
{TENMA_72_2535_V21, "Tenma", "72-2535", "TENMA 72-2535 V2.1",
+ 1, volts_30, amps_3, 0},
{TENMA_72_2540_V20, "Tenma", "72-2540", "TENMA72-2540V2.0",
{TENMA_72_2540_V20, "Tenma", "72-2540", "TENMA72-2540V2.0",
+ 1, volts_30, amps_5, 0},
{TENMA_72_2540_V21, "Tenma", "72-2540", "TENMA 72-2540 V2.1",
{TENMA_72_2540_V21, "Tenma", "72-2540", "TENMA 72-2540 V2.1",
+ 1, volts_30, amps_5, 0},
{TENMA_72_2540_V52, "Tenma", "72-2540", "TENMA 72-2540 V5.2",
{TENMA_72_2540_V52, "Tenma", "72-2540", "TENMA 72-2540 V5.2",
+ 1, volts_30, amps_5, 0},
{TENMA_72_2550_V2, "Tenma", "72-2550", "TENMA72-2550V2.0",
{TENMA_72_2550_V2, "Tenma", "72-2550", "TENMA72-2550V2.0",
+ 1, volts_60, amps_3, 0},
{TENMA_72_2710_V66, "Tenma", "72-2710", "TENMA 72-2710 V6.6",
{TENMA_72_2710_V66, "Tenma", "72-2710", "TENMA 72-2710 V6.6",
+ 1, volts_30, amps_5, 0},
{VELLEMAN_LABPS3005D, "Velleman", "LABPS3005D", "VELLEMANLABPS3005DV2.0",
{VELLEMAN_LABPS3005D, "Velleman", "LABPS3005D", "VELLEMANLABPS3005DV2.0",
+ 1, volts_30, amps_5, KORAD_QUIRK_LABPS_OVP_EN},
{VELLEMAN_PS3005D, "Velleman", "PS3005D", "VELLEMANPS3005DV2.0",
{VELLEMAN_PS3005D, "Velleman", "PS3005D", "VELLEMANPS3005DV2.0",
+ 1, volts_30, amps_5, 0},
/* Support for future devices with this protocol. */
};
/* Support for future devices with this protocol. */
};
+enum korad_quirks_flag {
+ KORAD_QUIRK_NONE = 0,
+ KORAD_QUIRK_LABPS_OVP_EN = 1UL << 0,
+ KORAD_QUIRK_ALL = (1UL << 1) - 1,
+};
+
/* Information on single model */
struct korad_kaxxxxp_model {
int model_id; /**< Model info */
/* Information on single model */
struct korad_kaxxxxp_model {
int model_id; /**< Model info */
int channels; /**< Number of channels */
const double *voltage; /**< References: Min, max, step */
const double *current; /**< References: Min, max, step */
int channels; /**< Number of channels */
const double *voltage; /**< References: Min, max, step */
const double *current; /**< References: Min, max, step */
+ enum korad_quirks_flag quirks;