# MIT License
# Copyright (c) 2020 yaq
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from typing import Optional, Sequence
import struct
def _pack(
msgid: int,
dest: int,
source: int,
*,
param1: int = 0,
param2: int = 0,
data: Optional[bytes] = None
):
if data is not None:
assert param1 == param2 == 0
return struct.pack("<HHBB", msgid, len(data), dest | 0x80, source) + data
else:
return struct.pack("<H2b2B", msgid, param1, param2, dest, source)
[docs]
def mod_identify(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0223, dest, source, param1=chan_ident)
[docs]
def mod_set_chanenablestate(
dest: int, source: int, chan_ident: int, enable_state: int
) -> bytes:
return _pack(0x0210, dest, source, param1=chan_ident, param2=enable_state)
[docs]
def mod_req_chanenablestate(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0211, dest, source, param1=chan_ident)
[docs]
def hw_disconnect(dest: int, source: int) -> bytes:
return _pack(0x0002, dest, source)
[docs]
def hw_start_updatemsgs(dest: int, source: int) -> bytes:
return _pack(0x0011, dest, source)
[docs]
def hw_stop_updatemsgs(dest: int, source: int) -> bytes:
return _pack(0x0012, dest, source)
[docs]
def hw_req_info(dest: int, source: int) -> bytes:
return _pack(0x0005, dest, source)
[docs]
def rack_req_bayused(dest: int, source: int, bay_ident: int) -> bytes:
return _pack(0x0060, dest, source, param1=bay_ident)
[docs]
def hub_req_bayused(dest: int, source: int) -> bytes:
return _pack(0x0065, dest, source)
[docs]
def rack_req_statusbits(dest: int, source: int) -> bytes:
# I suspect there is an error in the docs, and status_bits should be omitted
# This reflects what I think it _should_ be
# - KFS 2020-06-05
return _pack(0x0226, dest, source)
[docs]
def rack_set_digoutputs(dest: int, source: int, dig_outs: Sequence[bool]) -> bytes:
dig_out_param = 0
bit = 1
for i in dig_outs:
if i:
dig_out_param |= bit
bit <<= 1
return _pack(0x0228, dest, source, param1=dig_out_param)
[docs]
def rack_get_digoutputs(dest: int, source: int) -> bytes:
return _pack(0x0229, dest, source)
[docs]
def mod_set_digoutputs(
dest: int, source: int, chan_ident: int, dig_outs: Sequence[bool]
) -> bytes:
dig_out_param = 0
bit = 1
for i in dig_outs:
if i:
dig_out_param |= bit
bit <<= 1
return _pack(0x0213, dest, source, param1=dig_out_param)
[docs]
def mod_req_digoutputs(dest: int, source: int) -> bytes:
# I suspect there is an error in the docs, and bits should be omitted
# This reflects what I think it _should_ be
# - KFS 2020-06-05
return _pack(0x0214, dest, source)
[docs]
def hw_set_kcubemmilock(dest: int, source: int, mmi_lock: int) -> bytes:
return _pack(0x0250, dest, source, param2=mmi_lock)
[docs]
def hw_req_kcubemmilock(dest: int, source: int) -> bytes:
# I suspect there is an error in the docs, and bits should be omitted
# This reflects what I think it _should_ be
# - KFS 2020-06-05
return _pack(0x0251, dest, source)
[docs]
def restorefactorysettings(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0686, dest, source, param1=chan_ident)
[docs]
def hw_yes_flash_programming(dest: int, source: int) -> bytes:
return _pack(0x0017, dest, source)
[docs]
def hw_no_flash_programming(dest: int, source: int) -> bytes:
return _pack(0x0018, dest, source)
[docs]
def mot_set_poscounter(dest: int, source: int, chan_ident: int, position: int) -> bytes:
data = struct.pack("<Hl", chan_ident, position)
return _pack(0x0410, dest, source, data=data)
[docs]
def mot_req_poscounter(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0411, dest, source, param1=chan_ident)
[docs]
def mot_set_enccounter(dest: int, source: int, chan_ident: int, encoder_count) -> bytes:
data = struct.pack("<Hl", chan_ident, encoder_count)
return _pack(0x0409, dest, source, data=data)
[docs]
def mot_req_enccounter(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x040A, dest, source, param1=chan_ident)
[docs]
def mot_set_velparams(
dest: int,
source: int,
chan_ident: int,
min_velocity: int,
acceleration: int,
max_velocity: int,
) -> bytes:
data = struct.pack("<H3l", chan_ident, min_velocity, acceleration, max_velocity)
return _pack(0x0413, dest, source, data=data)
[docs]
def mot_req_velparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0414, dest, source, param1=chan_ident)
[docs]
def mot_set_jogparams(
dest: int,
source: int,
chan_ident: int,
jog_mode: int,
step_size: int,
min_velocity: int,
acceleration: int,
max_velocity: int,
stop_mode: int,
) -> bytes:
data = struct.pack(
"<HH4lH",
chan_ident,
jog_mode,
step_size,
min_velocity,
acceleration,
max_velocity,
stop_mode,
)
return _pack(0x0416, dest, source, data=data)
[docs]
def mot_req_jogparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0417, dest, source, param1=chan_ident)
[docs]
def mot_set_powerparams(
dest: int, source: int, chan_ident: int, rest_factor: int, move_factor: int
) -> bytes:
data = struct.pack("<3H", chan_ident, rest_factor, move_factor)
return _pack(0x0426, dest, source, data=data)
[docs]
def mot_req_powerparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0427, dest, source, param1=chan_ident)
[docs]
def mot_set_genmoveparams(
dest: int, source: int, chan_ident: int, backlash_distance: int
) -> bytes:
data = struct.pack("<Hl", chan_ident, backlash_distance)
return _pack(0x043A, dest, source, data=data)
[docs]
def mot_req_genmoveparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x043B, dest, source, param1=chan_ident)
[docs]
def mot_set_moverelparams(
dest: int, source: int, chan_ident: int, relative_distance: int
) -> bytes:
data = struct.pack("<Hl", chan_ident, relative_distance)
return _pack(0x0445, dest, source, data=data)
[docs]
def mot_req_moverelparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0446, dest, source, param1=chan_ident)
[docs]
def mot_set_moveabsparams(
dest: int, source: int, chan_ident: int, absolute_position: int
) -> bytes:
data = struct.pack("<Hl", chan_ident, absolute_position)
return _pack(0x0450, dest, source, data=data)
[docs]
def mot_req_moveabsparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0451, dest, source, param1=chan_ident)
[docs]
def mot_set_homeparams(
dest: int,
source: int,
chan_ident: int,
home_dir: int,
limit_switch: int,
home_velocity: int,
offset_distance: int,
) -> bytes:
data = struct.pack(
"<3Hll", chan_ident, home_dir, limit_switch, home_velocity, offset_distance
)
return _pack(0x0440, dest, source, data=data)
[docs]
def mot_req_homeparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0441, dest, source, param1=chan_ident)
[docs]
def mot_set_limswitchparams(
dest: int,
source: int,
chan_ident: int,
cw_hardlimit: int,
ccw_hardlimit: int,
cw_softlimit: int,
ccw_softlimit: int,
soft_limit_mode: int,
) -> bytes:
data = struct.pack(
"<3HLLH",
chan_ident,
cw_hardlimit,
ccw_hardlimit,
cw_softlimit,
ccw_softlimit,
soft_limit_mode,
)
return _pack(0x0423, dest, source, data=data)
[docs]
def mot_req_limswitchparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0424, dest, source, param1=chan_ident)
[docs]
def mot_move_home(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0443, dest, source, param1=chan_ident)
[docs]
def mot_move_relative(
dest: int, source: int, chan_ident: int, distance: Optional[int] = None
):
msgid = 0x0448
if distance is None:
return _pack(msgid, dest, source, param1=chan_ident)
else:
data = struct.pack("<Hl", chan_ident, distance)
return _pack(msgid, dest, source, data=data)
[docs]
def mot_move_absolute(
dest: int, source: int, chan_ident: int, position: Optional[int] = None
):
msgid = 0x0453
if position is None:
return _pack(msgid, dest, source, param1=chan_ident)
else:
data = struct.pack("<Hl", chan_ident, position)
return _pack(msgid, dest, source, data=data)
[docs]
def mot_move_jog(dest: int, source: int, chan_ident: int, direction) -> bytes:
return _pack(0x046A, dest, source, param1=chan_ident, param2=direction)
[docs]
def mot_move_velocity(dest: int, source: int, chan_ident: int, direction) -> bytes:
return _pack(0x0457, dest, source, param1=chan_ident, param2=direction)
[docs]
def mot_move_stop(dest: int, source: int, chan_ident: int, stop_mode: int) -> bytes:
return _pack(0x0465, dest, source, param1=chan_ident, param2=stop_mode)
[docs]
def mot_set_bowindex(dest: int, source: int, chan_ident: int, bow_index: int) -> bytes:
data = struct.pack("<HH", chan_ident, bow_index)
return _pack(0x04F4, dest, source, data=data)
[docs]
def mot_req_bowindex(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x04F5, dest, source, param1=chan_ident)
[docs]
def mot_set_dcpidparams(
dest: int,
source: int,
chan_ident: int,
proportional: Optional[int] = None,
integral: Optional[int] = None,
differential: Optional[int] = None,
integral_limit: Optional[int] = None,
) -> bytes:
filter_control = 0
if proportional is not None:
filter_control |= 1
else:
proportional = 0
if integral is not None:
filter_control |= 2
else:
integral = 0
if differential is not None:
filter_control |= 4
else:
differential = 0
if integral_limit is not None:
filter_control |= 8
else:
integral_limit = 0
data = struct.pack(
"<H4LH",
chan_ident,
proportional,
integral,
differential,
integral_limit,
filter_control,
)
return _pack(0x04A0, dest, source, data=data)
[docs]
def mot_req_dcpidparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x04A1, dest, source, param1=chan_ident)
[docs]
def mot_set_avmodes(dest: int, source: int, chan_ident: int, mode_bits: int) -> bytes:
data = struct.pack("<HH", chan_ident, mode_bits)
return _pack(0x04B3, dest, source, data=data)
[docs]
def mot_req_avmodes(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x04B4, dest, source, param1=chan_ident)
[docs]
def mot_set_potparams(
dest: int,
source: int,
chan_ident: int,
zero_wnd: int,
vel1: int,
wnd1: int,
vel2: int,
wnd2: int,
vel3: int,
wnd3: int,
vel4: int,
) -> bytes:
data = struct.pack(
"<HHlHlHlHl", chan_ident, zero_wnd, vel1, wnd1, vel2, wnd2, vel3, wnd3, vel4
)
return _pack(0x04B0, dest, source, data=data)
[docs]
def mot_req_potparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x04B1, dest, source, param1=chan_ident)
[docs]
def mot_set_eepromparams(
dest: int, source: int, chan_ident: int, msgid_param: int
) -> bytes:
data = struct.pack("<HH", chan_ident, msgid_param)
return _pack(0x04B9, dest, source, data=data)
[docs]
def mot_set_positionloopparams(
dest: int,
source: int,
chan_ident: int,
kp_pos: int,
integral: int,
i_lim_pos: int,
differential: int,
kd_time_pos: int,
kout_pos: int,
kaff_pos: int,
pos_err_lim: int,
) -> bytes:
data = struct.pack(
"<3HL5HL2H",
chan_ident,
kp_pos,
integral,
i_lim_pos,
differential,
kd_time_pos,
kout_pos,
kaff_pos,
pos_err_lim,
0,
0,
)
return _pack(0x04D7, dest, source, data=data)
[docs]
def mot_req_positionloopparams(dest: int, source: int, chan_ident: int):
return _pack(0x04D8, dest, source, param1=chan_ident)
[docs]
def mot_set_motoroutputparams(
dest: int,
source: int,
chan_ident: int,
cont_current_lim: int,
energy_lim: int,
motor_lim: int,
motor_bias: int,
) -> bytes:
data = struct.pack(
"<7H", chan_ident, cont_current_lim, energy_lim, motor_lim, motor_bias, 0, 0
)
return _pack(0x04DA, dest, source, data=data)
[docs]
def mot_req_motoroutputparams(dest: int, source: int, chan_ident: int):
return _pack(0x04DB, dest, source, param1=chan_ident)
[docs]
def mot_set_tracksettleparams(
dest: int,
source: int,
chan_ident: int,
time: int,
settle_window: int,
track_window: int,
) -> bytes:
data = struct.pack("<6H", chan_ident, time, settle_window, track_window, 0, 0)
return _pack(0x04E0, dest, source, data=data)
[docs]
def mot_req_tracksettleparams(dest: int, source: int, chan_ident: int):
return _pack(0x04E1, dest, source, param1=chan_ident)
[docs]
def mot_set_profilemodeparams(
dest: int, source: int, chan_ident: int, mode: int, jerk: int
) -> bytes:
data = struct.pack("<HHLHH", chan_ident, mode, jerk, 0, 0)
return _pack(0x04E3, dest, source, data=data)
[docs]
def mot_req_profilemodeparams(dest: int, source: int, chan_ident: int):
return _pack(0x04E4, dest, source, param1=chan_ident)
[docs]
def mot_set_joystickparams(
dest: int,
source: int,
chan_ident: int,
gear_high_max_vel: int,
gear_low_accn: int,
gear_high_accn: int,
dir_sense: int,
) -> bytes:
data = struct.pack(
"<H4LH", chan_ident, gear_high_max_vel, gear_low_accn, gear_high_accn, dir_sense
)
return _pack(0x04E6, dest, source, data=data)
[docs]
def mot_req_joystickparams(dest: int, source: int, chan_ident: int):
return _pack(0x04E7, dest, source, param1=chan_ident)
[docs]
def mot_set_currentloopoarams(
dest: int,
source: int,
chan_ident: int,
phase: int,
kp_current: int,
ki_current: int,
i_lim_current: int,
i_dead_band: int,
kff: int,
) -> bytes:
data = struct.pack(
"<9H",
chan_ident,
phase,
kp_current,
ki_current,
i_lim_current,
i_dead_band,
kff,
0,
0,
)
return _pack(0x04D4, dest, source, data=data)
[docs]
def mot_req_currentloopoarams(dest: int, source: int, chan_ident: int):
return _pack(0x04D5, dest, source, param1=chan_ident)
[docs]
def mot_set_settledcurrentloopparams(
dest: int,
source: int,
chan_ident: int,
phase: int,
kp_settled: int,
ki_settled: int,
i_lim_settled: int,
i_dead_band_settled: int,
kff_settled: int,
) -> bytes:
data = struct.pack(
"<9H",
chan_ident,
phase,
kp_settled,
ki_settled,
i_lim_settled,
i_dead_band_settled,
kff_settled,
0,
0,
)
return _pack(0x04E9, dest, source, data=data)
[docs]
def mot_req_settledcurrentloopparams(dest: int, source: int, chan_ident: int):
return _pack(0x04EA, dest, source, param1=chan_ident)
[docs]
def mot_set_stageaxisparams(
dest: int,
source: int,
chan_ident: int,
stage_id: int,
axis_id: int,
part_no_axis: int,
serial_num: int,
counts_per_unit: int,
min_pos: int,
max_pos: int,
max_accn: int,
max_dec: int,
max_vel: int,
) -> bytes:
data = struct.pack(
"<HHH16sLL5l4H4L",
chan_ident,
stage_id,
axis_id,
part_no_axis,
serial_num,
counts_per_unit,
min_pos,
max_pos,
max_accn,
max_dec,
max_vel,
0,
0,
0,
0,
0,
0,
0,
0,
)
return _pack(0x04F0, dest, source, data=data)
[docs]
def mot_req_stageaxisparams(dest: int, source: int, chan_ident: int):
return _pack(0x04F1, dest, source, param1=chan_ident)
[docs]
def mot_set_tssactuatortype(dest: int, source: int, actuator_ident: int):
return _pack(0x04FE, dest, source, param1=actuator_ident)
[docs]
def mot_ack_dcstatusupdate(dest: int, source: int) -> bytes:
return _pack(0x0492, dest, source)
[docs]
def mot_req_statusupdate(dest: int, source: int, chan_ident: int):
return _pack(0x0480, dest, source, param1=chan_ident)
[docs]
def mot_req_dcstatusupdate(dest: int, source: int, chan_ident: int):
return _pack(0x0490, dest, source, param1=chan_ident)
[docs]
def mot_suspend_endofmovemsges(dest: int, source: int):
return _pack(0x046B, dest, source)
[docs]
def mot_resume_endofmovemsges(dest: int, source: int):
return _pack(0x046C, dest, source)
[docs]
def mot_set_trigger(dest: int, source: int, chan_ident: int, mode: int) -> bytes:
# Mode parameter is a bitfield, built as an (unsigned) int, but _pack expects a signed char
# Convert the python int to equivalent signed 1-byte value
mode &= 0xff
if mode >= 2**7:
mode -= 2**8
return _pack(0x0500, dest, source, param1=chan_ident, param2=mode)
[docs]
def mot_req_trigger(dest: int, source: int, chan_ident: int):
return _pack(0x0501, dest, source, param1=chan_ident)
[docs]
def mot_set_kcubemmiparams(
dest: int,
source: int,
chan_ident: int,
mode: int,
max_vel: int,
accn: int,
dir_sense: int,
pre_set_pos1: int,
pre_set_pos2: int,
disp_brightness: int,
disp_timeout: int,
disp_dim_level: int,
) -> bytes:
data = struct.pack(
"<HHllHll3H",
chan_ident,
mode,
max_vel,
accn,
dir_sense,
pre_set_pos1,
pre_set_pos2,
disp_brightness,
disp_timeout,
disp_dim_level,
)
return _pack(0x0520, dest, source, data=data)
[docs]
def mot_req_kcubemmiparams(dest: int, source: int, chan_ident: int):
return _pack(0x0521, dest, source, param1=chan_ident)
[docs]
def mot_set_kcubetrigioconfig(
dest: int,
source: int,
chan_ident: int,
trig1_mode: int,
trig1_polarity: int,
trig2_mode: int,
trig2_polarity: int,
) -> bytes:
data = struct.pack(
"<6H", chan_ident, trig1_mode, trig1_polarity, trig2_mode, trig2_polarity, 0
)
return _pack(0x0523, dest, source, data=data)
[docs]
def mot_req_kcubetrigconfig(dest: int, source: int, chan_ident: int):
return _pack(0x0524, dest, source, param1=chan_ident)
[docs]
def mot_set_kcubeposttrigparams(
dest: int,
source: int,
chan_ident: int,
start_pos_fwd: int,
interval_fwd: int,
num_pulses_fwd: int,
start_pos_rev: int,
interval_rev: int,
num_pulses_rev: int,
pulse_width: int,
num_cycles: int,
) -> bytes:
data = struct.pack(
"<H8l",
chan_ident,
start_pos_fwd,
interval_fwd,
num_pulses_fwd,
start_pos_rev,
interval_rev,
num_pulses_rev,
pulse_width,
num_cycles,
)
return _pack(0x0526, dest, source, data=data)
[docs]
def mot_req_kcubeposttrigparams(dest: int, source: int, chan_ident: int):
return _pack(0x0527, dest, source, param1=chan_ident)
[docs]
def mot_set_kcubekstloopparams(
dest: int,
source: int,
chan_ident: int,
loop_mode: int,
prop: int,
int: int,
diff: int,
pid_clip: int,
pid_tol: int,
encoder_const: int,
) -> bytes:
data = struct.pack(
"<HH5lL",
chan_ident,
loop_mode,
prop,
int,
diff,
pid_clip,
pid_tol,
encoder_const,
)
return _pack(0x0529, dest, source, data=data)
[docs]
def mot_req_kcubekstloopparams(dest: int, source: int, chan_ident: int):
return _pack(0x052A, dest, source, param1=chan_ident)
[docs]
def mot_set_mmf_operparams(
dest: int,
source: int,
chan_ident: int,
i_tranit_time: int,
i_transit_time_adc: int,
oper_mode1: int,
sig_mode1: int,
pulse_width1: int,
oper_mode2: int,
sig_mode2: int,
pulse_width2: int,
) -> bytes:
data = struct.pack(
"<HllHHlHHllL",
chan_ident,
i_tranit_time,
i_transit_time_adc,
oper_mode1,
sig_mode1,
pulse_width1,
oper_mode2,
sig_mode2,
pulse_width2,
0,
0,
)
return _pack(0x0510, dest, source, data=data)
[docs]
def mot_req_mmf_operparams(dest: int, source: int, chan_ident: int):
return _pack(0x0511, dest, source, param1=chan_ident)
[docs]
def mot_set_sol_operatingmode(
dest: int, source: int, chan_ident: int, mode: int
) -> bytes:
return _pack(0x04C0, dest, source, param1=chan_ident, param2=mode)
[docs]
def mot_req_sol_operatingmode(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x04C1, dest, source, param1=chan_ident)
[docs]
def mot_set_sol_cycleparams(
dest: int, source: int, chan_ident: int, off_time: int, num_cycles: int
) -> bytes:
data = struct.pack("<H3l", chan_ident, off_time, num_cycles)
return _pack(0x04C3, dest, source, data=data)
[docs]
def mot_req_sol_cycleparams(dest: int, source: int, chan_ident: int):
return _pack(0x04C4, dest, source, param1=chan_ident)
[docs]
def mot_set_sol_interlockmode(
dest: int, source: int, chan_ident: int, mode: bool
) -> bytes:
return _pack(0x04C6, dest, source, param1=chan_ident, param2=1 if mode else 2)
[docs]
def mot_req_sol_interlockmode(dest: int, source: int, chan_ident: int):
return _pack(0x04C7, dest, source, param1=chan_ident)
[docs]
def mot_set_sol_state(dest: int, source: int, chan_ident: int, state: bool) -> bytes:
return _pack(0x04CB, dest, source, param1=chan_ident, param2=1 if state else 2)
[docs]
def mot_req_sol_state(dest: int, source: int, chan_ident: int):
return _pack(0x04CC, dest, source, param1=chan_ident)
[docs]
def pz_set_positioncontrolmode(
dest: int, source: int, chan_ident: int, mode: int
) -> bytes:
return _pack(0x0640, dest, source, param1=chan_ident, param2=mode)
[docs]
def pz_req_positioncontrolmode(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0641, dest, source, param1=chan_ident)
[docs]
def pz_set_outputvolts(dest: int, source: int, chan_ident: int, voltage: int) -> bytes:
data = struct.pack("Hh", chan_ident, voltage)
return _pack(0x0643, dest, source, data=data)
[docs]
def pz_req_outputvolts(dest: int, source: int, chan_ident: int):
return _pack(0x0644, dest, source, param1=chan_ident)
[docs]
def pz_set_outputpos(dest: int, source: int, chan_ident: int, position: int) -> bytes:
data = struct.pack("HH", chan_ident, position)
return _pack(0x0646, dest, source, data=data)
[docs]
def pz_req_outputpos(dest: int, source: int, chan_ident: int):
return _pack(0x0647, dest, source, param1=chan_ident)
[docs]
def pz_set_piconsts(
dest: int, source: int, chan_ident: int, PropConst: int, IntConst: int
) -> bytes:
data = struct.pack("HHH", chan_ident, PropConst, IntConst)
return _pack(0x0655, dest, source, data=data)
[docs]
def pz_req_piconsts(dest: int, source: int, chan_ident: int):
return _pack(0x0656, dest, source, param1=chan_ident)
[docs]
def pz_req_pzstatusbits(dest: int, source: int, chan_ident: int):
return _pack(0x065B, dest, source, param1=chan_ident)
[docs]
def pz_req_pzstatusupdate(dest: int, source: int, chan_ident: int):
return _pack(0x0660, dest, source, param1=chan_ident)
[docs]
def pz_ack_pzstatusupdate(dest: int, source: int) -> bytes:
return _pack(0x0662, dest, source)
[docs]
def pz_set_ppc_pidconsts(
dest: int,
source: int,
chan_ident: int,
pid_p: int,
pid_i: int,
pid_d: int,
pid_d_filter_cut: int,
pid_d_filter_on: int,
) -> bytes:
data = struct.pack(
"<HHHHHH", chan_ident, pid_p, pid_i, pid_d, pid_d_filter_cut, pid_d_filter_on
)
return _pack(0x0690, dest, source, data=data)
[docs]
def pz_req_ppc_pidconsts(dest: int, source: int, chan_ident: int):
return _pack(0x0691, dest, source, param1=chan_ident)
[docs]
def pz_set_ppc_notchparams(
dest: int,
source: int,
chan_ident: int,
filter_no: int,
filter1_center: int,
filter1_q: int,
notch_filter_1_on: int,
filter2_center: int,
filter2_q: int,
notch_filter_2_on: int,
) -> bytes:
data = struct.pack(
"<HHHHHHHH",
chan_ident,
filter_no,
filter1_center,
filter1_q,
notch_filter_1_on,
filter2_center,
filter2_q,
notch_filter_2_on,
)
return _pack(0x0693, dest, source, data=data)
[docs]
def pz_req_ppc_notchparams(dest: int, source: int, chan_ident: int):
return _pack(0x0694, dest, source, param1=chan_ident)
[docs]
def pz_set_ppc_iosettings(
dest: int,
source: int,
chan_ident: int,
control_src: int,
monitor_out_sig: int,
monitor_out_bandwidth: int,
feedback_src: int,
fp_brightness: int,
) -> bytes:
data = struct.pack(
"<HHHHHHH",
chan_ident,
control_src,
monitor_out_sig,
monitor_out_bandwidth,
feedback_src,
fp_brightness,
0,
)
return _pack(0x0696, dest, source, data=data)
[docs]
def pz_req_ppc_iosettings(dest: int, source: int, chan_ident: int):
return _pack(0x0697, dest, source, param1=chan_ident)
[docs]
def pz_set_outputlut(
dest: int, source: int, chan_ident: int, index: int, output: int
) -> bytes:
data = struct.pack("<HHh", chan_ident, index, output)
return _pack(0x0700, dest, source, data=data)
[docs]
def pz_req_outputlut(dest: int, source: int, chan_ident: int):
return _pack(0x0701, dest, source, param1=chan_ident)
[docs]
def pz_set_outputlutparams(
dest: int,
source: int,
chan_ident: int,
mode: int,
cycle_length: int,
num_cycles: int,
delay_time: int,
pre_cycle_rest: int,
post_cycle_rest: int,
output_trig_start: int,
output_trig_width: int,
trig_rep_cycle: int,
) -> bytes:
data = struct.pack(
"<HHHLLLLHLH",
chan_ident,
mode,
cycle_length,
num_cycles,
delay_time,
pre_cycle_rest,
post_cycle_rest,
output_trig_start,
output_trig_width,
trig_rep_cycle,
)
return _pack(0x0703, dest, source, data=data)
[docs]
def pz_req_outputlutparams(dest: int, source: int, chan_ident: int):
return _pack(0x0704, dest, source, param1=chan_ident)
[docs]
def pz_start_lutoutput(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0706, dest, source, param1=chan_ident)
[docs]
def pz_stop_lutoutput(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x707, dest, source, param1=chan_ident)
[docs]
def pz_set_eepromparams(dest: int, source: int, chan_ident: int, msg_id: int) -> bytes:
data = struct.pack("<HH", chan_ident, msg_id)
return _pack(0x07D0, dest, source, data=data)
[docs]
def pz_set_tpz_dispsettings(dest: int, source: int, disp_intensity: int) -> bytes:
data = struct.pack("<H", disp_intensity)
return _pack(0x07D1, dest, source, data=data)
[docs]
def pz_req_tpz_dispsettings(dest: int, source: int):
return _pack(0x07D2, dest, source)
[docs]
def pz_set_tpz_iosettings(
dest: int, source: int, chan_ident: int, voltage_limit: int, hub_analog_input: int
) -> bytes:
data = struct.pack("<HHHHH", chan_ident, voltage_limit, hub_analog_input, 0, 0)
return _pack(0x07D4, dest, source, data=data)
[docs]
def pz_req_tpz_iosettings(dest: int, source: int, chan_ident: int):
return _pack(0x07D5, dest, source, param1=chan_ident)
[docs]
def pz_set_zero(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0658, dest, source, param1=chan_ident)
[docs]
def pz_req_maxtravel(dest: int, source: int, chan_ident: int):
return _pack(0x0650, dest, source, param1=chan_ident)
[docs]
def pz_set_iosettings(
dest: int,
source: int,
chan_ident: int,
amp_current_limit: int,
amp_lowpass_filter: int,
feedback_sig: int,
bnc_trig_or_lv_output: int,
) -> bytes:
data = struct.pack(
"<HHHHH",
chan_ident,
amp_current_limit,
amp_lowpass_filter,
feedback_sig,
bnc_trig_or_lv_output,
)
return _pack(0x0670, dest, source, data=data)
[docs]
def pz_req_iosettings(dest: int, source: int, chan_ident: int):
return _pack(0x0671, dest, source, param1=chan_ident)
[docs]
def pz_set_outputmaxvolts(
dest: int, source: int, chan_ident: int, voltage: int
) -> bytes:
data = struct.pack("<HHH", chan_ident, voltage, 0)
return _pack(0x0680, dest, source, data=data)
[docs]
def pz_req_outputmaxvolts(dest: int, source: int, chan_ident: int):
return _pack(0x0681, dest, source, param1=chan_ident)
[docs]
def pz_set_tpz_slewrates(
dest: int, source: int, chan_ident: int, slew_open: int, slew_closed: int
) -> bytes:
data = struct.pack("<HHH", chan_ident, slew_open, slew_closed)
return _pack(0x0683, dest, source, data=data)
[docs]
def pz_req_tpz_slewrates(dest: int, source: int, chan_ident: int):
return _pack(0x0684, dest, source, param1=chan_ident)
[docs]
def pz_set_lutvaluetype(dest: int, source: int, lut_type: int) -> bytes:
return _pack(0x0708, dest, source, param1=lut_type)
[docs]
def kpz_set_kcubemmiparams(
dest: int,
source: int,
js_mode: int,
js_volt_gearbox: int,
js_volt_step: int,
dir_sense: int,
preset_volt1: int,
preset_volt2: int,
disp_brightness: int,
disp_timeout: int,
disp_dim_level: int,
) -> bytes:
data = struct.pack(
"<HHHLHLLHHH",
1,
js_mode,
js_volt_gearbox,
js_volt_step,
dir_sense,
preset_volt1,
preset_volt2,
disp_brightness,
disp_timeout,
disp_dim_level,
0,
0,
0,
0,
)
return _pack(0x07F0, dest, source, data=data)
[docs]
def kpz_req_kcubemmiparams(dest: int, source: int):
return _pack(0x07F1, dest, source)
[docs]
def pz_set_tsg_iosettings(
dest: int,
source: int,
hub_analog_output: int,
display_mode: int,
force_calibration: int,
) -> bytes:
data = struct.pack(
"<HHHHHH", 1, hub_analog_output, display_mode, force_calibration, 0, 0
)
return _pack(0x07DA, dest, source, data=data)
[docs]
def pz_req_tsg_iosettings(dest: int, source: int):
return _pack(0x07DB, dest, source)
[docs]
def kpz_set_kcubetrigioconfig(
dest: int,
source: int,
trig1_mode: int,
trig1_polarity: int,
trig2_mode: int,
trig2_polarity: int,
) -> bytes:
data = struct.pack(
"<HHHHHH", 1, trig1_mode, trig1_polarity, trig2_mode, trig2_polarity, 0
)
return _pack(0x07F3, dest, source, data=data)
[docs]
def kpz_req_kcubetrigioconfig(dest: int, source: int):
return _pack(0x07F4, dest, source)
[docs]
def pz_set_tsg_reading(
dest: int, source: int, chan_ident: int, reading: int, smoothed: int
) -> bytes:
data = struct.pack("<Hhh", chan_ident, reading, smoothed)
return _pack(0x07DD, dest, source, data=data)
[docs]
def pz_req_tsg_reading(dest: int, source: int, chan_ident: int):
return _pack(0x07DE, dest, source, param1=chan_ident)
[docs]
def ksg_set_kcubemmiparams(
dest: int,
source: int,
chan_ident: int,
disp_intensity: int,
disp_timeout: int,
disp_dim_level: int,
) -> bytes:
data = struct.pack(
"<HHHH", chan_ident, disp_intensity, disp_timeout, disp_dim_level
)
return _pack(0x07F6, dest, source, data=data)
[docs]
def ksg_req_kcubemmiparams(dest: int, source: int, chan_ident: int):
return _pack(0x07F7, dest, source, param1=chan_ident)
[docs]
def ksg_set_kcubetrigioconfig(
dest: int,
source: int,
trig1_mode: int,
trig1_polarity: int,
trig2_mode: int,
trig2_polarity: int,
lower_lim: int,
upper_lim: int,
smoothing_samples: int,
) -> bytes:
data = struct.pack(
"<HHHHHllHH",
1,
trig1_mode,
trig1_polarity,
trig2_mode,
trig2_polarity,
lower_lim,
upper_lim,
smoothing_samples,
0,
)
return _pack(0x07F9, dest, source, data=data)
[docs]
def ksg_req_kcubetrigioconfig(dest: int, source: int):
return _pack(0x07FA, dest, source)
[docs]
def pz_set_ntmode(dest: int, source: int, state: int) -> bytes:
return _pack(0x0603, dest, source, param1=state)
[docs]
def pz_req_ntmode(dest: int, source: int):
return _pack(0x0604, dest, source)
[docs]
def pz_set_nttrackthreshold(
dest: int, source: int, threshold_abs_reading: int
) -> bytes:
data = struct.pack("<f", threshold_abs_reading)
return _pack(0x0606, dest, source, data=data)
[docs]
def pz_req_nttrackthreshold(dest: int, source: int):
return _pack(0x0607, dest, source)
[docs]
def pz_set_ntcirchomepos(
dest: int, source: int, circ_home_pos_a: int, circ_home_pos_b: int
) -> bytes:
data = struct.pack("<HH", circ_home_pos_a, circ_home_pos_b)
return _pack(0x0609, dest, source, data=data)
[docs]
def pz_req_ntcirchomepos(dest: int, source: int):
return _pack(0x0610, dest, source)
[docs]
def pz_move_ntcirctohomepos(dest: int, source: int):
return _pack(0x0612, dest, source)
[docs]
def pz_req_ntcirccentrepos(dest: int, source: int):
return _pack(0x0613, dest, source)
[docs]
def pz_set_ntcircparams(
dest: int,
source: int,
circ_dia_mode: int,
circ_dia_sw: int,
circ_osc_freq: int,
abs_pwr_min_circ_dia: int,
abs_pwr_max_circ_dia: int,
abs_pwr_adjust_type: int,
) -> bytes:
data = struct.pack(
"<HHHHHH",
circ_dia_mode,
circ_dia_sw,
circ_osc_freq,
abs_pwr_min_circ_dia,
abs_pwr_max_circ_dia,
abs_pwr_adjust_type,
)
return _pack(0x0618, dest, source, data=data)
[docs]
def pz_req_ntcircparams(dest: int, source: int):
return _pack(0x0619, dest, source)
[docs]
def pz_set_ntcircdia(dest: int, source: int, circ_dia: int) -> bytes:
return _pack(0x061A, dest, source, param1=circ_dia)
[docs]
def pz_set_ntcircdialut(dest: int, source: int, lut_val: Sequence[int]) -> bytes:
data = struct.pack("<16H", lut_val)
return _pack(0x0621, dest, source, data=data)
[docs]
def pz_req_ntcircdialut(dest: int, source: int):
return _pack(0x0622, dest, source)
[docs]
def pz_set_ntphasecompparams(
dest: int,
source: int,
phase_comp_mode: int,
phase_comp_asw: int,
phase_comp_bsw: int,
) -> bytes:
data = struct.pack("<Hhh", phase_comp_mode, phase_comp_asw, phase_comp_bsw)
return _pack(0x0626, dest, source, data=data)
[docs]
def pz_req_ntphasecompparams(dest: int, source: int):
return _pack(0x0627, dest, source)
[docs]
def pz_set_nttiarangeparams(
dest: int,
source: int,
range_mode: int,
range_up_limit: int,
range_down_limit: int,
settle_sample: int,
range_change_type: int,
range_sw: int,
) -> bytes:
data = struct.pack(
"<HhhhHH",
range_mode,
range_up_limit,
range_down_limit,
settle_sample,
range_change_type,
range_sw,
)
return _pack(0x0630, dest, source, data=data)
[docs]
def pz_req_nttiarangeparams(dest: int, source: int):
return _pack(0x0631, dest, source)
[docs]
def pz_set_ntgainparams(
dest: int, source: int, gain_ctrl_mode: int, nt_gain_sw: int
) -> bytes:
data = struct.pack("<Hh", gain_ctrl_mode, nt_gain_sw)
return _pack(0x0633, dest, source, data=data)
[docs]
def pz_req_ntgainparams(dest: int, source: int):
return _pack(0x0634, dest, source)
[docs]
def pz_set_nttiapfilterparams(dest: int, source: int, param_1: int) -> bytes:
data = struct.pack("<5l", param_1, 0, 0, 0, 0)
return _pack(0x0636, dest, source, data=data)
[docs]
def pz_req_nttiapfilterparams(dest: int, source: int):
return _pack(0x0637, dest, source)
[docs]
def pz_req_nttiareading(dest: int, source: int):
return _pack(0x0639, dest, source)
[docs]
def pz_set_ntfeedbacksrc(dest: int, source: int, feedback_src: int) -> bytes:
return _pack(0x063B, dest, source, param1=feedback_src)
[docs]
def pz_req_ntfeedbacksrc(dest: int, source: int):
return _pack(0x063C, dest, source)
[docs]
def pz_req_ntstatusbits(dest: int, source: int):
return _pack(0x063E, dest, source)
[docs]
def pz_req_ntstatusupdate(dest: int, source: int):
return _pack(0x0664, dest, source)
[docs]
def pz_ack_ntstatusbits(dest: int, source: int):
return _pack(0x0666, dest, source)
[docs]
def kna_set_nttialpfiltercoeefs(dest: int, source: int, param_1: int) -> bytes:
data = struct.pack("<5l", param_1, 0, 0, 0, 0)
return _pack(0x0687, dest, source, data=data)
[docs]
def kna_req_nttialpfiltercoeefs(dest: int, source: int):
return _pack(0x0688, dest, source)
[docs]
def kna_set_kcubemmiparams(
dest: int, source: int, wheel_step: int, disp_brightness: int
) -> bytes:
data = struct.pack("<HH6H", wheel_step, disp_brightness, 0, 0, 0, 0, 0, 0)
return _pack(0x068A, dest, source, data=data)
[docs]
def kna_req_kcubemmiparams(dest: int, source: int):
return _pack(0x068B, dest, source)
[docs]
def kna_set_kcubetrigioconfig(
dest: int,
source: int,
t1_mode: int,
t1_polarity: int,
t2_mode: int,
t2_polarity: int,
) -> bytes:
data = struct.pack(
"<10H", t1_mode, t1_polarity, 0, t2_mode, t2_polarity, 0, 0, 0, 0, 0
)
return _pack(0x068D, dest, source, data=data)
[docs]
def kna_req_kcubetrigioconfig(dest: int, source: int):
return _pack(0x068E, dest, source)
[docs]
def kna_req_xyscan(dest: int, source: int):
return _pack(0x06A0, dest, source)
[docs]
def kna_stop_xyscan(dest: int, source: int):
return _pack(0x06A2, dest, source)
[docs]
def nt_set_eepromparams(dest: int, source: int, chan_ident: int, msg_id: int) -> bytes:
data = struct.pack("<HH", chan_ident, msg_id)
return _pack(0x07E7, dest, source, data=data)
[docs]
def nt_set_tna_dispsettings(dest: int, source: int, disp_intensity: int) -> bytes:
data = struct.pack("<H", disp_intensity)
return _pack(0x07E8, dest, source, data=data)
[docs]
def nt_req_tna_dispsettings(dest: int, source: int):
return _pack(0x07E9, dest, source)
[docs]
def nt_set_tnaiosettings(
dest: int,
source: int,
lv_out_range: int,
lv_out_route: int,
hv_out_range: int,
sign_io_route: int,
) -> bytes:
data = struct.pack("<HHHH", lv_out_range, lv_out_route, hv_out_range, sign_io_route)
return _pack(0x07EB, dest, source, data=data)
[docs]
def nt_req_tnaiosettings(dest: int, source: int):
return _pack(0x07EC, dest, source)
[docs]
def la_set_power_setpoint(dest: int, source: int, setpoint: int) -> bytes:
data = struct.pack("<HH", 1, setpoint)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_power_setpoint(dest: int, source: int):
return _pack(0x0801, dest, source, param1=1)
[docs]
def la_req_laser_current_and_power(dest: int, source: int):
return _pack(0x0801, dest, source, param1=3)
[docs]
def la_req_laser_current_and_power_tld110(dest: int, source: int):
return _pack(0x0801, dest, source, param1=4)
[docs]
def la_set_laser_control_source(dest: int, source: int, laser_source: int) -> bytes:
data = struct.pack("<HH", 5, laser_source)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_laser_control_source(dest: int, source: int):
return _pack(0x0801, dest, source, param1=5)
[docs]
def la_req_lastatusbits(dest: int, source: int):
return _pack(0x0801, dest, source, param1=7)
[docs]
def la_req_max_limits(dest: int, source: int):
return _pack(0x0801, dest, source, param1=9)
[docs]
def la_req_max_diode_current(dest: int, source: int):
return _pack(0x0801, dest, source, param1=10)
[docs]
def la_set_display_settings(
dest: int, source: int, intensity: int, units: int
) -> bytes:
data = struct.pack("<HHHH", 11, intensity, units, 0)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_display_settings(dest: int, source: int):
return _pack(0x0801, dest, source, param1=11)
[docs]
def la_set_misc_params(
dest: int, source: int, calib_factor: float, polarity: int, ramp_up: int
) -> bytes:
data = struct.pack("<HfHH", 13, calib_factor, polarity, ramp_up)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_misc_params(dest: int, source: int):
return _pack(0x0801, dest, source, param1=13)
[docs]
def la_set_mmi_params(dest: int, source: int, disp_intensity: int) -> bytes:
data = struct.pack("<HHHHH", 14, disp_intensity, 0, 0, 0, 0)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_mmi_params(dest: int, source: int):
return _pack(0x0801, dest, source, param1=14)
[docs]
def la_set_klddigoutputs(dest: int, source: int, dig_outputs: int) -> bytes:
data = struct.pack("<HHH", 14, dig_outputs, 0)
return _pack(0x0800, dest, source, data=data)
[docs]
def la_req_klddigoutputs(dest: int, source: int):
return _pack(0x0801, dest, source, param1=17)
[docs]
def la_set_eepromparams(dest: int, source: int, msgid: int) -> bytes:
data = struct.pack("<H", msgid)
return _pack(0x0810, dest, source, data=data)
[docs]
def la_enableoutput(dest: int, source: int):
return _pack(0x0811, dest, source)
[docs]
def la_disableoutput(dest: int, source: int):
return _pack(0x0812, dest, source)
[docs]
def la_openloop(dest: int, source: int):
return _pack(0x0813, dest, source)
[docs]
def la_closedloop(dest: int, source: int):
return _pack(0x0814, dest, source)
[docs]
def ld_maxcurrentadjust(
dest: int, source: int, enable_adjustment: int, allow_with_diode: int
):
return _pack(
0x0816, dest, source, param1=enable_adjustment, param2=allow_with_diode
)
[docs]
def ld_set_maxcurrentdigpot(dest: int, source: int, max_current: int) -> bytes:
return _pack(0x0817, dest, source, param1=max_current)
[docs]
def ld_req_maxcurrentdigpot(dest: int, source: int):
return _pack(0x0818, dest, source)
[docs]
def ld_findtiaagain(dest: int, source: int):
return _pack(0x081A, dest, source)
[docs]
def ld_tiagainadjust(dest: int, source: int, enable: int) -> bytes:
return _pack(0x081B, dest, source, param1=enable)
[docs]
def la_req_statusupdate(dest: int, source: int):
return _pack(0x0820, dest, source)
[docs]
def la_ack_statusupdate(dest: int, source: int):
return _pack(0x0822, dest, source)
[docs]
def ld_ack_statusupdate(dest: int, source: int):
return _pack(0x0827, dest, source)
[docs]
def la_set_kcubetrigconfig(
dest: int,
source: int,
trig1_mode: int,
trig1_polarity: int,
trig2_mode: int,
trig2_polarity: int,
) -> bytes:
data = struct.pack(
"<HHHHHHH", 1, trig1_mode, trig1_polarity, 0, trig2_mode, trig2_polarity, 0
)
return _pack(0x082A, dest, source, data=data)
[docs]
def la_req_kcubetrigconfig(dest: int, source: int):
return _pack(0x082B, dest, source)
[docs]
def quad_set_loopparams(
dest: int, source: int, pGain: int, iGain: int, dGain: int
) -> bytes:
data = struct.pack("<HHHH", 1, pGain, iGain, dGain)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_loopparams(dest: int, source: int):
return _pack(0x0871, dest, source, param1=1)
[docs]
def quad_req_readings(dest: int, source: int):
return _pack(0x0871, dest, source, param1=3)
[docs]
def quad_set_posdemandparams(
dest: int,
source: int,
x_pos_dem_min: int,
y_pos_dem_min: int,
x_pos_dem_max: int,
y_pos_dem_max: int,
lv_out_route: int,
ol_pos_dem: int,
x_pos_fb_sense: int,
y_pos_fb_sense: int,
) -> bytes:
data = struct.pack(
"<HhhhhHHhh",
5,
x_pos_dem_min,
y_pos_dem_min,
x_pos_dem_max,
y_pos_dem_max,
lv_out_route,
ol_pos_dem,
x_pos_fb_sense,
y_pos_fb_sense,
)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_posdemandparams(dest: int, source: int):
return _pack(0x0871, dest, source, param1=5)
[docs]
def quad_set_opermode(dest: int, source: int, mode: int) -> bytes:
data = struct.pack("<HH", 7, mode)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_opermode(dest: int, source: int):
return _pack(0x0871, dest, source, param1=7)
[docs]
def quad_set_dispsettings(
dest: int, source: int, disp_intensity: int, disp_mode: int, disp_dim_timeout: int
) -> bytes:
data = struct.pack("<HHHH", 8, disp_intensity, disp_mode, disp_dim_timeout)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_dispsettings(dest: int, source: int):
return _pack(0x0871, dest, source, param1=8)
[docs]
def quad_set_positionoutputs(dest: int, source: int, x_pos: int, y_pos: int) -> bytes:
data = struct.pack("<Hhh", 0xD, x_pos, y_pos)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_positionoutputs(dest: int, source: int):
return _pack(0x0871, dest, source, param1=0xD)
[docs]
def quad_set_loopparams2(
dest: int,
source: int,
p: int,
i: int,
d: int,
low_pass_cutoff: int,
notch_center: int,
filter_q: int,
notch_filter_on: int,
deriv_filter_on: int,
) -> bytes:
data = struct.pack(
"<HffffffHH",
0xE,
p,
i,
d,
low_pass_cutoff,
notch_center,
filter_q,
notch_filter_on,
deriv_filter_on,
)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_loopparams2(dest: int, source: int):
return _pack(0x0871, dest, source, param1=0xE)
[docs]
def quad_set_kpatrigioconfig(
dest: int,
source: int,
trig1_mode: int,
trig1_polarity: int,
trig1_sum_min: int,
trig1_sum_max: int,
trig1_diff_threshold: int,
trig2_mode: int,
trig2_polarity: int,
trig2_sum_min: int,
trig2_sum_max: int,
trig2_diff_threshold: int,
) -> bytes:
data = struct.pack(
"<12H",
0xF,
trig1_mode,
trig1_polarity,
trig1_sum_min,
trig1_sum_max,
trig1_diff_threshold,
trig2_mode,
trig2_polarity,
trig2_sum_min,
trig2_sum_max,
trig2_diff_threshold,
0,
)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_kpatrigioconfig(dest: int, source: int):
return _pack(0x0871, dest, source, param1=0xF)
[docs]
def quad_set_kpadigoutputs(dest: int, source: int, dig_outs: int) -> bytes:
data = struct.pack("<HHH", 0xA, dig_outs, 0)
return _pack(0x0870, dest, source, data=data)
[docs]
def quad_req_kpadigoutputs(dest: int, source: int):
return _pack(0x0871, dest, source, param1=0xA)
[docs]
def quad_req_statusupdate(dest: int, source: int):
return _pack(0x0880, dest, source)
[docs]
def quad_ack_statusupdate(dest: int, source: int):
return _pack(0x0882, dest, source)
[docs]
def quad_set_eepromparams(dest: int, source: int, msgid: int) -> bytes:
data = struct.pack("<H", msgid)
return _pack(0x0875, dest, source, data=data)
[docs]
def tec_set_tempsetpoint(dest: int, source: int, temp_set: int) -> bytes:
data = struct.pack("<HH", 1, temp_set)
return _pack(0x0840, dest, source, data=data)
[docs]
def tec_req_tempsetpoint(dest: int, source: int):
return _pack(0x0841, dest, source, param1=1)
[docs]
def tec_req_readings(dest: int, source: int):
return _pack(0x0841, dest, source, param1=3)
[docs]
def tec_set_iosettings(
dest: int, source: int, sensor: int, current_limit: int
) -> bytes:
data = struct.pack("<HHh", 5, sensor, current_limit)
return _pack(0x0840, dest, source, data=data)
[docs]
def tec_req_iosettings(dest: int, source: int):
return _pack(0x0841, dest, source, param1=5)
[docs]
def tec_req_statusbits(dest: int, source: int):
return _pack(0x0841, dest, source, param1=7)
[docs]
def tec_set_loopparams(dest: int, source: int, p: int, i: int, d: int) -> bytes:
data = struct.pack("<HHHH", 9, p, i, d)
return _pack(0x0840, dest, source, data=data)
[docs]
def tec_req_loopparams(dest: int, source: int):
return _pack(0x0841, dest, source, param1=9)
[docs]
def tec_set_disp_settings(
dest: int, source: int, disp_intensity: int, disp_mode: int
) -> bytes:
data = struct.pack("<HHHH", 0xB, disp_intensity, disp_mode, 0)
return _pack(0x0840, dest, source, data=data)
[docs]
def tec_req_disp_settings(dest: int, source: int):
return _pack(0x0841, dest, source, param1=0xB)
[docs]
def tec_set_eepromparams(
dest: int,
source: int,
) -> bytes:
data = struct.pack("<H", 0)
return _pack(0x0850, dest, source, data=data)
[docs]
def tec_req_statusupdate(dest: int, source: int):
return _pack(0x0860, dest, source)
[docs]
def tec_ack_statusupdate(dest: int, source: int):
return _pack(0x0862, dest, source)
[docs]
def pzmot_set_poscounts(
dest: int, source: int, chan_ident: int, position: int
) -> bytes:
data = struct.pack("<HHll", 5, chan_ident, position, 0)
return _pack(0x0850, dest, source, data=data)
[docs]
def pzmot_req_poscounts(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x0851, dest, source, param1=5, param2=chan_ident)
[docs]
def pzmot_set_driveopparams(
dest: int,
source: int,
chan_ident: int,
max_voltage: int,
step_rate: int,
step_accn: int,
) -> bytes:
data = struct.pack("<HHHll", 7, chan_ident, max_voltage, step_rate, step_accn)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_driveopparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=7, param2=chan_ident)
[docs]
def tim_set_jogparams(
dest: int,
source: int,
chan_ident: int,
jog_mode: int,
jog_step_size: int,
jog_step_rate: int,
jog_step_accn: int,
) -> bytes:
data = struct.pack(
"<HHHlll", 9, chan_ident, jog_mode, jog_step_size, jog_step_rate, jog_step_accn
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def tim_req_jogparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=9, param2=chan_ident)
[docs]
def tim_set_potparams(
dest: int, source: int, chan_ident: int, max_step_rate: int
) -> bytes:
data = struct.pack("<HHl", 0x11, chan_ident, max_step_rate)
return _pack(0x08C0, dest, source, data=data)
[docs]
def tim_req_potparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x11, param2=chan_ident)
[docs]
def pzmot_set_limswitchparams(
dest: int, source: int, chan_ident: int, fwd_hard_limit: int, rev_hard_limit: int
) -> bytes:
data = struct.pack("<HHHHH", 0xB, chan_ident, fwd_hard_limit, rev_hard_limit, 0)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_limswitchparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0xB, param2=chan_ident)
[docs]
def pzmot_set_homeparams(
dest: int,
source: int,
chan_ident: int,
home_direction: int,
home_lim_switch: int,
home_step_rate: int,
home_offset_dist: int,
) -> bytes:
data = struct.pack(
"<HHHHLl",
0xF,
chan_ident,
home_direction,
home_lim_switch,
home_step_rate,
home_offset_dist,
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_homeparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0xF, param2=chan_ident)
[docs]
def pzmot_set_kcubemmiparams(
dest: int,
source: int,
chan_ident: int,
js_mode: int,
js_max_step_rate: int,
js_dir_sense: int,
preset_pos1: int,
preset_pos2: int,
disp_brightness: int,
) -> bytes:
data = struct.pack(
"<HHHlHllHH",
0x15,
chan_ident,
js_mode,
js_max_step_rate,
js_dir_sense,
preset_pos1,
preset_pos2,
disp_brightness,
0,
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubemmiparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x15, param2=chan_ident)
[docs]
def pzmot_set_kcubetrigioconfig(
dest: int,
source: int,
trig_channel1: int,
trig_channel2: int,
trig1_mode: int,
trig1_polarity: int,
trig2_mode: int,
trig2_polarity: int,
) -> bytes:
data = struct.pack(
"<13H",
0x17,
trig_channel1,
trig_channel2,
trig1_mode,
trig1_polarity,
trig2_mode,
trig2_polarity,
0,
0,
0,
0,
0,
0,
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubetrigioconfig(dest: int, source: int):
return _pack(0x08C1, dest, source, param1=0x17)
[docs]
def pzmot_set_kcubetrigparams(
dest: int,
source: int,
chan_ident: int,
start_pos_fwd: int,
interval_fwd: int,
num_pulses_fwd: int,
start_pos_reverse: int,
interval_rev: int,
num_pulses_rev: int,
pulse_width: int,
num_cycles: int,
) -> bytes:
data = struct.pack(
"<HHllllllll",
0x19,
chan_ident,
start_pos_fwd,
interval_fwd,
num_pulses_fwd,
start_pos_reverse,
interval_rev,
num_pulses_rev,
pulse_width,
num_cycles,
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubetrigparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x19, param2=chan_ident)
[docs]
def pzmot_set_kcubechanenablemode(dest: int, source: int, mode: int) -> bytes:
data = struct.pack("<HH", 0x2B, mode)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubechanenablemode(dest: int, source: int):
return _pack(0x08C1, dest, source, param1=0x2B)
[docs]
def pzmot_set_kcubejogparams(
dest: int,
source: int,
chan_ident: int,
jog_mode: int,
jog_step_size_fwd: int,
jog_step_size_rev: int,
jog_step_rate: int,
jog_step_accn: int,
) -> bytes:
data = struct.pack(
"<HHHllll",
0x2D,
chan_ident,
jog_mode,
jog_step_size_fwd,
jog_step_size_rev,
jog_step_rate,
jog_step_accn,
)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubejogparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x2D, param2=chan_ident)
[docs]
def pzmot_set_kcubefeedbacksigparams(
dest: int, source: int, chan_ident: int, fb_signal_mode: int, encoder_const: int
) -> bytes:
data = struct.pack("<HHHl", 0x30, chan_ident, fb_signal_mode, encoder_const)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubefeedbacksigparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x30, param2=chan_ident)
[docs]
def pzmot_set_kcubemoverelativeparams(
dest: int, source: int, chan_ident: int, rel_distance: int
) -> bytes:
data = struct.pack("<HHl", 0x32, chan_ident, rel_distance)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_req_kcubemoverelativeparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x32, param2=chan_ident)
[docs]
def pzmot_req_kcubemoveabsoluteparams(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08C1, dest, source, param1=0x34, param2=chan_ident)
[docs]
def pzmot_set_kcubemoveabsoluteparams(
dest: int, source: int, chan_ident: int, rel_distance: int
) -> bytes:
data = struct.pack("<HHl", 0x34, chan_ident, rel_distance)
return _pack(0x08C0, dest, source, data=data)
[docs]
def pzmot_move_absolute(
dest: int, source: int, chan_ident: int, abs_position: int
) -> bytes:
data = struct.pack("<Hl", chan_ident, abs_position)
return _pack(0x08D4, dest, source, data=data)
[docs]
def pzmot_move_jog(dest: int, source: int, chan_ident: int, jog_dir: int) -> bytes:
return _pack(0x08D9, dest, source, param1=chan_ident, param2=jog_dir)
[docs]
def pzmot_req_statusupdate(dest: int, source: int, chan_ident: int) -> bytes:
return _pack(0x08E0, dest, source, param1=chan_ident)
[docs]
def pzmot_ack_statusupdate(dest: int, source: int) -> bytes:
return _pack(0x08E2, dest, source)
[docs]
def pol_set_params(
dest: int,
source: int,
velocity: int,
home_position: int,
jog_step1: int,
jog_step2: int,
jog_step3: int,
) -> bytes:
data = struct.pack(
"<HHHHHH", 0, velocity, home_position, jog_step1, jog_step2, jog_step3
)
return _pack(0x0530, dest, source, data=data)
[docs]
def pol_req_params(dest: int, source: int):
return _pack(0x0531, dest, source)