package com.example;

import static com.example.mtnlib.nmc_lib20.*;
import com.example.mtnlib.nmc_lib20_com.*;
import com.sun.jna.ptr.*;

public class Main {  

    // 错误处理工具类
    private static class ErrorHandler {
        public static void checkError(short rtn) {
            if (rtn != 0) {
                throw new RuntimeException(String.format("操作失败，错误代码: %d", rtn));
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("控制器初始化程序启动...");

        final short devNum = 0;     // 设备序号，从0开始
        final short axisNum = 0;    // 轴号，从0开始
        
        PHAND pDevHandle = null;    // 设备句柄
        HAND axisHandle = null;     // 轴句柄

        try {
            // 打开控制器
            pDevHandle = new PHAND();
            short result = NMC_DevOpen(devNum, pDevHandle);
            ErrorHandler.checkError(result);
            System.out.println("控制器打开成功");

            // 打开轴,获得轴句柄
            PHAND pAxisHandle = new PHAND();
            result = NMC_MtOpen(pDevHandle.getHandle(), axisNum, pAxisHandle);
            ErrorHandler.checkError(result);
            axisHandle = pAxisHandle.getHandle();
            System.out.println("轴初始化成功");

            // 打开轴使能(根据实际情况使用)
            result = NMC_MtSetSvOn(axisHandle);
            ErrorHandler.checkError(result);
            System.out.println("伺服使能成功");

            // 复位控制器：控制器复位到初始状态
            result = NMC_DevReset(pDevHandle.getHandle());
            ErrorHandler.checkError(result);
            System.out.println("控制器复位成功");
            System.out.println("控制器初始化完成");

        } catch (Exception e) {
            System.err.println("初始化过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // 关闭控制器
            try {
                if (pDevHandle != null) {
                    short result = NMC_DevClose(pDevHandle);
                    ErrorHandler.checkError(result);
                    System.out.println("控制器关闭成功");
                }
            } catch (Exception e) {
                System.err.println("关闭控制器时发生错误: " + e.getMessage());
            }
            
            System.out.println("程序执行结束");
        }
    }
}