# core HAL config file for simulation - 6 axis

# load RT modules
loadrt pumakins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]TRAJ_PERIOD key=[EMCMOT]SHMEM_KEY num_joints=[TRAJ]AXES
loadrt ddt count=12

# add motion controller functions to servo thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf ddt.0 servo-thread
addf ddt.1 servo-thread
addf ddt.2 servo-thread
addf ddt.3 servo-thread
addf ddt.4 servo-thread
addf ddt.5 servo-thread
addf ddt.6 servo-thread
addf ddt.7 servo-thread
addf ddt.8 servo-thread

# create HAL signals for position commands from motion module
newsig J0pos float
linksp J0pos <= axis.0.motor-pos-cmd
newsig J1pos float
linksp J1pos <= axis.1.motor-pos-cmd
newsig J2pos float
linksp J2pos <= axis.2.motor-pos-cmd
newsig J3pos float
linksp J3pos <= axis.3.motor-pos-cmd
newsig J4pos float
linksp J4pos <= axis.4.motor-pos-cmd
newsig J5pos float
linksp J5pos <= axis.5.motor-pos-cmd


# loop position commands back to motion module feedback
linksp J0pos => axis.0.motor-pos-fb
linksp J1pos => axis.1.motor-pos-fb
linksp J2pos => axis.2.motor-pos-fb
linksp J3pos => axis.3.motor-pos-fb
linksp J4pos => axis.4.motor-pos-fb
linksp J5pos => axis.5.motor-pos-fb

# send the position commands thru differentiators to
# generate velocity and accel signals
# define the signals, and hook them up
newsig J0vel float
newsig J0acc float
linksp J0pos => ddt.0.in
linkps ddt.0.out => J0vel
linksp J0vel => ddt.1.in
linkps ddt.1.out => J0acc

newsig J1vel float
newsig J1acc float
linksp J1pos => ddt.2.in
linkps ddt.2.out => J1vel
linksp J1vel => ddt.3.in
linkps ddt.3.out => J1acc

newsig J2vel float
newsig J2acc float
linksp J2pos => ddt.4.in
linkps ddt.4.out => J2vel
linksp J2vel => ddt.5.in
linkps ddt.5.out => J2acc

newsig J3vel float
newsig J3acc float
linksp J3pos => ddt.6.in
linkps ddt.6.out => J3vel
linksp J3vel => ddt.7.in
linkps ddt.7.out => J3acc

newsig J4vel float
newsig J4acc float
linksp J4pos => ddt.8.in
linkps ddt.8.out => J4vel
linksp J4vel => ddt.9.in
linkps ddt.9.out => J4acc

newsig J5vel float
newsig J5acc float
linksp J5pos => ddt.10.in
linkps ddt.10.out => J5vel
linksp J5vel => ddt.11.in
linkps ddt.11.out => J5acc

# estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

# amp control
newsig xena bit
linksp xena axis.0.amp-enable-out
newsig yena bit
linksp yena axis.1.amp-enable-out
newsig zena bit
linksp zena axis.2.amp-enable-out
newsig aena bit
linksp aena axis.3.amp-enable-out
newsig bena bit
linksp bena axis.4.amp-enable-out
newsig cena bit
linksp cena axis.5.amp-enable-out

newsig xflt bit
linksp xflt axis.0.amp-fault-in
newsig yflt bit
linksp yflt axis.1.amp-fault-in
newsig zflt bit
linksp zflt axis.2.amp-fault-in
newsig aflt bit
linksp aflt axis.3.amp-fault-in
newsig bflt bit
linksp bflt axis.4.amp-fault-in
newsig cflt bit
linksp cflt axis.5.amp-fault-in

loadusr -W pumagui

loadrt scale count=6

addf scale.0 servo-thread
addf scale.1 servo-thread
addf scale.2 servo-thread
addf scale.3 servo-thread
addf scale.4 servo-thread
addf scale.5 servo-thread

linksp J0pos scale.0.in
linksp J1pos scale.1.in
linksp J2pos scale.2.in
linksp J3pos scale.3.in
linksp J4pos scale.4.in
linksp J5pos scale.5.in

setp scale.0.gain 1
setp scale.1.gain 1
setp scale.2.gain 1
setp scale.3.gain 1
setp scale.4.gain 1
setp scale.5.gain 1

net J0scaled scale.0.out pumagui.joint1
net J1scaled scale.1.out pumagui.joint2
net J2scaled scale.2.out pumagui.joint3
net J3scaled scale.3.out pumagui.joint4
net J4scaled scale.4.out pumagui.joint5
net J5scaled scale.5.out pumagui.joint6

#net j0 axis.0.joint-pos-fb pumagui.joint1
#net j1 axis.1.joint-pos-fb pumagui.joint2
#net j2 axis.2.joint-pos-fb pumagui.joint3
#net j3 axis.3.joint-pos-fb pumagui.joint4
#net j4 axis.4.joint-pos-fb pumagui.joint5
#net j5 axis.5.joint-pos-fb pumagui.joint6
#net j6 axis.6.joint-pos-fb pumagui.grip