struct DoubleSeq{
  sequence<double> data;
};

struct Frame {
  double mat[3][3];
  double pos[3];
};

interface ComFk {
  short set_tool(in Frame frm);
  Frame get_cur_frm();
  short get_joint_num();
};

interface ComFrmCtrl {
  void set_param(in double k_pv, in double v_m, in double k_pr);
};

interface ComMove {

  short move_to(in Frame frm);
  short set_max_joint_vel(in DoubleSeq max_vel);
  short move_joint(in DoubleSeq ref_angles);
  short get_softlimit(out double x_max, out double y_max, out double z_max, out double x_mout, out double y_mout, out double z_min);
  short set_softlimit(in double x_max, in double y_max, in double z_max, in double x_min, in double y_min, in double z_min);
};
