4.8 C99 Registers Interface
Overview
C99 Registers provides read/write operations for R, PR, SR, MR, MH, and MI registers. C99 functions are flat entry points; strings and structures use caller-provided buffers.
Corresponding header:
include/c_arm_registers.h
Interface Signatures
Arm_Registers_ReadR
c
int Arm_Registers_ReadR(ArmHandle* h, int index, double* outValue);| Item | Description |
|---|---|
| Description | Reads an R register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , R register IDoutValue : double* , output R value pointer |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_WriteR
c
int Arm_Registers_WriteR(ArmHandle* h, int index, double value);| Item | Description |
|---|---|
| Description | Writes an R register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , R register IDvalue : double , value to write into the R register |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_DeleteR
c
int Arm_Registers_DeleteR(ArmHandle* h, int index);| Item | Description |
|---|---|
| Description | Deletes an R register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , R register ID |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_ReadPR
c
int Arm_Registers_ReadPR(ArmHandle* h, int index, ArmPoseRegister* outReg);| Item | Description |
|---|---|
| Description | Reads a PR pose register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , PR register IDoutReg : ArmPoseRegister* , output PR structure allocated by the caller |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_WritePR
c
int Arm_Registers_WritePR(ArmHandle* h, const ArmPoseRegister* reg);| Item | Description |
|---|---|
| Description | Writes a PR pose register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstreg : const ArmPoseRegister* , pointer parameter whose lifetime must remain valid during the call |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_DeletePR
c
int Arm_Registers_DeletePR(ArmHandle* h, int index);| Item | Description |
|---|---|
| Description | Deletes a PR pose register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , PR register ID |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_ReadSR
c
int Arm_Registers_ReadSR(ArmHandle* h, int index, char* outBuf, size_t bufSize);| Item | Description |
|---|---|
| Description | Reads an SR string register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , SR register IDoutBuf : char* , output string buffer allocated by the callerbufSize : size_t , output buffer size, including space for the trailing \0 |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
| Notes | String output uses the caller-provided buffer. If the buffer is insufficient, the function returns according to the status code |
Arm_Registers_WriteSR
c
int Arm_Registers_WriteSR(ArmHandle* h, int index, const char* value);| Item | Description |
|---|---|
| Description | Writes an SR string register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , SR register IDvalue : const char* , SR string value to write |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_DeleteSR
c
int Arm_Registers_DeleteSR(ArmHandle* h, int index);| Item | Description |
|---|---|
| Description | Deletes an SR string register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , SR register ID |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_ReadMR
c
int Arm_Registers_ReadMR(ArmHandle* h, int index, int* outValue);| Item | Description |
|---|---|
| Description | Reads an MR register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MR register IDoutValue : int* , output MR value pointer |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_WriteMR
c
int Arm_Registers_WriteMR(ArmHandle* h, int index, int value);| Item | Description |
|---|---|
| Description | Writes an MR register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MR register IDvalue : int , value to write into the MR register |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_DeleteMR
c
int Arm_Registers_DeleteMR(ArmHandle* h, int index);| Item | Description |
|---|---|
| Description | Deletes an MR register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MR register ID |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_ReadMH
c
int Arm_Registers_ReadMH(ArmHandle* h, int index, int* outValue);| Item | Description |
|---|---|
| Description | Reads an MH register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MH register IDoutValue : int* , output MH value pointer |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_WriteMH
c
int Arm_Registers_WriteMH(ArmHandle* h, int index, int value);| Item | Description |
|---|---|
| Description | Writes an MH register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MH register IDvalue : int , value to write into the MH register |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_ReadMI
c
int Arm_Registers_ReadMI(ArmHandle* h, int index, int* outValue);| Item | Description |
|---|---|
| Description | Reads an MI register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MI register IDoutValue : int* , output MI value pointer |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Arm_Registers_WriteMI
c
int Arm_Registers_WriteMI(ArmHandle* h, int index, int value);| Item | Description |
|---|---|
| Description | Writes an MI register |
| Request Parameters | h : ArmHandle* , C99 session handle, usually from Arm_Create() ; business APIs require connection firstindex : int , MI register IDvalue : int , value to write into the MI register |
| Return Value | STATUS_CODE integer value; 0 means success, other values should be handled as status codes |
Register Types
| Type | Read | Write | Delete | Data |
|---|---|---|---|---|
| R | Arm_Registers_ReadR | Arm_Registers_WriteR | Arm_Registers_DeleteR | double |
| PR | Arm_Registers_ReadPR | Arm_Registers_WritePR | Arm_Registers_DeletePR | ArmPoseRegister |
| SR | Arm_Registers_ReadSR | Arm_Registers_WriteSR | Arm_Registers_DeleteSR | String |
| MR | Arm_Registers_ReadMR | Arm_Registers_WriteMR | Arm_Registers_DeleteMR | int |
| MH | Arm_Registers_ReadMH | Arm_Registers_WriteMH | No delete API | int |
| MI | Arm_Registers_ReadMI | Arm_Registers_WriteMI | No delete API | int |
Parameters and Rules
| Item | Rule |
|---|---|
index | Controller-side register ID |
Arm_Registers_ReadSR() | Uses char* + bufSize to output the string. The buffer must include space for the trailing \0 |
Arm_Registers_ReadPR() | Outputs ArmPoseRegister ; caller passes a valid structure pointer |
Arm_Registers_WritePR() | Uses ArmPoseRegister.id to specify the PR ID to write |
MH / MI | Provide read/write APIs, but no delete APIs |
| Write and delete | Change controller register state; confirm the site business before running them |
ArmPoseRegister Fields
| Field | Type | Description |
|---|---|---|
id | int | PR register ID |
cart | double[6] | Cartesian pose data |
joint | double[9] | Joint pose data |
poseType | int | Pose type. See ArmPoseType |
turnCycle | int[9] | Joint turn-cycle information |
wristFlip | int | Wrist flip flag |
armUpDown | int | Arm up/down posture flag |
armBackFront | int | Arm back/front posture flag |
armLeftRight | int | Arm left/right posture flag |
name | char[64] | Pose name |
comment | char[128] | Pose comment |
Minimal Call Example
c
#include <stdio.h> // printf for printing R register value
#include "c_arm_api.h" // C99 SDK umbrella header
int main(void)
{
ArmHandle* h = Arm_Create();
double rValue = 0.0;
if (h == NULL) {
return 1;
}
if (Arm_Connect(h, "10.27.1.2", "10.27.1.102") != 0) {
Arm_Destroy(h);
return 1;
}
int ret = Arm_Registers_ReadR(h, 1, &rValue);
printf("r1=%f\n", rValue);
Arm_Disconnect(h);
Arm_Destroy(h);
return ret == 0 ? 0 : 1;
}Scenario Examples
c
double rValue = 0.0;
ArmPoseRegister pr = {0};
char sr[128] = {0};
int mr = 0;
int mh = 0;
int mi = 0;
int readRRet = Arm_Registers_ReadR(h, 1, &rValue);
int readPRRet = Arm_Registers_ReadPR(h, 1, &pr);
int readSRRet = Arm_Registers_ReadSR(h, 1, sr, sizeof(sr));
int readMRRet = Arm_Registers_ReadMR(h, 1, &mr);
int readMHRet = Arm_Registers_ReadMH(h, 1, &mh);
int readMIRet = Arm_Registers_ReadMI(h, 1, &mi);
/* int writeRRet = Arm_Registers_WriteR(h, 1, rValue); */
/* int writePRRet = Arm_Registers_WritePR(h, &pr); */
/* int writeSRRet = Arm_Registers_WriteSR(h, 1, "demo"); */
/* int writeMRRet = Arm_Registers_WriteMR(h, 1, mr); */
/* int writeMHRet = Arm_Registers_WriteMH(h, 1, mh); */
/* int writeMIRet = Arm_Registers_WriteMI(h, 1, mi); */
/* int deleteRRet = Arm_Registers_DeleteR(h, 1); */
/* int deletePRRet = Arm_Registers_DeletePR(h, 1); */
/* int deleteSRRet = Arm_Registers_DeleteSR(h, 1); */
/* int deleteMRRet = Arm_Registers_DeleteMR(h, 1); */
(void)readRRet;
(void)readPRRet;
(void)readSRRet;
(void)readMRRet;
(void)readMHRet;
(void)readMIRet;Example code:
cpp
#include <stdio.h>
#include <string.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_registers] 创建句柄失败 / 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_registers] 连接失败 / Connect failed, 状态码 / Status code: %d\n", ret);
Arm_Destroy(handle);
return 1;
}
printf("[c99_registers] 机器人连接成功 / Robot connected successfully\n");
// [ZH] 顺序读取全部寄存器类型。
// [EN] Read all register types in sequence.
double rValue = 0.0;
ArmPoseRegister prValue;
char srValue[256] = {0};
int mrValue = 0;
int mhValue = 0;
int miValue = 0;
memset(&prValue, 0, sizeof(prValue));
ret = Arm_Registers_ReadR(handle, 0, &rValue);
printf("[c99_registers] ReadR 状态码 / ReadR status code: %d, R[0]=%.6f\n", ret, rValue);
ret = Arm_Registers_ReadPR(handle, 0, &prValue);
printf("[c99_registers] ReadPR 状态码 / ReadPR status code: %d, PR[0].id=%d, name=%s\n", ret, prValue.id, prValue.name);
ret = Arm_Registers_ReadSR(handle, 0, srValue, sizeof(srValue));
printf("[c99_registers] ReadSR 状态码 / ReadSR status code: %d, SR[0]=%s\n", ret, srValue);
ret = Arm_Registers_ReadMR(handle, 0, &mrValue);
printf("[c99_registers] ReadMR 状态码 / ReadMR status code: %d, MR[0]=%d\n", ret, mrValue);
ret = Arm_Registers_ReadMH(handle, 0, &mhValue);
printf("[c99_registers] ReadMH 状态码 / ReadMH status code: %d, MH[0]=%d\n", ret, mhValue);
ret = Arm_Registers_ReadMI(handle, 0, &miValue);
printf("[c99_registers] ReadMI 状态码 / ReadMI status code: %d, MI[0]=%d\n", ret, miValue);
// [ZH] 顺序执行全部写接口与删除接口。
// [EN] Execute all write APIs and delete APIs in sequence.
ret = Arm_Registers_WriteR(handle, 0, rValue);
printf("[c99_registers] WriteR 状态码 / WriteR status code: %d\n", ret);
ret = Arm_Registers_DeleteR(handle, 0);
printf("[c99_registers] DeleteR 状态码 / DeleteR status code: %d\n", ret);
ret = Arm_Registers_WritePR(handle, &prValue);
printf("[c99_registers] WritePR 状态码 / WritePR status code: %d\n", ret);
ret = Arm_Registers_DeletePR(handle, prValue.id);
printf("[c99_registers] DeletePR 状态码 / DeletePR status code: %d\n", ret);
ret = Arm_Registers_WriteSR(handle, 0, srValue);
printf("[c99_registers] WriteSR 状态码 / WriteSR status code: %d\n", ret);
ret = Arm_Registers_DeleteSR(handle, 0);
printf("[c99_registers] DeleteSR 状态码 / DeleteSR status code: %d\n", ret);
ret = Arm_Registers_WriteMR(handle, 0, mrValue);
printf("[c99_registers] WriteMR 状态码 / WriteMR status code: %d\n", ret);
ret = Arm_Registers_DeleteMR(handle, 0);
printf("[c99_registers] DeleteMR 状态码 / DeleteMR status code: %d\n", ret);
ret = Arm_Registers_WriteMH(handle, 0, mhValue);
printf("[c99_registers] WriteMH 状态码 / WriteMH status code: %d\n", ret);
ret = Arm_Registers_WriteMI(handle, 0, miValue);
printf("[c99_registers] WriteMI 状态码 / WriteMI status code: %d\n", ret);
// [ZH] 断开连接并销毁句柄。
// [EN] Disconnect and destroy the handle.
Arm_Disconnect(handle);
Arm_Destroy(handle);
printf("[c99_registers] 示例结束 / Example finished\n");
return 0;
}