Skip to content

4.2 C99 Info APIs ​

Overview ​

The C99 Info APIs cover controller version and robot model queries, controller and robot status, servo status, soft mode, operation mode, LED control, emergency stop, servo power control, and control-access keepalive.

Header file:

  • include/c_arm_info.h

API Signatures ​

Arm_Info_GetControllerVersion ​

c
int Arm_Info_GetControllerVersion(ArmHandle* h, char* outVersion, size_t bufSize);
ItemDescription
DescriptionReads the controller version string.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outVersion : char* , output buffer for the controller version
bufSize : size_t , size of the output buffer, including space for the trailing \0
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetArmModelInfo ​

c
int Arm_Info_GetArmModelInfo(ArmHandle* h, char* outModel, size_t bufSize);
ItemDescription
DescriptionReads the robot model string.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outModel : char* , output buffer for the robot model
bufSize : size_t , size of the output buffer, including space for the trailing \0
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_AcquireAccess ​

c
void Arm_Info_AcquireAccess(ArmHandle* h);
ItemDescription
DescriptionStarts acquiring or keeping control access.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueNo return value

Arm_Info_ReleaseAccess ​

c
void Arm_Info_ReleaseAccess(ArmHandle* h);
ItemDescription
DescriptionReleases the control-access keepalive task.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueNo return value

Arm_Info_SwitchLedLight ​

c
int Arm_Info_SwitchLedLight(ArmHandle* h, int mode);
ItemDescription
DescriptionSwitches the robot LED indicator state.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
mode : int , LED switch value; non-zero means on, and 0 means off
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_Estop ​

c
int Arm_Info_Estop(ArmHandle* h);
ItemDescription
DescriptionTriggers an emergency stop on the robot.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_ServoReset ​

c
int Arm_Info_ServoReset(ArmHandle* h);
ItemDescription
DescriptionResets the servo state.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetOpMode ​

c
int Arm_Info_GetOpMode(ArmHandle* h, int* outMode);
ItemDescription
DescriptionReads the current operation mode.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outMode : int* , mode output pointer
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetCtrlStatus ​

c
int Arm_Info_GetCtrlStatus(ArmHandle* h, int* outStatus);
ItemDescription
DescriptionReads the controller running state.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outStatus : int* , status output pointer
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetRobotStatus ​

c
int Arm_Info_GetRobotStatus(ArmHandle* h, int* outStatus);
ItemDescription
DescriptionReads the robot running state.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outStatus : int* , status output pointer
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetServoStatus ​

c
int Arm_Info_GetServoStatus(ArmHandle* h, int* outStatus);
ItemDescription
DescriptionReads the servo state.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outStatus : int* , status output pointer
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_ServoOn ​

c
int Arm_Info_ServoOn(ArmHandle* h);
ItemDescription
DescriptionPowers on the servo system.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_ServoOff ​

c
int Arm_Info_ServoOff(ArmHandle* h);
ItemDescription
DescriptionPowers off the servo system.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_GetSoftMode ​

c
int Arm_Info_GetSoftMode(ArmHandle* h, int* outMode);
ItemDescription
DescriptionReads the current soft mode.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
outMode : int* , mode output pointer
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_SetSoftMode ​

c
int Arm_Info_SetSoftMode(ArmHandle* h, int mode);
ItemDescription
DescriptionSets the current soft mode.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
mode : int , target soft-mode value, using the same value set returned by Arm_Info_GetSoftMode()
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Arm_Info_SetOpMode ​

c
int Arm_Info_SetOpMode(ArmHandle* h, int mode);
ItemDescription
DescriptionSets the current operation mode.
Request parametersh : ArmHandle* , C99 session handle, usually created by Arm_Create() ; service APIs require a successful connection first
mode : int , target operation mode: 1=AUTO , 2=MANUAL_LIMIT , 3=MANUAL
Return valueInteger STATUS_CODE ; 0 means success, and other values should be handled according to the status-code definitions

Function Groups ​

GroupFunctionsDescription
Basic informationArm_Info_GetControllerVersion / Arm_Info_GetArmModelInfoReads version and model strings
Status queriesArm_Info_GetCtrlStatus / Arm_Info_GetRobotStatus / Arm_Info_GetServoStatusReads running states
Mode read/writeArm_Info_GetSoftMode / Arm_Info_SetSoftMode / Arm_Info_GetOpMode / Arm_Info_SetOpModeReads or switches modes
Control actionsArm_Info_SwitchLedLight / Arm_Info_Estop / Arm_Info_ServoReset / Arm_Info_ServoOn / Arm_Info_ServoOffChanges controller or robot state
Access keepaliveArm_Info_AcquireAccess / Arm_Info_ReleaseAccessKeeps PC control access alive in industrial scenarios

Parameters and Return Values ​

ItemRule
String outputsoutVersion / outModel must not be null, and bufSize must be greater than 0
Buffer too smallReturns BUFFER_TOO_SMALL
Status outputsoutStatus / outMode must not be null
Mode values1=AUTO , 2=MANUAL_LIMIT , 3=MANUAL ; passing 0=UNKNOWN to Arm_Info_SetOpMode() returns UNSUPPORTED_PARAMETER
Action APIsLED, emergency stop, servo, and mode-write APIs change the on-site robot or controller state
AcquireAccess / ReleaseAccessNo return value; normally used as the start and end of a keepalive task

Prerequisites and Control Access ​

ScenarioDescription
Query API called before connectionReturns an error code; string outputs are cleared, and status or mode outputs remain under caller control
Control API called before connectionReturns an error code and does not issue a control command
Arm_Info_AcquireAccess()Starts the control-access keepalive task; repeated calls release the existing keepalive task first; the keepalive period is 2000ms
Arm_Info_ReleaseAccess()Stops the control-access keepalive task; it can be called even if keepalive has not been started
Disconnecting or destroying the handleEnds the control-access keepalive task for the current session

After connecting, read the controller version, robot model, and current modes before calling mode-write, servo, LED, or emergency-stop APIs. Arm_Info_AcquireAccess() is usually used to keep PC control access alive for industrial robots; collaborative robots normally do not need it.

Minimal Example ​

c
#include <stdio.h>  // Provides printf for printing the version and status.
#include "c_arm_api.h"  // Includes the aggregate C99 SDK header.
int main(void)  // Example program entry point.
{  // Enters the example main function.
    ArmHandle* h = Arm_Create();  // Creates a C99 session handle.
    char version[128] = {0};  // Prepares the controller-version buffer.
    int servoStatus = 0;  // Prepares the servo-status output variable.
    if (h == NULL) {  // Checks whether handle creation failed.
        return 1;  // Exits when creation fails.
    }  // Ends the handle check.
    if (Arm_Connect(h, "10.27.1.2", "10.27.1.102") != 0) {  // Connects to the controller.
        Arm_Destroy(h);  // Releases the handle after connection failure.
        return 1;  // Returns an error.
    }  // Ends the connection check.
    int versionRet = Arm_Info_GetControllerVersion(h, version, sizeof(version));  // Reads the controller version.
    int statusRet = Arm_Info_GetServoStatus(h, &servoStatus);  // Reads the servo status.
    printf("version=%s servo=%d\n", version, servoStatus);  // Prints the read result.
    Arm_Disconnect(h);  // Disconnects from the controller.
    Arm_Destroy(h);  // Destroys the handle.
    return versionRet == 0 && statusRet == 0 ? 0 : 1;  // Returns according to the query result.
}  // Ends the example main function.

Scenario Examples ​

Read Version, Model, and Status ​

c
char version[128] = {0};  // Prepares the version output buffer.
char model[128] = {0};  // Prepares the model output buffer.
int ctrlStatus = 0;  // Prepares the controller-status output variable.
int robotStatus = 0;  // Prepares the robot-status output variable.
int servoStatus = 0;  // Prepares the servo-status output variable.
int versionRet = Arm_Info_GetControllerVersion(h, version, sizeof(version));  // Reads the controller version.
int modelRet = Arm_Info_GetArmModelInfo(h, model, sizeof(model));  // Reads the robot model.
int ctrlRet = Arm_Info_GetCtrlStatus(h, &ctrlStatus);  // Reads the controller status.
int robotRet = Arm_Info_GetRobotStatus(h, &robotStatus);  // Reads the robot status.
int servoRet = Arm_Info_GetServoStatus(h, &servoStatus);  // Reads the servo status.
(void)versionRet;  // Keeps the version-query status code in this example.
(void)modelRet;  // Keeps the model-query status code in this example.
(void)ctrlRet;  // Keeps the controller-status code in this example.
(void)robotRet;  // Keeps the robot-status code in this example.
(void)servoRet;  // Keeps the servo-status code in this example.

Read and Write Modes ​

c
int softMode = 0;  // Prepares the soft-mode output variable.
int opMode = 0;  // Prepares the operation-mode output variable.
int getSoftRet = Arm_Info_GetSoftMode(h, &softMode);  // Reads the soft mode.
int getOpRet = Arm_Info_GetOpMode(h, &opMode);  // Reads the operation mode.
/* int setSoftRet = Arm_Info_SetSoftMode(h, softMode); */  // Writing the soft mode changes the control state; execute only after confirmation.
/* int setOpRet = Arm_Info_SetOpMode(h, opMode); */  // Writing the operation mode changes the control state; execute only after confirmation.
(void)getSoftRet;  // Keeps the soft-mode query status code in this example.
(void)getOpRet;  // Keeps the operation-mode query status code in this example.

Control Actions ​

c
Arm_Info_AcquireAccess(h);  // Acquires or keeps SDK control access.
/* int ledRet = Arm_Info_SwitchLedLight(h, 1); */  // Switching the LED changes on-site indication; execute only after confirmation.
/* int resetRet = Arm_Info_ServoReset(h); */  // Servo reset changes device state; execute only after confirmation.
/* int servoOnRet = Arm_Info_ServoOn(h); */  // Servo power-on changes device state; execute only after confirmation.
/* int servoOffRet = Arm_Info_ServoOff(h); */  // Servo power-off changes device state; execute only after confirmation.
/* int estopRet = Arm_Info_Estop(h); */  // Emergency stop is an action API; execute only after confirmation.
Arm_Info_ReleaseAccess(h);  // Releases SDK control access.

Sample code

c99/info_basic/src/main.cpp
cpp
#include <stdio.h>

extern "C" {
#include "c_arm_api.h"
}

int main(void)
{
    // [ZH] 本示例直接在源码中写死连接地址,不解析命令行参数。
    // [EN] This example hard-codes the connection addresses in the source code and does not parse command-line arguments.
    // [ZH] 创建并连接 SDK 句柄。
    // [EN] Create the SDK handle and connect to the robot.
    ArmHandle* handle = Arm_Create();
    if (handle == NULL) {
        printf("[c99_info] 创建句柄失败 / Failed to create the handle\n");
        return 1;
    }
    int ret = Arm_Connect(handle, "10.27.1.2", "10.27.1.102");
    if (ret != 0) {
        printf("[c99_info] 连接失败 / Connect failed, 状态码 / Status code: %d\n", ret);
        Arm_Destroy(handle);
        return 1;
    }
    printf("[c99_info] 机器人连接成功 / Robot connected successfully\n");

    // [ZH] 读取控制器版本与机械臂型号。
    // [EN] Read the controller version and robot model.
    char version[128] = {0};
    char model[128] = {0};
    ret = Arm_Info_GetControllerVersion(handle, version, sizeof(version));
    printf("[c99_info] GetControllerVersion 状态码 / GetControllerVersion status code: %d, 版本 / Version: %s\n", ret, version);
    ret = Arm_Info_GetArmModelInfo(handle, model, sizeof(model));
    printf("[c99_info] GetArmModelInfo 状态码 / GetArmModelInfo status code: %d, 型号 / Model: %s\n", ret, model);

    // [ZH] 获取并归还 SDK 控制权限。
    // [EN] Acquire and release the SDK control access.
    Arm_Info_AcquireAccess(handle);
    printf("[c99_info] 已获取控制权 / SDK access acquired\n");
    Arm_Info_ReleaseAccess(handle);
    printf("[c99_info] 已归还控制权 / SDK access released\n");

    // [ZH] 顺序读取全部状态类接口。
    // [EN] Read all status-oriented APIs in sequence.
    int opMode = 0;
    int ctrlStatus = 0;
    int robotStatus = 0;
    int servoStatus = 0;
    int softMode = 0;
    ret = Arm_Info_GetOpMode(handle, &opMode);
    printf("[c99_info] GetOpMode 状态码 / GetOpMode status code: %d, 操作模式 / Operation mode: %d\n", ret, opMode);
    ret = Arm_Info_GetCtrlStatus(handle, &ctrlStatus);
    printf("[c99_info] GetCtrlStatus 状态码 / GetCtrlStatus status code: %d, 控制器状态 / Controller status: %d\n", ret, ctrlStatus);
    ret = Arm_Info_GetRobotStatus(handle, &robotStatus);
    printf("[c99_info] GetRobotStatus 状态码 / GetRobotStatus status code: %d, 机器人状态 / Robot status: %d\n", ret, robotStatus);
    ret = Arm_Info_GetServoStatus(handle, &servoStatus);
    printf("[c99_info] GetServoStatus 状态码 / GetServoStatus status code: %d, 伺服状态 / Servo status: %d\n", ret, servoStatus);
    ret = Arm_Info_GetSoftMode(handle, &softMode);
    printf("[c99_info] GetSoftMode 状态码 / GetSoftMode status code: %d, 软模式 / Soft mode: %d\n", ret, softMode);

    // [ZH] 顺序执行全部写接口与动作接口。
    // [EN] Execute all setter APIs and action APIs in sequence.
    ret = Arm_Info_SetSoftMode(handle, softMode);
    printf("[c99_info] SetSoftMode 状态码 / SetSoftMode status code: %d\n", ret);
    ret = Arm_Info_SetOpMode(handle, opMode);
    printf("[c99_info] SetOpMode 状态码 / SetOpMode status code: %d\n", ret);
    ret = Arm_Info_SwitchLedLight(handle, 1);
    printf("[c99_info] SwitchLedLight 状态码 / SwitchLedLight status code: %d\n", ret);
    ret = Arm_Info_ServoOn(handle);
    printf("[c99_info] ServoOn 状态码 / ServoOn status code: %d\n", ret);
    ret = Arm_Info_ServoOff(handle);
    printf("[c99_info] ServoOff 状态码 / ServoOff status code: %d\n", ret);
    ret = Arm_Info_ServoReset(handle);
    printf("[c99_info] ServoReset 状态码 / ServoReset status code: %d\n", ret);
    ret = Arm_Info_Estop(handle);
    printf("[c99_info] Estop 状态码 / Estop status code: %d\n", ret);

    // [ZH] 断开连接并销毁句柄。
    // [EN] Disconnect and destroy the handle.
    Arm_Disconnect(handle);
    Arm_Destroy(handle);
    printf("[c99_info] 示例结束 / Example finished\n");
    return 0;
}
mingw_c99/gcc_capi_info_read/src/main.c
c
#include <stdio.h>

#include "c_arm_api.h"

int main(void)
{
    // [ZH] 本示例使用 MinGW/GCC 直接调用 C99 接口,并通过 libAgilebotCppSdk.dll.a 链接 DLL。
    // [EN] This example uses MinGW/GCC to call the C99 API directly and links the DLL through libAgilebotCppSdk.dll.a.
    const char* controller_ip = "10.27.1.2";
    const char* teach_panel_ip = "10.27.1.102";
    int ret = 0;

    ArmHandle* handle = Arm_Create();
    if (handle == NULL) {
        printf("[gcc_capi_info_read] 创建句柄失败 / Failed to create handle\n");
        return 1;
    }

    // [ZH] 连接前先查询一次状态,便于确认 import library、DLL 与基础句柄函数都可用。
    // [EN] Query once before connecting to validate the import library, DLL, and basic handle APIs.
    printf("[gcc_capi_info_read] 连接前状态 / State before connect: %d\n", Arm_IsConnected(handle));

    ret = Arm_Connect(handle, controller_ip, teach_panel_ip);
    if (ret != 0) {
        printf("[gcc_capi_info_read] 连接失败 / Connect failed, 状态码 / Status code: %d\n", ret);
        Arm_Destroy(handle);
        return 1;
    }
    printf("[gcc_capi_info_read] 连接后状态 / State after connect: %d\n", Arm_IsConnected(handle));

    // [ZH] 只调用读接口,适合作为客户 MinGW 环境的低风险联调模板。
    // [EN] Only read APIs are used, making this a low-risk integration template for customer MinGW environments.
    char version[128] = {0};
    ret = Arm_Info_GetControllerVersion(handle, version, sizeof(version));
    printf("[gcc_capi_info_read] GetControllerVersion 状态码 / Status code: %d, 版本 / Version: %s\n", ret, version);

    char model[128] = {0};
    ret = Arm_Info_GetArmModelInfo(handle, model, sizeof(model));
    printf("[gcc_capi_info_read] GetArmModelInfo 状态码 / Status code: %d, 型号 / Model: %s\n", ret, model);

    int op_mode = 0;
    ret = Arm_Info_GetOpMode(handle, &op_mode);
    printf("[gcc_capi_info_read] GetOpMode 状态码 / Status code: %d, 操作模式 / Operation mode: %d\n", ret, op_mode);

    int ctrl_status = 0;
    ret = Arm_Info_GetCtrlStatus(handle, &ctrl_status);
    printf("[gcc_capi_info_read] GetCtrlStatus 状态码 / Status code: %d, 控制器状态 / Controller status: %d\n", ret, ctrl_status);

    int robot_status = 0;
    ret = Arm_Info_GetRobotStatus(handle, &robot_status);
    printf("[gcc_capi_info_read] GetRobotStatus 状态码 / Status code: %d, 机器人状态 / Robot status: %d\n", ret, robot_status);

    int servo_status = 0;
    ret = Arm_Info_GetServoStatus(handle, &servo_status);
    printf("[gcc_capi_info_read] GetServoStatus 状态码 / Status code: %d, 伺服状态 / Servo status: %d\n", ret, servo_status);

    int soft_mode = 0;
    ret = Arm_Info_GetSoftMode(handle, &soft_mode);
    printf("[gcc_capi_info_read] GetSoftMode 状态码 / Status code: %d, 软模式 / Soft mode: %d\n", ret, soft_mode);

    // [ZH] 清理连接与句柄。
    // [EN] Clean up connection and handle.
    Arm_Disconnect(handle);
    printf("[gcc_capi_info_read] 断开后状态 / State after disconnect: %d\n", Arm_IsConnected(handle));
    Arm_Destroy(handle);
    printf("[gcc_capi_info_read] 示例结束 / Example finished\n");
    return 0;
}