39 lines
950 B
Python
39 lines
950 B
Python
from typing import Dict, Any
|
|
|
|
CHANNEL_STI_0 = 0
|
|
CHANNEL_STI_1 = 1
|
|
|
|
STI_WAVEFORM_POS = 0x00
|
|
STI_WAVEFORM_NEG = 0x01
|
|
STI_WAVEFORM_P2N = 0x02
|
|
STI_WAVEFORM_N2P = 0x03
|
|
|
|
STI_PRECISION_10 = 0
|
|
STI_PRECISION_01 = 1
|
|
|
|
STI_NUM_INFINITE = 1000
|
|
|
|
STI_INSTRUCTION = {
|
|
'GLOBAL': '3b001#header#;1b0;12bCURRENT',
|
|
'LOCAL': '3b010#header;1b0;4b>CHANNEL;3b>STI_MODE;1b>PRECISION;12b>STI_FREQ;10b>STI_PW;10b>STI_PW_IPI;10b>STI_NUM'
|
|
}
|
|
|
|
DEFAULT_PARAMETER = {
|
|
'CURRENT': 10, # uA
|
|
'CHANNEL': CHANNEL_STI_0,
|
|
'STI_MODE': STI_WAVEFORM_POS,
|
|
'PRECISION': STI_PRECISION_10,
|
|
'STI_FREQ': 1000, # Hz
|
|
'STI_PW': 100, # us
|
|
'STI_PW_IPI': 50, # us
|
|
'STI_NUM': STI_NUM_INFINITE,
|
|
}
|
|
|
|
|
|
def validate_frequency_parameter(parameter: Dict[str, Any]) -> bool:
|
|
p = int(parameter['PRECISION'])
|
|
f = int(parameter['STI_FREQ'])
|
|
w = int(parameter['STI_PW'])
|
|
i = int(parameter['STI_PW_IPI'])
|
|
return 1e6 * (1 if p == 0 else 10) / f >= 2 * w + i
|