* Update any attached inputs. * * @param[in] xdev The device. */ void (*update_inputs)(struct xrt_device *xdev);
时间: 2024-03-30 07:31:07 浏览: 64
这段代码是一个函数指针的定义,函数指针名为update_inputs,它接受一个xrt_device类型的参数xdev,并且没有返回值。根据注释,这个函数指针用于更新任何附加的输入。
函数指针的定义可以用于实现回调机制,即在某个特定的时刻或条件下,调用这个函数指针所指向的函数来完成相应的操作。在这个例子中,当需要更新附加的输入时,可以通过调用update_inputs函数指针所指向的函数来完成更新操作。
相关问题
#include "lib_prot_pd.h" #include "mod_input_output.h" #include "mod_display.h" #include "mod_queue.h" #include "app_typec_deal.h" #include "app_init.h" #include "lib_multi_protocol.h" uint8_t typeca_ufp= 0; void typeca_hard_reset_cb(void) { static uint8_t b_typec_hard_reset_lock= RESET; if(h_pd.output.b_source_read_hard|| \ h_pd.output.b_sink_read_hard) { if(b_typec_hard_reset_lock== RESET) { b_typec_hard_reset_lock= SET; mod_queue_send(PLUG_CA_RST_P); } }else { if(b_typec_hard_reset_lock) { b_typec_hard_reset_lock= RESET; mod_queue_send(PLUG_CA_RST_N); } } } void typecb_hard_reset_cb(void) { static uint8_t b_typec_hard_reset_lock= RESET; if(h_pd.output.b_source_read_hard|| \ h_pd.output.b_sink_read_hard) { if(b_typec_hard_reset_lock== RESET) { b_typec_hard_reset_lock= SET; mod_queue_send(PLUG_CB_RST_P); } }else { if(b_typec_hard_reset_lock) { b_typec_hard_reset_lock= RESET; mod_queue_send(PLUG_CB_RST_N); } } } void typeca_pr_swap_cb(void) { static uint8_t b_pd_power_role_swap_lock; if(h_pd.output.b_pr_swap_en) { if(h_pd.output.b_source_read_pr_swap) { b_pd_power_role_swap_lock= SET; /*用户代码*/ //关 VBus }else if(h_pd.output.b_sink_read_pr_swap) { /*用户代码*/ //DC-DC 进入放电状态,升压,打开 VBus } }else { b_pd_power_role_swap_lock= RESET; } } void typecb_pr_swap_cb(void) { static uint8_t b_pd_power_role_swap_lock; if(h_pd.output.b_pr_swap_en) { if(h_pd.output.b_source_read_pr_swap) { b_pd_power_role_swap_lock= SET; /*用户代码*/ //关 VBus }else if(h_pd.output.b_sink_read_pr_swap) { /*用户代码*/ //DC-DC 进入放电状态,升压,打开 VBus } }else { b_pd_power_role_swap_lock= RESET; } } bool typeca_vbus_exist_cb(void) { //判断一下0.8V VBus电压 return mod_io_typeca_acin(); } bool typecb_vbus_exist_cb(void) { //判断一下0.8V VBus电压 return mod_io_typecb_acin(); } void typeca_attached_src_cb(void) { /** * !!! * 兼容性测试需要 */ mod_io_a1d_out(); mod_queue_send(PLUG_CAD_IN); } void typecb_attached_src_cb(void) { mod_io_a1d_out(); mod_queue_send(PLUG_CBD_IN); } void typeca_attached_snk_cb(void) { mod_queue_send(PLUG_CAC_IN); typeca_ufp = 1; } void typecb_attached_snk_cb(void) { mod_queue_send(PLUG_CBC_IN); typeca_ufp = 1; } void typeca_unattached_cb(void) { mod_queue_send(PLUG_CAX_OUT); typeca_ufp = 0; } void typecb_unattached_cb(void) { mod_queue_send(PLUG_CBX_OUT); }
这是一段 C 语言代码,包括了一些函数和变量的定义。其中定义了一些回调函数,如 typeca_hard_reset_cb、typecb_hard_reset_cb,用于 Type-C 接口的硬复位操作。还定义了 typeca_pr_swap_cb、typecb_pr_swap_cb,用于 Type-C 接口的 power role swap(PR_SWAP)操作。此外,还定义了一些判断 VBus 电压是否存在的函数,如 typeca_vbus_exist_cb、typecb_vbus_exist_cb,以及一些表示设备接入或断开的回调函数,如 typeca_attached_src_cb、typecb_attached_src_cb、typeca_attached_snk_cb、typecb_attached_snk_cb、typeca_unattached_cb、typecb_unattached_cb。
public override bool GroupRun(ref string message, ref CogToolResultConstants result) { // To let the execution stop in this script when a debugger is attached, uncomment the following lines. // #if DEBUG // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break(); // #endif // Run each tool using the RunTool function foreach(ICogTool tool in Tools) RunTool(tool, ref message, ref result); // 输入距离 double a = this.Inputs.R/2; Point[] L1 = FindParallelLine(new Point(this.Inputs.LineSegment1.StartX,this.Inputs.LineSegment1.StartY), new Point(this.Inputs.LineSegment1.EndX,this.Inputs.LineSegment1.EndY), a); Point[] L2 = FindParallelLine(new Point(this.Inputs.LineSegment2.StartX,this.Inputs.LineSegment2.StartY), new Point(this.Inputs.LineSegment2.EndX,this.Inputs.LineSegment2.EndY), a); Point PX1 = GetIntersectionPoint(L1[0].X, L1[0].Y, L1[1].X, L1[1].Y, L2[0].X, L2[0].Y, L2[1].X, L2[1].Y); this.Outputs.X1 = PX1.X; this.Outputs.Y1 = PX1.Y; Point[] L3 = FindParallelLine(new Point(this.Inputs.LineSegment3.StartX, this.Inputs.LineSegment3.StartY), new Point(this.Inputs.LineSegment3.EndX, this.Inputs.LineSegment3.EndY), a); Point[] L4 = FindParallelLine(new Point(this.Inputs.LineSegment4.StartX, this.Inputs.LineSegment4.StartY), new Point(this.Inputs.LineSegment4.EndX, this.Inputs.LineSegment4.EndY), a); Point PX2 = GetIntersectionPoint(L3[0].X, L3[0].Y, L3[1].X, L3[1].Y, L4[0].X, L4[0].Y, L4[1].X, L4[1].Y); this.Outputs.X2 = PX2.X; this.Outputs.Y2 = PX2.Y; //输出值变量值除以1000 this.Outputs.D1 = (PX1.Y+a)/1000; this.Outputs.D2 = (PX2.Y+a)/1000; this.Outputs.DD = Math.Abs( this.Outputs.D1-this.Outputs.D2); return false; } //线段平移 public static Point[] FindParallelLine(Point start, Point end, double distance) { double length = Math.Sqrt(Math.Pow(end.X - start.X, 2) + Math.Pow(end.Y - start.Y, 2)); double dx = (end.X - start.X) / leng
th; double dy = (end.Y - start.Y) / length; double dx2 = dy * distance; double dy2 = -dx * distance; Point[] result = new Point[2]; result[0] = new Point(start.X + dx2, start.Y + dy2); result[1] = new Point(end.X + dx2, end.Y + dy2); return result; } //两线段交点 public static Point GetIntersectionPoint(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { double k1 = (y2 - y1) / (x2 - x1); double b1 = y1 - k1 * x1; double k2 = (y4 - y3) / (x4 - x3); double b2 = y3 - k2 * x3; double x = (b2 - b1) / (k1 - k2); double y = k1 * x + b1; return new Point(x, y); }
这是一段 C# 代码,实现了线段平移和两条线段的交点计算。其中,FindParallelLine函数实现了将一条线段沿着垂直方向平移一定距离后得到的新线段,GetIntersectionPoint函数实现了求两条线段的交点。
在GroupRun函数中,先通过FindParallelLine函数得到四条平行于输入线段的新线段,然后通过GetIntersectionPoint函数求出两两相交的交点,最后将交点的坐标作为输出值。
需要注意的是,在输出值计算时,需要将计算结果除以1000,因为输入的距离单位是毫米,而输出的距离单位是米。
阅读全文