43#ifndef DETERMINISTICESPASYNCWEBSERVER_FOCAS_H
44#define DETERMINISTICESPASYNCWEBSERVER_FOCAS_H
53#define FOCAS_TCP_PORT 8193
54#define FOCAS_FRAME_HDR_LEN 10
55#define FOCAS_PROTO_VERSION 1
56#define FOCAS_FRAME_DST 0x0002
57#define FOCAS_CMD_SEL_LEN 6
58#define FOCAS_CMD_ARGS_LEN 20
59#define FOCAS_REQ_BODY_LEN 26
60#define FOCAS_RESP_HDR_LEN 14
61#define FOCAS_VALUE_LEN 8
62#define FOCAS_SYSINFO_LEN 18
65enum class FocasFrameType : uint16_t
88 static constexpr FocasCmd read_cnc_param = {1, 1, 0x0e};
89 static constexpr FocasCmd read_macro = {1, 1, 0x15};
90 static constexpr FocasCmd set_macro = {1, 1, 0x16};
91 static constexpr FocasCmd sys_info = {1, 1, 0x18};
92 static constexpr FocasCmd read_alarm = {1, 1, 0x1a};
93 static constexpr FocasCmd read_prg_num = {1, 1, 0x1c};
94 static constexpr FocasCmd read_seq_num = {1, 1, 0x1d};
95 static constexpr FocasCmd read_alarm_info = {1, 1, 0x23};
96 static constexpr FocasCmd read_feedrate = {1, 1, 0x24};
97 static constexpr FocasCmd read_spindle = {1, 1, 0x25};
98 static constexpr FocasCmd read_position = {1, 1, 0x26};
99 static constexpr FocasCmd read_diag = {1, 1, 0x30};
100 static constexpr FocasCmd read_spindle2 = {1, 1, 0x40};
101 static constexpr FocasCmd read_datetime = {1, 1, 0x45};
102 static constexpr FocasCmd read_servo_load = {1, 1, 0x56};
103 static constexpr FocasCmd read_axis_names = {1, 1, 0x89};
104 static constexpr FocasCmd read_spindle_names = {1, 1, 0x8a};
105 static constexpr FocasCmd read_cnc_param3 = {1, 1, 0x8d};
106 static constexpr FocasCmd read_macro_dbl = {1, 1, 0xa7};
107 static constexpr FocasCmd read_pmc = {2, 1, 0x8001};
113 static constexpr int32_t machine = 1;
114 static constexpr int32_t absolute = 4;
115 static constexpr int32_t relative = 6;
116 static constexpr int32_t distance = 7;
117 static constexpr int32_t skip = 8;
125 const uint8_t *payload;
126 uint16_t payload_len;
168size_t focas_build_open(uint8_t *buf,
size_t cap);
171size_t focas_build_close(uint8_t *buf,
size_t cap);
174size_t focas_build_request(uint8_t *buf,
size_t cap, FocasCmd cmd, int32_t v1, int32_t v2, int32_t v3, int32_t v4,
175 int32_t v5,
const uint8_t *extra,
size_t extra_len);
178size_t focas_build_sysinfo(uint8_t *buf,
size_t cap);
181size_t focas_build_read_alarm(uint8_t *buf,
size_t cap);
184size_t focas_build_read_param(uint8_t *buf,
size_t cap, int32_t first, int32_t last, int32_t axis);
187size_t focas_build_read_macro(uint8_t *buf,
size_t cap, int32_t first, int32_t last);
190size_t focas_build_read_position(uint8_t *buf,
size_t cap, int32_t kind, int32_t axis);
193size_t focas_build_read_feedrate(uint8_t *buf,
size_t cap);
196size_t focas_build_read_spindle(uint8_t *buf,
size_t cap);
203bool focas_parse_frame(
const uint8_t *buf,
size_t len, FocasFrame *out);
206bool focas_parse_response(
const uint8_t *payload,
size_t payload_len, FocasResponse *out);
209bool focas_parse_command_frame(
const uint8_t *buf,
size_t len, FocasResponse *out);
212bool focas_parse_sysinfo(
const uint8_t *data,
size_t data_len, FocasSysInfo *out);
215bool focas_parse_alarm(
const uint8_t *data,
size_t data_len, uint32_t *alarm_status);
219bool focas_decode8(
const uint8_t *chunk,
size_t len, FocasValue *out);
222float focas_value_f(
const FocasValue *v);
User-facing configuration for DeterministicESPAsyncWebServer.