From ef3a90cc526860a250c611d3d7aa5c620b7466bc Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周三, 01 2月 2023 17:36:48 +0800 Subject: [PATCH] examples: provide real c++ example --- examples/Makefile | 2 examples/common-cxx/scpi-def.h | 58 ++++++++++++++ examples/test-interactive-cxx/Makefile | 22 +++++ examples/test-interactive-cxx/main.cpp | 108 +++++++++++++++++++++++++++ examples/common-cxx/scpi-def.cpp | 0 5 files changed, 190 insertions(+), 0 deletions(-) diff --git a/examples/Makefile b/examples/Makefile index 462e256..f6c611c 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -4,6 +4,7 @@ cli: $(MAKE) -C test-interactive + $(MAKE) -C test-interactive-cxx $(MAKE) -C test-parser tcp: @@ -12,6 +13,7 @@ clean: $(MAKE) clean -C test-interactive + $(MAKE) clean -C test-interactive-cxx $(MAKE) clean -C test-parser $(MAKE) clean -C test-tcp $(MAKE) clean -C test-tcp-srq diff --git a/examples/common/scpi-def.cpp b/examples/common-cxx/scpi-def.cpp similarity index 100% rename from examples/common/scpi-def.cpp rename to examples/common-cxx/scpi-def.cpp diff --git a/examples/common-cxx/scpi-def.h b/examples/common-cxx/scpi-def.h new file mode 100644 index 0000000..9354b35 --- /dev/null +++ b/examples/common-cxx/scpi-def.h @@ -0,0 +1,58 @@ +/*- + * BSD 2-Clause License + * + * Copyright (c) 2012-2018, Jan Breuer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __SCPI_DEF_H_ +#define __SCPI_DEF_H_ + + +#include "scpi/scpi.h" + +#define SCPI_INPUT_BUFFER_LENGTH 256 +#define SCPI_ERROR_QUEUE_SIZE 17 +#define SCPI_IDN1 "MANUFACTURE" +#define SCPI_IDN2 "INSTR2013" +#define SCPI_IDN3 NULL +#define SCPI_IDN4 "01-02" + +extern const scpi_command_t scpi_commands[]; +extern scpi_interface_t scpi_interface; +extern char scpi_input_buffer[]; +extern scpi_error_t scpi_error_queue_data[]; +extern scpi_t scpi_context; + +size_t SCPI_Write(scpi_t * context, const char * data, size_t len); +int SCPI_Error(scpi_t * context, int_fast16_t err); +scpi_result_t SCPI_Control(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val); +scpi_result_t SCPI_Reset(scpi_t * context); +scpi_result_t SCPI_Flush(scpi_t * context); + + +scpi_result_t SCPI_SystemCommTcpipControlQ(scpi_t * context); + +#endif /* __SCPI_DEF_H_ */ + diff --git a/examples/test-interactive-cxx/Makefile b/examples/test-interactive-cxx/Makefile new file mode 100644 index 0000000..49ed93c --- /dev/null +++ b/examples/test-interactive-cxx/Makefile @@ -0,0 +1,22 @@ + +PROG = test + +SRCS = main.cpp ../common-cxx/scpi-def.cpp +CPPFLAGS += -I ../../libscpi/inc/ +CXXFLAGS += -Wextra +LDFLAGS += -lm ../../libscpi/dist/libscpi.a -Wl,--as-needed + +.PHONY: clean all + +all: $(PROG) + +OBJS = $(SRCS:.cpp=.o) + +%.o: %.cpp + $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $< + +$(PROG): $(OBJS) + $(CXX) -o $@ $(OBJS) $(CXXFLAGS) $(LDFLAGS) + +clean: + $(RM) $(PROG) $(OBJS) diff --git a/examples/test-interactive-cxx/main.cpp b/examples/test-interactive-cxx/main.cpp new file mode 100644 index 0000000..de6e43e --- /dev/null +++ b/examples/test-interactive-cxx/main.cpp @@ -0,0 +1,108 @@ +/*- + * BSD 2-Clause License + * + * Copyright (c) 2012-2018, Jan Breuer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file main.c + * @date Thu Nov 15 10:58:45 UTC 2012 + * + * @brief SCPI parser test + * + * + */ +#include <iostream> +#include "scpi/scpi.h" +#include "../common-cxx/scpi-def.h" + +size_t SCPI_Write(scpi_t * context, const char * data, size_t len) { + (void) context; + std::cout.write(data, len); + return len; +} + +scpi_result_t SCPI_Flush(scpi_t * context) { + (void) context; + std::cout << std::flush; + return SCPI_RES_OK; +} + +int SCPI_Error(scpi_t * context, int_fast16_t err) { + (void) context; + std::cerr << "**ERROR: " << err << ", \"" << SCPI_ErrorTranslate(err) << "\"" << std::endl; + return 0; +} + +scpi_result_t SCPI_Control(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val) { + (void) context; + + if (SCPI_CTRL_SRQ == ctrl) { + std::cerr << "**SRQ: 0x" << std::hex << val << "(" << std::dec << val << ")" << std::endl; + } else { + std::cerr << "**CTRL: " << std::hex << ctrl << ": 0x" << std::hex << val << "(" << std::dec << val << ")" << std::endl; + } + return SCPI_RES_OK; +} + +scpi_result_t SCPI_Reset(scpi_t * context) { + (void) context; + + std::cerr << "**Reset" << std::endl; + return SCPI_RES_OK; +} + +scpi_result_t SCPI_SystemCommTcpipControlQ(scpi_t * context) { + (void) context; + + return SCPI_RES_ERR; +} + +/* + * + */ +int main(int argc, char** argv) { + (void) argc; + (void) argv; + + SCPI_Init(&scpi_context, + scpi_commands, + &scpi_interface, + scpi_units_def, + SCPI_IDN1, SCPI_IDN2, SCPI_IDN3, SCPI_IDN4, + scpi_input_buffer, SCPI_INPUT_BUFFER_LENGTH, + scpi_error_queue_data, SCPI_ERROR_QUEUE_SIZE); + + std::cerr << "SCPI Interactive demo" << std::endl; + + while (1) { + char ch = std::cin.get(); + SCPI_Input(&scpi_context, &ch, 1); + } + + + return (EXIT_SUCCESS); +} + -- Gitblit v1.9.1