From 1f37a710c5a4cb8fee30ced8e246488310f9017a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 8 Mar 2024 20:18:49 +0800 Subject: [PATCH] init --- zaf_ecode.c | 26 +++++++++++++++++++++ zaf_ecode.h | 12 ++++++++++ zaf_port.h | 5 ++++ zaf_protocol.c | 2 ++ zaf_protocol.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ zaf_regs.hpp | 37 +++++++++++++++++++++++++++++ 6 files changed, 155 insertions(+) create mode 100644 zaf_ecode.c create mode 100644 zaf_ecode.h create mode 100644 zaf_port.h create mode 100644 zaf_protocol.c create mode 100644 zaf_protocol.h create mode 100644 zaf_regs.hpp diff --git a/zaf_ecode.c b/zaf_ecode.c new file mode 100644 index 0000000..44c1587 --- /dev/null +++ b/zaf_ecode.c @@ -0,0 +1,26 @@ +#include "zaf_ecode.h" + +const char* zaf_error_code_2_str(zaf_error_code_t ecode) { + switch (ecode) { + case kxs_ec_success: + return "success"; + case kxs_ec_overtime: + return "overtime"; + case kxs_ec_socket_fail: + return "socket fail"; + case kxs_ec_bind_fail: + return "bind fail"; + case kxs_ec_send_fail: + return "send fail"; + case kxs_ec_receive_fail: + return "receive fail"; + case kxs_ec_setsockopt_rx_timeout_fail: + return "setsockopt rx timeout fail"; + case kxs_ec_lose_connect: + return "lose connect"; + case kxs_ec_param_error: + return "param error"; + default: + return "unknown error"; + } +} diff --git a/zaf_ecode.h b/zaf_ecode.h new file mode 100644 index 0000000..64954a7 --- /dev/null +++ b/zaf_ecode.h @@ -0,0 +1,12 @@ +#pragma once +typedef enum { + kxs_ec_success = 0, + kxs_ec_overtime = 1, + kxs_ec_socket_fail = 2, + kxs_ec_bind_fail = 3, + kxs_ec_send_fail = 4, + kxs_ec_receive_fail = 5, + kxs_ec_setsockopt_rx_timeout_fail = 6, + kxs_ec_lose_connect = 7, + kxs_ec_param_error = 8, +} zaf_error_code_t; diff --git a/zaf_port.h b/zaf_port.h new file mode 100644 index 0000000..64b2141 --- /dev/null +++ b/zaf_port.h @@ -0,0 +1,5 @@ +#pragma once +#include + +#define ZAF_SERVICE_DEVICE_PORT 20000 // 设备 端端口 +#define ZAF_SERVICE_PC_PORT 20001 // pc 端端口 \ No newline at end of file diff --git a/zaf_protocol.c b/zaf_protocol.c new file mode 100644 index 0000000..45b745a --- /dev/null +++ b/zaf_protocol.c @@ -0,0 +1,2 @@ +#include "zaf_protocol.h" + diff --git a/zaf_protocol.h b/zaf_protocol.h new file mode 100644 index 0000000..d93a2d3 --- /dev/null +++ b/zaf_protocol.h @@ -0,0 +1,73 @@ +#pragma once +#include + +#include "zaf_ecode.h" +#include "zaf_port.h" +#include "zaf_regs.hpp" + +#pragma pack(1) + +/******************************************************************************* + * 通用指令包 * + *******************************************************************************/ + +#define PACKET_HEADER 0x5A5A +#define PACKET_TAIL 0xA5A5 + +/** + * + * 协议包分为: + * 包头(2Byte) 包类型(2Byte) Index(2Byte) 指令(2Byte) ndata(2byte) data[...] 和校验(1Byte) 包尾(2Byte) + * + */ + +typedef struct { + uint16_t packet_header; + uint16_t packet_type; // zaf_protocol_packet_type_t + uint16_t index; // + uint16_t cmd; // zaf_protocol_cmd_t + uint16_t ndata; // + uint32_t data[]; // first is always checksum +} zaf_packet_header_t; +#pragma pack() + +/** + * @brief CMD + */ +typedef enum { + kzaf_cmd_none = 0, + kzaf_cmd_reg_read = 1, + kzaf_cmd_reg_write = 2, + kzaf_cmd_reg_read_regs = 3, + kzaf_cmd_generator_new_mac = 4, + kzaf_cmd_factory_reset = 5, + kzaf_cmd_reboot = 6, + kzaf_cmd_storage_cfg = 7, +} zaf_protocol_cmd_t; + +/** + * @brief 包类型 + */ +typedef enum { + kzaf_packet_type_cmd = 0, + kzaf_packet_type_receipt = 1, + kzaf_packet_type_report = 2, +} zaf_protocol_packet_type_t; + +/******************************************************************************* + * 业务逻辑枚举 * + *******************************************************************************/ +typedef enum { + obtaining_ip_mode_type_static = 0, + obtaining_ip_mode_type_dhcp = 1, +} obtaining_ip_mode_t; +static inline const char* obtaining_ip_mode_to_string(obtaining_ip_mode_t mode) { + switch (mode) { + case obtaining_ip_mode_type_static: + return "static"; + case obtaining_ip_mode_type_dhcp: + return "dhcp"; + default: + return "unknown"; + } +} diff --git a/zaf_regs.hpp b/zaf_regs.hpp new file mode 100644 index 0000000..eaa0d33 --- /dev/null +++ b/zaf_regs.hpp @@ -0,0 +1,37 @@ +#pragma once +#define REGADD__STM32_COMMON (0x0010) +#define REGADD__STM32_BUSINESS (0x0020) +#define REGADD__FPGA_START (0x0100) + +typedef enum { + /** + * @brief + * REG 0(16) 设备信息基础寄存器 + */ + kreg_software_version = 0, + kreg_manufacturer0 = 1, + kreg_manufacturer1 = 2, + kreg_product_type_id = 3, + kreg_sn_id0 = 4, + kreg_sn_id1 = 5, + kreg_sn_id2 = 6, + kreg_mac0 = 7, + kreg_mac1 = 8, + + /** + * @brief + * REG 16(32) STM32配置寄存器0 + */ + kreg_stm32_obtaining_ip_mode = REGADD__STM32_COMMON + 0, + kreg_stm32_ip = REGADD__STM32_COMMON + 1, + kreg_stm32_gw = REGADD__STM32_COMMON + 2, + kreg_stm32_netmask = REGADD__STM32_COMMON + 3, + kreg_stm32_config0 = REGADD__STM32_COMMON + 4, // bit0: timecode report enable, bit1: camera sync report enable + + kreg_stm32_action0 = REGADD__STM32_COMMON + 14, // action reg + kreg_stm32_action_val0 = REGADD__STM32_COMMON + 15, // action val reg + + kreg_stm32_temperature = REGADD__STM32_BUSINESS + 0, + kreg_stm32_fan0_error_flag = REGADD__STM32_BUSINESS + 1, + +} RegAdd_t;