modbus: recreate static lib with correct hooks
This commit is contained in:
parent
0cbf3c7038
commit
b8dbe681fa
231
Modbus/.cproject
231
Modbus/.cproject
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="com.crt.advproject.config.lib.debug.1243980727">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.debug.1243980727" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||
<cconfiguration id="com.crt.advproject.config.lib.debug.796503394">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.debug.796503394" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||
<externalSettings>
|
||||
<externalSetting>
|
||||
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
||||
@ -21,50 +21,76 @@
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Debug build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.debug.1243980727" name="Debug" parent="com.crt.advproject.config.lib.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||
<folderInfo id="com.crt.advproject.config.lib.debug.1243980727." name="/" resourcePath="">
|
||||
<toolChain id="com.crt.advproject.toolchain.lib.debug.1747277720" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.debug">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.debug.1818998794" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.debug"/>
|
||||
<builder buildPath="${workspace_loc:/Modbus}/Debug" id="com.crt.advproject.builder.lib.debug.1542146393" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.debug"/>
|
||||
<tool id="com.crt.advproject.cpp.lib.debug.619745829" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.debug">
|
||||
<option id="com.crt.advproject.cpp.hdrlib.1940415426" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false"/>
|
||||
<option id="com.crt.advproject.cpp.fpu.893968908" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.gcc.lib.debug.284142615" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.debug">
|
||||
<option id="com.crt.advproject.gcc.thumb.1769631408" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gcc.arch.1802329931" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1874114209" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Debug build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.debug.796503394" name="Debug" parent="com.crt.advproject.config.lib.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||
<folderInfo id="com.crt.advproject.config.lib.debug.796503394." name="/" resourcePath="">
|
||||
<toolChain id="com.crt.advproject.toolchain.lib.debug.488159270" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.debug">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.debug.2139523672" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.debug"/>
|
||||
<builder buildPath="${workspace_loc:/Modbus}/Debug" id="com.crt.advproject.builder.lib.debug.1579116261" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.debug"/>
|
||||
<tool id="com.crt.advproject.cpp.lib.debug.209035710" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.debug">
|
||||
<option id="com.crt.advproject.cpp.thumb.259697205" name="Thumb mode" superClass="com.crt.advproject.cpp.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.cpp.specs.514010321" name="Specs" superClass="com.crt.advproject.cpp.specs" useByScannerDiscovery="false" value="com.crt.advproject.cpp.specs.newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.cpp.arch.1146076479" name="Architecture" superClass="com.crt.advproject.cpp.arch" useByScannerDiscovery="true" value="com.crt.advproject.cpp.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1225522102" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||
<listOptionValue builtIn="false" value="__REDLIB__"/>
|
||||
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||
</option>
|
||||
<option id="gnu.c.compiler.option.misc.other.1372819195" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||
<option id="gnu.c.compiler.option.optimization.flags.933521341" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||
<option id="com.crt.advproject.gcc.hdrlib.727060650" name="Library headers" superClass="com.crt.advproject.gcc.hdrlib" useByScannerDiscovery="false" value="Redlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.fpu.1031944818" name="Floating point" superClass="com.crt.advproject.gcc.fpu" useByScannerDiscovery="true"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.2142704447" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||
<option id="gnu.cpp.compiler.option.other.other.124292613" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" valueType="string"/>
|
||||
<option id="gnu.cpp.compiler.option.optimization.flags.1921314613" name="Other optimization flags" superClass="gnu.cpp.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||
<option id="com.crt.advproject.cpp.hdrlib.1590569765" name="Library headers" superClass="com.crt.advproject.cpp.hdrlib" useByScannerDiscovery="false" value="Newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.cpp.fpu.1729598885" name="Floating point" superClass="com.crt.advproject.cpp.fpu" useByScannerDiscovery="true"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1740150318" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<option id="com.crt.advproject.c.misc.dialect.1244882132" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.input.1577047141" superClass="com.crt.advproject.compiler.input"/>
|
||||
<option id="com.crt.advproject.cpp.misc.dialect.747855378" superClass="com.crt.advproject.cpp.misc.dialect" value="com.crt.advproject.misc.dialect.c++11" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.cpp.input.1385489560" superClass="com.crt.advproject.compiler.cpp.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.gas.lib.debug.1255319619" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.debug">
|
||||
<option id="com.crt.advproject.gas.thumb.2090111823" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gas.arch.286411657" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||
<option id="gnu.both.asm.option.flags.crt.1889634062" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED -DCORE_M3 -D__LPC15XX__" valueType="string"/>
|
||||
<option id="com.crt.advproject.gas.hdrlib.1568322710" name="Library headers" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gas.fpu.457683638" name="Floating point" superClass="com.crt.advproject.gas.fpu"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1321781434" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||
<tool id="com.crt.advproject.gcc.lib.debug.1137532337" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.debug">
|
||||
<option id="com.crt.advproject.gcc.thumb.1945489176" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gcc.arch.216012255" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.562043933" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||
</option>
|
||||
<option id="gnu.c.compiler.option.misc.other.241461042" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||
<option id="gnu.c.compiler.option.optimization.flags.2103709436" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1053265155" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1466535826" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
<inputType id="com.crt.advproject.assembler.input.1240443838" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||
<option id="com.crt.advproject.c.misc.dialect.879255695" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.hdrlib.481939904" superClass="com.crt.advproject.gcc.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.specs.1921096932" superClass="com.crt.advproject.gcc.specs" value="com.crt.advproject.gcc.specs.newlib" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.input.1261574351" superClass="com.crt.advproject.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.ar.lib.debug.279077506" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.debug"/>
|
||||
<tool id="com.crt.advproject.gas.lib.debug.1508409768" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.debug">
|
||||
<option id="com.crt.advproject.gas.thumb.1166910110" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gas.arch.1242237185" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||
<option id="gnu.both.asm.option.flags.crt.623048910" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DDEBUG -D__CODE_RED -DCORE_M3 -D__USE_LPCOPEN -D__LPC15XX__ -D__NEWLIB__" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.1819424271" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<option id="com.crt.advproject.gas.hdrlib.754991651" superClass="com.crt.advproject.gas.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gas.specs.1411945783" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.newlib" valueType="enumerated"/>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.792255883" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
<inputType id="com.crt.advproject.assembler.input.64420305" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.ar.lib.debug.460749273" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.debug"/>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
<sourceEntries>
|
||||
@ -75,8 +101,8 @@
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="com.crt.advproject.config.lib.release.1542215730">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.release.1542215730" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||
<cconfiguration id="com.crt.advproject.config.lib.release.1641992972">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.lib.release.1641992972" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||
<externalSettings>
|
||||
<externalSetting>
|
||||
<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/Modbus"/>
|
||||
@ -95,45 +121,75 @@
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Release build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.release.1542215730" name="Release" parent="com.crt.advproject.config.lib.release" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||
<folderInfo id="com.crt.advproject.config.lib.release.1542215730." name="/" resourcePath="">
|
||||
<toolChain id="com.crt.advproject.toolchain.lib.release.517404726" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.release">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.release.1949021336" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.release"/>
|
||||
<builder buildPath="${workspace_loc:/Modbus}/Release" id="com.crt.advproject.builder.lib.release.4446171" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.release"/>
|
||||
<tool id="com.crt.advproject.cpp.lib.release.20616150" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.release"/>
|
||||
<tool id="com.crt.advproject.gcc.lib.release.2019613487" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.release">
|
||||
<option id="com.crt.advproject.gcc.thumb.1320467727" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gcc.arch.689637409" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.2111725943" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<configuration artifactExtension="a" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.staticLib" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.staticLib" cleanCommand="rm -rf" description="Release build" errorParsers="org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.lib.release.1641992972" name="Release" parent="com.crt.advproject.config.lib.release" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "lib${BuildArtifactFileName}" ; # arm-none-eabi-objdump -h -S "lib${BuildArtifactFileName}" >"${BuildArtifactFileBaseName}.lss"">
|
||||
<folderInfo id="com.crt.advproject.config.lib.release.1641992972." name="/" resourcePath="">
|
||||
<toolChain id="com.crt.advproject.toolchain.lib.release.661726016" name="NXP MCU Tools" superClass="com.crt.advproject.toolchain.lib.release">
|
||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.lib.release.1397461883" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.lib.release"/>
|
||||
<builder buildPath="${workspace_loc:/Modbus}/Release" id="com.crt.advproject.builder.lib.release.2022185850" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.lib.release"/>
|
||||
<tool id="com.crt.advproject.cpp.lib.release.1346216254" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.lib.release">
|
||||
<option id="com.crt.advproject.cpp.thumb.704134014" name="Thumb mode" superClass="com.crt.advproject.cpp.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.cpp.specs.1631764716" name="Specs" superClass="com.crt.advproject.cpp.specs" useByScannerDiscovery="false" value="com.crt.advproject.cpp.specs.newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.cpp.arch.1972156308" name="Architecture" superClass="com.crt.advproject.cpp.arch" useByScannerDiscovery="true" value="com.crt.advproject.cpp.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.154862246" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="NDEBUG"/>
|
||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||
<listOptionValue builtIn="false" value="__REDLIB__"/>
|
||||
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||
</option>
|
||||
<option id="gnu.c.compiler.option.misc.other.1628159777" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||
<option id="gnu.c.compiler.option.optimization.flags.181489377" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.253607500" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||
<option id="gnu.cpp.compiler.option.other.other.97112883" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" valueType="string"/>
|
||||
<option id="gnu.cpp.compiler.option.optimization.flags.75707207" name="Other optimization flags" superClass="gnu.cpp.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common -Os" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.386692672" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<option id="com.crt.advproject.c.misc.dialect.878054737" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.hdrlib.1522606341" superClass="com.crt.advproject.gcc.hdrlib" value="Redlib" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.input.1105768945" superClass="com.crt.advproject.compiler.input"/>
|
||||
<option id="com.crt.advproject.cpp.misc.dialect.1026125528" superClass="com.crt.advproject.cpp.misc.dialect" value="com.crt.advproject.misc.dialect.c++11" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.cpp.hdrlib.1575397547" superClass="com.crt.advproject.cpp.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.cpp.input.1551890212" superClass="com.crt.advproject.compiler.cpp.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.gas.lib.release.315184569" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.release">
|
||||
<option id="com.crt.advproject.gas.thumb.497126066" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gas.arch.1254846099" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||
<option id="gnu.both.asm.option.flags.crt.920976125" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DNDEBUG -D__CODE_RED -DCORE_M3 -D__LPC15XX__" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.302350239" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||
<tool id="com.crt.advproject.gcc.lib.release.651316468" name="MCU C Compiler" superClass="com.crt.advproject.gcc.lib.release">
|
||||
<option id="com.crt.advproject.gcc.thumb.1038937887" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gcc.arch.1939097864" name="Architecture" superClass="com.crt.advproject.gcc.arch" useByScannerDiscovery="true" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1167588143" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="NDEBUG"/>
|
||||
<listOptionValue builtIn="false" value="__CODE_RED"/>
|
||||
<listOptionValue builtIn="false" value="CORE_M3"/>
|
||||
<listOptionValue builtIn="false" value="__USE_LPCOPEN"/>
|
||||
<listOptionValue builtIn="false" value="__LPC15XX__"/>
|
||||
<listOptionValue builtIn="false" value="__NEWLIB__"/>
|
||||
</option>
|
||||
<option id="gnu.c.compiler.option.misc.other.2101559284" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections" valueType="string"/>
|
||||
<option id="gnu.c.compiler.option.optimization.flags.1015749175" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" useByScannerDiscovery="false" value="-fno-common" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1725679522" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<option id="com.crt.advproject.gas.hdrlib.1403546165" superClass="com.crt.advproject.gas.hdrlib" value="Redlib" valueType="enumerated"/>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1343706223" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
<inputType id="com.crt.advproject.assembler.input.1776905299" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||
<option id="com.crt.advproject.c.misc.dialect.1534134428" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.c11" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.hdrlib.781606191" superClass="com.crt.advproject.gcc.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gcc.specs.1937017826" superClass="com.crt.advproject.gcc.specs" value="com.crt.advproject.gcc.specs.newlib" valueType="enumerated"/>
|
||||
<inputType id="com.crt.advproject.compiler.input.773190247" superClass="com.crt.advproject.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.ar.lib.release.297408706" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.release"/>
|
||||
<tool id="com.crt.advproject.gas.lib.release.297243120" name="MCU Assembler" superClass="com.crt.advproject.gas.lib.release">
|
||||
<option id="com.crt.advproject.gas.thumb.1919799426" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||
<option id="com.crt.advproject.gas.arch.129562775" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||
<option id="gnu.both.asm.option.flags.crt.701710812" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -DNDEBUG -D__CODE_RED -DCORE_M3 -D__USE_LPCOPEN -D__LPC15XX__ -D__NEWLIB__" valueType="string"/>
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.438433668" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_board_nxp_lpcxpresso_1549/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/lpc_chip_15xx/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc://inc}""/>
|
||||
</option>
|
||||
<option id="com.crt.advproject.gas.hdrlib.951500934" superClass="com.crt.advproject.gas.hdrlib" value="Newlib" valueType="enumerated"/>
|
||||
<option id="com.crt.advproject.gas.specs.1455244390" superClass="com.crt.advproject.gas.specs" value="com.crt.advproject.gas.specs.newlib" valueType="enumerated"/>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1609791713" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
<inputType id="com.crt.advproject.assembler.input.2140703805" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||
</tool>
|
||||
<tool id="com.crt.advproject.ar.lib.release.259759157" name="MCU Archiver" superClass="com.crt.advproject.ar.lib.release"/>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
<sourceEntries>
|
||||
@ -146,40 +202,41 @@
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="Modbus.com.crt.advproject.projecttype.lib.310838571" name="Static Library" projectType="com.crt.advproject.projecttype.lib"/>
|
||||
<project id="Modbus.com.crt.advproject.projecttype.lib.1018194361" name="Static Library" projectType="com.crt.advproject.projecttype.lib"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||
<storageModule moduleId="com.crt.config">
|
||||
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
||||
<TargetConfig>
|
||||
<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/>
|
||||
<infoList vendor="NXP">
|
||||
<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen">
|
||||
<chip>
|
||||
<name>LPC1549</name>
|
||||
<family>LPC15xx</family>
|
||||
<vendor>NXP (formerly Philips)</vendor>
|
||||
<reset board="None" core="Real" sys="Real"/>
|
||||
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
||||
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
||||
<memory id="RAM" type="RAM"/>
|
||||
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
||||
<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/>
|
||||
</chip>
|
||||
<processor>
|
||||
<name gcc_name="cortex-m3">Cortex-M3</name>
|
||||
<family>Cortex-M</family>
|
||||
</processor>
|
||||
</info>
|
||||
</infoList>
|
||||
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
||||
<TargetConfig>
|
||||
<Properties property_2="LPC15xx_256K.cfx" property_3="NXP" property_4="LPC1549" property_count="5" version="100300"/>
|
||||
<infoList vendor="NXP">
|
||||
<info chip="LPC1549" connectscript="LPC15RunBootRomConnect.scp" flash_driver="LPC15xx_256K.cfx" match_id="0x0" name="LPC1549" resetscript="LPC15RunBootRomReset.scp" stub="crt_emu_cm3_gen">
|
||||
<chip>
|
||||
<name>LPC1549</name>
|
||||
<family>LPC15xx</family>
|
||||
<vendor>NXP (formerly Philips)</vendor>
|
||||
<reset board="None" core="Real" sys="Real"/>
|
||||
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
||||
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
||||
<memory id="RAM" type="RAM"/>
|
||||
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
||||
<memoryInstance derived_from="Flash" id="MFlash256" location="0x0" size="0x40000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram0_16" location="0x2000000" size="0x4000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram1_16" location="0x2004000" size="0x4000"/>
|
||||
<memoryInstance derived_from="RAM" id="Ram2_4" location="0x2008000" size="0x1000"/>
|
||||
</chip>
|
||||
<processor>
|
||||
<name gcc_name="cortex-m3">Cortex-M3</name>
|
||||
<family>Cortex-M</family>
|
||||
</processor>
|
||||
</info>
|
||||
</infoList>
|
||||
</TargetConfig></projectStorage>
|
||||
</storageModule>
|
||||
<storageModule moduleId="refreshScope"/>
|
||||
<storageModule moduleId="com.crt.advproject">
|
||||
<boardId>LPCXpresso1549</boardId>
|
||||
</storageModule>
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
<name>Modbus</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>lpc_chip_15xx</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
@ -20,6 +21,7 @@
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||
</natures>
|
||||
|
||||
@ -1,8 +1,3 @@
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
|
||||
>>>>>>> bada194ebe7490c25ca7589366224d4ae0f80eab
|
||||
#ifndef SERIALPORT_H_
|
||||
#define SERIALPORT_H_
|
||||
|
||||
|
||||
@ -51,11 +51,9 @@ obtain a copy.
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
|
||||
#ifndef _UTIL_CRC16_H_
|
||||
#define _UTIL_CRC16_H_
|
||||
|
||||
|
||||
/** @ingroup util_crc16
|
||||
Processor-independent CRC-16 calculation.
|
||||
|
||||
@ -68,7 +66,8 @@ obtain a copy.
|
||||
@param uint8_t a (0x00..0xFF)
|
||||
@return calculated CRC (0x0000..0xFFFF)
|
||||
*/
|
||||
static uint16_t crc16_update(uint16_t crc, uint8_t a)
|
||||
static uint16_t
|
||||
crc16_update (uint16_t crc, uint8_t a)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -84,5 +83,4 @@ static uint16_t crc16_update(uint16_t crc, uint8_t a)
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
#endif /* _UTIL_CRC16_H_ */
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/**
|
||||
@file
|
||||
Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol).
|
||||
Arduino library for communicating with Modbus slaves over RS232/485 (via RTU
|
||||
protocol).
|
||||
*/
|
||||
/*
|
||||
|
||||
@ -27,24 +28,26 @@ Arduino library for communicating with Modbus slaves over RS232/485 (via RTU pro
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* _____PROJECT INCLUDES_____________________________________________________ */
|
||||
/* _____PROJECT INCLUDES_____________________________________________________
|
||||
*/
|
||||
#include "ModbusMaster.h"
|
||||
#include "crc16.h"
|
||||
|
||||
|
||||
/* _____GLOBAL VARIABLES_____________________________________________________ */
|
||||
/* _____GLOBAL VARIABLES_____________________________________________________
|
||||
*/
|
||||
#if defined(ARDUINO_ARCH_AVR)
|
||||
HardwareSerial* MBSerial = &Serial; ///< Pointer to Serial class object
|
||||
HardwareSerial *MBSerial = &Serial; ///< Pointer to Serial class object
|
||||
#elif defined(ARDUINO_ARCH_SAM)
|
||||
UARTClass* MBSerial = &Serial; ///< Pointer to Serial class object
|
||||
UARTClass *MBSerial = &Serial; ///< Pointer to Serial class object
|
||||
#else
|
||||
//In the case of undefined Serial the code should still function
|
||||
// #error "This library only supports boards with an AVR or SAM processor. Please open an issue at https://github.com/4-20ma/ModbusMaster/issues and indicate which processor/platform you're using."
|
||||
// In the case of undefined Serial the code should still function
|
||||
// #error "This library only supports boards with an AVR or SAM processor.
|
||||
// Please open an issue at https://github.com/4-20ma/ModbusMaster/issues and
|
||||
// indicate which processor/platform you're using."
|
||||
#endif
|
||||
|
||||
|
||||
/* _____PUBLIC FUNCTIONS_____________________________________________________ */
|
||||
/* _____PUBLIC FUNCTIONS_____________________________________________________
|
||||
*/
|
||||
/**
|
||||
Constructor.
|
||||
|
||||
@ -52,14 +55,13 @@ Creates class object using default serial port 0, Modbus slave ID 1.
|
||||
|
||||
@ingroup setup
|
||||
*/
|
||||
ModbusMaster::ModbusMaster(void)
|
||||
ModbusMaster::ModbusMaster (void)
|
||||
{
|
||||
_u8SerialPort = 0;
|
||||
_u8MBSlave = 1;
|
||||
_u16BaudRate = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Constructor.
|
||||
|
||||
@ -69,32 +71,31 @@ Creates class object using default serial port 0, specified Modbus slave ID.
|
||||
@param u8MBSlave Modbus slave ID (1..255)
|
||||
@ingroup setup
|
||||
*/
|
||||
ModbusMaster::ModbusMaster(uint8_t u8MBSlave)
|
||||
ModbusMaster::ModbusMaster (uint8_t u8MBSlave)
|
||||
{
|
||||
_u8SerialPort = 0;
|
||||
_u8MBSlave = u8MBSlave;
|
||||
_u16BaudRate = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Constructor.
|
||||
|
||||
Creates class object using specified serial port, Modbus slave ID.
|
||||
|
||||
@overload void ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t u8MBSlave)
|
||||
@overload void ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t
|
||||
u8MBSlave)
|
||||
@param u8SerialPort serial port (Serial, Serial1..Serial3)
|
||||
@param u8MBSlave Modbus slave ID (1..255)
|
||||
@ingroup setup
|
||||
*/
|
||||
ModbusMaster::ModbusMaster(uint8_t u8SerialPort, uint8_t u8MBSlave)
|
||||
ModbusMaster::ModbusMaster (uint8_t u8SerialPort, uint8_t u8MBSlave)
|
||||
{
|
||||
_u8SerialPort = (u8SerialPort > 3) ? 0 : u8SerialPort;
|
||||
_u8MBSlave = u8MBSlave;
|
||||
_u16BaudRate = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Initialize class object.
|
||||
|
||||
@ -103,12 +104,12 @@ Call once class has been instantiated, typically within setup().
|
||||
|
||||
@ingroup setup
|
||||
*/
|
||||
void ModbusMaster::begin(void)
|
||||
void
|
||||
ModbusMaster::begin (void)
|
||||
{
|
||||
begin(19200);
|
||||
begin (19200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Initialize class object.
|
||||
|
||||
@ -119,9 +120,10 @@ Call once class has been instantiated, typically within setup().
|
||||
@param u16BaudRate baud rate, in standard increments (300..115200)
|
||||
@ingroup setup
|
||||
*/
|
||||
void ModbusMaster::begin(uint16_t u16BaudRate)
|
||||
void
|
||||
ModbusMaster::begin (uint16_t u16BaudRate)
|
||||
{
|
||||
// txBuffer = (uint16_t*) calloc(ku8MaxBufferSize, sizeof(uint16_t));
|
||||
// txBuffer = (uint16_t*) calloc(ku8MaxBufferSize, sizeof(uint16_t));
|
||||
_u8TransmitBufferIndex = 0;
|
||||
u16TransmitBufferLength = 0;
|
||||
|
||||
@ -153,10 +155,12 @@ void ModbusMaster::begin(uint16_t u16BaudRate)
|
||||
}
|
||||
#endif
|
||||
|
||||
if(MBSerial == NULL) MBSerial = new SerialPort;
|
||||
if(u16BaudRate != _u16BaudRate) {
|
||||
if (MBSerial == NULL)
|
||||
MBSerial = new SerialPort;
|
||||
if (u16BaudRate != _u16BaudRate)
|
||||
{
|
||||
_u16BaudRate = u16BaudRate;
|
||||
MBSerial->begin(u16BaudRate);
|
||||
MBSerial->begin (u16BaudRate);
|
||||
}
|
||||
_idle = NULL;
|
||||
|
||||
@ -166,8 +170,8 @@ void ModbusMaster::begin(uint16_t u16BaudRate)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void ModbusMaster::beginTransmission(uint16_t u16Address)
|
||||
void
|
||||
ModbusMaster::beginTransmission (uint16_t u16Address)
|
||||
{
|
||||
_u16WriteAddress = u16Address;
|
||||
_u8TransmitBufferIndex = 0;
|
||||
@ -175,10 +179,12 @@ void ModbusMaster::beginTransmission(uint16_t u16Address)
|
||||
}
|
||||
|
||||
// eliminate this function in favor of using existing MB request functions
|
||||
uint8_t ModbusMaster::requestFrom(uint16_t address, uint16_t quantity)
|
||||
uint8_t
|
||||
ModbusMaster::requestFrom (uint16_t address, uint16_t quantity)
|
||||
{
|
||||
uint8_t read;
|
||||
read = 1; // krl: added this to prevent warning. This method is not called anywhere...
|
||||
read = 1; // krl: added this to prevent warning. This method is not called
|
||||
// anywhere...
|
||||
// clamp to buffer length
|
||||
if (quantity > ku8MaxBufferSize)
|
||||
{
|
||||
@ -191,8 +197,8 @@ uint8_t ModbusMaster::requestFrom(uint16_t address, uint16_t quantity)
|
||||
return read;
|
||||
}
|
||||
|
||||
|
||||
void ModbusMaster::sendBit(bool data)
|
||||
void
|
||||
ModbusMaster::sendBit (bool data)
|
||||
{
|
||||
uint8_t txBitIndex = u16TransmitBufferLength % 16;
|
||||
if ((u16TransmitBufferLength >> 4) < ku8MaxBufferSize)
|
||||
@ -201,14 +207,14 @@ void ModbusMaster::sendBit(bool data)
|
||||
{
|
||||
_u16TransmitBuffer[_u8TransmitBufferIndex] = 0;
|
||||
}
|
||||
bitWrite(_u16TransmitBuffer[_u8TransmitBufferIndex], txBitIndex, data);
|
||||
bitWrite (_u16TransmitBuffer[_u8TransmitBufferIndex], txBitIndex, data);
|
||||
u16TransmitBufferLength++;
|
||||
_u8TransmitBufferIndex = u16TransmitBufferLength >> 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ModbusMaster::send(uint16_t data)
|
||||
void
|
||||
ModbusMaster::send (uint16_t data)
|
||||
{
|
||||
if (_u8TransmitBufferIndex < ku8MaxBufferSize)
|
||||
{
|
||||
@ -217,34 +223,27 @@ void ModbusMaster::send(uint16_t data)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ModbusMaster::send(uint32_t data)
|
||||
void
|
||||
ModbusMaster::send (uint32_t data)
|
||||
{
|
||||
send(lowWord(data));
|
||||
send(highWord(data));
|
||||
send (lowWord (data));
|
||||
send (highWord (data));
|
||||
}
|
||||
|
||||
|
||||
void ModbusMaster::send(uint8_t data)
|
||||
void
|
||||
ModbusMaster::send (uint8_t data)
|
||||
{
|
||||
send(word(data));
|
||||
send (word (data));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
uint8_t ModbusMaster::available(void)
|
||||
uint8_t
|
||||
ModbusMaster::available (void)
|
||||
{
|
||||
return _u8ResponseBufferLength - _u8ResponseBufferIndex;
|
||||
}
|
||||
|
||||
|
||||
uint16_t ModbusMaster::receive(void)
|
||||
uint16_t
|
||||
ModbusMaster::receive (void)
|
||||
{
|
||||
if (_u8ResponseBufferIndex < _u8ResponseBufferLength)
|
||||
{
|
||||
@ -256,13 +255,6 @@ uint16_t ModbusMaster::receive(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Set idle time callback function (cooperative multitasking).
|
||||
|
||||
@ -273,12 +265,12 @@ serial ports, etc. is permitted within callback function.
|
||||
|
||||
@see ModbusMaster::ModbusMasterTransaction()
|
||||
*/
|
||||
void ModbusMaster::idle(void (*idle)())
|
||||
void
|
||||
ModbusMaster::idle (void (*idle) ())
|
||||
{
|
||||
_idle = idle;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Retrieve data from response buffer.
|
||||
|
||||
@ -287,7 +279,8 @@ Retrieve data from response buffer.
|
||||
@return value in position u8Index of response buffer (0x0000..0xFFFF)
|
||||
@ingroup buffer
|
||||
*/
|
||||
uint16_t ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
||||
uint16_t
|
||||
ModbusMaster::getResponseBuffer (uint8_t u8Index)
|
||||
{
|
||||
if (u8Index < ku8MaxBufferSize)
|
||||
{
|
||||
@ -299,14 +292,14 @@ uint16_t ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Clear Modbus response buffer.
|
||||
|
||||
@see ModbusMaster::getResponseBuffer(uint8_t u8Index)
|
||||
@ingroup buffer
|
||||
*/
|
||||
void ModbusMaster::clearResponseBuffer()
|
||||
void
|
||||
ModbusMaster::clearResponseBuffer ()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
@ -316,17 +309,18 @@ void ModbusMaster::clearResponseBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Place data in transmit buffer.
|
||||
|
||||
@see ModbusMaster::clearTransmitBuffer()
|
||||
@param u8Index index of transmit buffer array (0x00..0x3F)
|
||||
@param u16Value value to place in position u8Index of transmit buffer (0x0000..0xFFFF)
|
||||
@param u16Value value to place in position u8Index of transmit buffer
|
||||
(0x0000..0xFFFF)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup buffer
|
||||
*/
|
||||
uint8_t ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
||||
uint8_t
|
||||
ModbusMaster::setTransmitBuffer (uint8_t u8Index, uint16_t u16Value)
|
||||
{
|
||||
if (u8Index < ku8MaxBufferSize)
|
||||
{
|
||||
@ -339,14 +333,14 @@ uint8_t ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Clear Modbus transmit buffer.
|
||||
|
||||
@see ModbusMaster::setTransmitBuffer(uint8_t u8Index, uint16_t u16Value)
|
||||
@ingroup buffer
|
||||
*/
|
||||
void ModbusMaster::clearTransmitBuffer()
|
||||
void
|
||||
ModbusMaster::clearTransmitBuffer ()
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
@ -356,7 +350,6 @@ void ModbusMaster::clearTransmitBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x01 Read Coils.
|
||||
|
||||
@ -380,14 +373,14 @@ order end of the word).
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup discrete
|
||||
*/
|
||||
uint8_t ModbusMaster::readCoils(uint16_t u16ReadAddress, uint16_t u16BitQty)
|
||||
uint8_t
|
||||
ModbusMaster::readCoils (uint16_t u16ReadAddress, uint16_t u16BitQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16BitQty;
|
||||
return ModbusMasterTransaction(ku8MBReadCoils);
|
||||
return ModbusMasterTransaction (ku8MBReadCoils);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x02 Read Discrete Inputs.
|
||||
|
||||
@ -407,19 +400,19 @@ bits in the final data word will be padded with zeros (toward the high
|
||||
order end of the word).
|
||||
|
||||
@param u16ReadAddress address of first discrete input (0x0000..0xFFFF)
|
||||
@param u16BitQty quantity of discrete inputs to read (1..2000, enforced by remote device)
|
||||
@param u16BitQty quantity of discrete inputs to read (1..2000, enforced by
|
||||
remote device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup discrete
|
||||
*/
|
||||
uint8_t ModbusMaster::readDiscreteInputs(uint16_t u16ReadAddress,
|
||||
uint16_t u16BitQty)
|
||||
uint8_t
|
||||
ModbusMaster::readDiscreteInputs (uint16_t u16ReadAddress, uint16_t u16BitQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16BitQty;
|
||||
return ModbusMasterTransaction(ku8MBReadDiscreteInputs);
|
||||
return ModbusMasterTransaction (ku8MBReadDiscreteInputs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x03 Read Holding Registers.
|
||||
|
||||
@ -432,19 +425,20 @@ The register data in the response buffer is packed as one word per
|
||||
register.
|
||||
|
||||
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by remote device)
|
||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by
|
||||
remote device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::readHoldingRegisters(uint16_t u16ReadAddress,
|
||||
uint8_t
|
||||
ModbusMaster::readHoldingRegisters (uint16_t u16ReadAddress,
|
||||
uint16_t u16ReadQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16ReadQty;
|
||||
return ModbusMasterTransaction(ku8MBReadHoldingRegisters);
|
||||
return ModbusMasterTransaction (ku8MBReadHoldingRegisters);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x04 Read Input Registers.
|
||||
|
||||
@ -457,19 +451,19 @@ The register data in the response buffer is packed as one word per
|
||||
register.
|
||||
|
||||
@param u16ReadAddress address of the first input register (0x0000..0xFFFF)
|
||||
@param u16ReadQty quantity of input registers to read (1..125, enforced by remote device)
|
||||
@param u16ReadQty quantity of input registers to read (1..125, enforced by
|
||||
remote device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::readInputRegisters(uint16_t u16ReadAddress,
|
||||
uint8_t u16ReadQty)
|
||||
uint8_t
|
||||
ModbusMaster::readInputRegisters (uint16_t u16ReadAddress, uint8_t u16ReadQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16ReadQty;
|
||||
return ModbusMasterTransaction(ku8MBReadInputRegisters);
|
||||
return ModbusMasterTransaction (ku8MBReadInputRegisters);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x05 Write Single Coil.
|
||||
|
||||
@ -484,14 +478,14 @@ address of the coil to be forced. Coils are addressed starting at zero.
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup discrete
|
||||
*/
|
||||
uint8_t ModbusMaster::writeSingleCoil(uint16_t u16WriteAddress, uint8_t u8State)
|
||||
uint8_t
|
||||
ModbusMaster::writeSingleCoil (uint16_t u16WriteAddress, uint8_t u8State)
|
||||
{
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16WriteQty = (u8State ? 0xFF00 : 0x0000);
|
||||
return ModbusMasterTransaction(ku8MBWriteSingleCoil);
|
||||
return ModbusMasterTransaction (ku8MBWriteSingleCoil);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x06 Write Single Register.
|
||||
|
||||
@ -504,16 +498,16 @@ written. Registers are addressed starting at zero.
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::writeSingleRegister(uint16_t u16WriteAddress,
|
||||
uint8_t
|
||||
ModbusMaster::writeSingleRegister (uint16_t u16WriteAddress,
|
||||
uint16_t u16WriteValue)
|
||||
{
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16WriteQty = 0;
|
||||
_u16TransmitBuffer[0] = u16WriteValue;
|
||||
return ModbusMasterTransaction(ku8MBWriteSingleRegister);
|
||||
return ModbusMasterTransaction (ku8MBWriteSingleRegister);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x0F Write Multiple Coils.
|
||||
|
||||
@ -526,24 +520,25 @@ buffer. A logical '1' in a bit position of the buffer requests the
|
||||
corresponding output to be ON. A logical '0' requests it to be OFF.
|
||||
|
||||
@param u16WriteAddress address of the first coil (0x0000..0xFFFF)
|
||||
@param u16BitQty quantity of coils to write (1..2000, enforced by remote device)
|
||||
@param u16BitQty quantity of coils to write (1..2000, enforced by remote
|
||||
device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup discrete
|
||||
*/
|
||||
uint8_t ModbusMaster::writeMultipleCoils(uint16_t u16WriteAddress,
|
||||
uint16_t u16BitQty)
|
||||
uint8_t
|
||||
ModbusMaster::writeMultipleCoils (uint16_t u16WriteAddress, uint16_t u16BitQty)
|
||||
{
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16WriteQty = u16BitQty;
|
||||
return ModbusMasterTransaction(ku8MBWriteMultipleCoils);
|
||||
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
||||
}
|
||||
uint8_t ModbusMaster::writeMultipleCoils()
|
||||
uint8_t
|
||||
ModbusMaster::writeMultipleCoils ()
|
||||
{
|
||||
_u16WriteQty = u16TransmitBufferLength;
|
||||
return ModbusMasterTransaction(ku8MBWriteMultipleCoils);
|
||||
return ModbusMasterTransaction (ku8MBWriteMultipleCoils);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x10 Write Multiple Registers.
|
||||
|
||||
@ -554,26 +549,28 @@ The requested written values are specified in the transmit buffer. Data
|
||||
is packed as one word per register.
|
||||
|
||||
@param u16WriteAddress address of the holding register (0x0000..0xFFFF)
|
||||
@param u16WriteQty quantity of holding registers to write (1..123, enforced by remote device)
|
||||
@param u16WriteQty quantity of holding registers to write (1..123, enforced by
|
||||
remote device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::writeMultipleRegisters(uint16_t u16WriteAddress,
|
||||
uint8_t
|
||||
ModbusMaster::writeMultipleRegisters (uint16_t u16WriteAddress,
|
||||
uint16_t u16WriteQty)
|
||||
{
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16WriteQty = u16WriteQty;
|
||||
return ModbusMasterTransaction(ku8MBWriteMultipleRegisters);
|
||||
return ModbusMasterTransaction (ku8MBWriteMultipleRegisters);
|
||||
}
|
||||
|
||||
// new version based on Wire.h
|
||||
uint8_t ModbusMaster::writeMultipleRegisters()
|
||||
uint8_t
|
||||
ModbusMaster::writeMultipleRegisters ()
|
||||
{
|
||||
_u16WriteQty = _u8TransmitBufferIndex;
|
||||
return ModbusMasterTransaction(ku8MBWriteMultipleRegisters);
|
||||
return ModbusMasterTransaction (ku8MBWriteMultipleRegisters);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x16 Mask Write Register.
|
||||
|
||||
@ -596,16 +593,16 @@ Result = (Current Contents && And_Mask) || (Or_Mask && (~And_Mask))
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::maskWriteRegister(uint16_t u16WriteAddress,
|
||||
uint16_t u16AndMask, uint16_t u16OrMask)
|
||||
uint8_t
|
||||
ModbusMaster::maskWriteRegister (uint16_t u16WriteAddress, uint16_t u16AndMask,
|
||||
uint16_t u16OrMask)
|
||||
{
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16TransmitBuffer[0] = u16AndMask;
|
||||
_u16TransmitBuffer[1] = u16OrMask;
|
||||
return ModbusMasterTransaction(ku8MBMaskWriteRegister);
|
||||
return ModbusMasterTransaction (ku8MBMaskWriteRegister);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Modbus function 0x17 Read Write Multiple Registers.
|
||||
|
||||
@ -620,32 +617,38 @@ holding registers. The data to be written is specified in the transmit
|
||||
buffer.
|
||||
|
||||
@param u16ReadAddress address of the first holding register (0x0000..0xFFFF)
|
||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by remote device)
|
||||
@param u16ReadQty quantity of holding registers to read (1..125, enforced by
|
||||
remote device)
|
||||
@param u16WriteAddress address of the first holding register (0x0000..0xFFFF)
|
||||
@param u16WriteQty quantity of holding registers to write (1..121, enforced by remote device)
|
||||
@param u16WriteQty quantity of holding registers to write (1..121, enforced by
|
||||
remote device)
|
||||
@return 0 on success; exception number on failure
|
||||
@ingroup register
|
||||
*/
|
||||
uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
||||
uint16_t u16ReadQty, uint16_t u16WriteAddress, uint16_t u16WriteQty)
|
||||
uint8_t
|
||||
ModbusMaster::readWriteMultipleRegisters (uint16_t u16ReadAddress,
|
||||
uint16_t u16ReadQty,
|
||||
uint16_t u16WriteAddress,
|
||||
uint16_t u16WriteQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16ReadQty;
|
||||
_u16WriteAddress = u16WriteAddress;
|
||||
_u16WriteQty = u16WriteQty;
|
||||
return ModbusMasterTransaction(ku8MBReadWriteMultipleRegisters);
|
||||
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
||||
}
|
||||
uint8_t ModbusMaster::readWriteMultipleRegisters(uint16_t u16ReadAddress,
|
||||
uint8_t
|
||||
ModbusMaster::readWriteMultipleRegisters (uint16_t u16ReadAddress,
|
||||
uint16_t u16ReadQty)
|
||||
{
|
||||
_u16ReadAddress = u16ReadAddress;
|
||||
_u16ReadQty = u16ReadQty;
|
||||
_u16WriteQty = _u8TransmitBufferIndex;
|
||||
return ModbusMasterTransaction(ku8MBReadWriteMultipleRegisters);
|
||||
return ModbusMasterTransaction (ku8MBReadWriteMultipleRegisters);
|
||||
}
|
||||
|
||||
|
||||
/* _____PRIVATE FUNCTIONS____________________________________________________ */
|
||||
/* _____PRIVATE FUNCTIONS____________________________________________________
|
||||
*/
|
||||
/**
|
||||
Modbus transaction engine.
|
||||
Sequence:
|
||||
@ -659,7 +662,8 @@ Sequence:
|
||||
@param u8MBFunction Modbus function (0x01..0xFF)
|
||||
@return 0 on success; exception number on failure
|
||||
*/
|
||||
uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
uint8_t
|
||||
ModbusMaster::ModbusMasterTransaction (uint8_t u8MBFunction)
|
||||
{
|
||||
uint8_t u8ModbusADU[256];
|
||||
uint8_t u8ModbusADUSize = 0;
|
||||
@ -673,21 +677,21 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
u8ModbusADU[u8ModbusADUSize++] = _u8MBSlave;
|
||||
u8ModbusADU[u8ModbusADUSize++] = u8MBFunction;
|
||||
|
||||
switch(u8MBFunction)
|
||||
switch (u8MBFunction)
|
||||
{
|
||||
case ku8MBReadCoils:
|
||||
case ku8MBReadDiscreteInputs:
|
||||
case ku8MBReadInputRegisters:
|
||||
case ku8MBReadHoldingRegisters:
|
||||
case ku8MBReadWriteMultipleRegisters:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16ReadAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16ReadAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16ReadQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16ReadQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16ReadAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16ReadAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16ReadQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16ReadQty);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(u8MBFunction)
|
||||
switch (u8MBFunction)
|
||||
{
|
||||
case ku8MBWriteSingleCoil:
|
||||
case ku8MBMaskWriteRegister:
|
||||
@ -695,38 +699,41 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
case ku8MBWriteSingleRegister:
|
||||
case ku8MBWriteMultipleRegisters:
|
||||
case ku8MBReadWriteMultipleRegisters:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16WriteAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16WriteAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteAddress);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteAddress);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(u8MBFunction)
|
||||
switch (u8MBFunction)
|
||||
{
|
||||
case ku8MBWriteSingleCoil:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty);
|
||||
break;
|
||||
|
||||
case ku8MBWriteSingleRegister:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16TransmitBuffer[0]);
|
||||
break;
|
||||
|
||||
case ku8MBWriteMultipleCoils:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16WriteQty);
|
||||
u8Qty = (_u16WriteQty % 8) ? ((_u16WriteQty >> 3) + 1) : (_u16WriteQty >> 3);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty);
|
||||
u8Qty = (_u16WriteQty % 8) ? ((_u16WriteQty >> 3) + 1)
|
||||
: (_u16WriteQty >> 3);
|
||||
u8ModbusADU[u8ModbusADUSize++] = u8Qty;
|
||||
for (i = 0; i < u8Qty; i++)
|
||||
{
|
||||
switch(i % 2)
|
||||
switch (i % 2)
|
||||
{
|
||||
case 0: // i is even
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[i >> 1]);
|
||||
u8ModbusADU[u8ModbusADUSize++]
|
||||
= lowByte (_u16TransmitBuffer[i >> 1]);
|
||||
break;
|
||||
|
||||
case 1: // i is odd
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[i >> 1]);
|
||||
u8ModbusADU[u8ModbusADUSize++]
|
||||
= highByte (_u16TransmitBuffer[i >> 1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -734,22 +741,22 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
|
||||
case ku8MBWriteMultipleRegisters:
|
||||
case ku8MBReadWriteMultipleRegisters:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16WriteQty << 1);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16WriteQty << 1);
|
||||
|
||||
for (i = 0; i < lowByte(_u16WriteQty); i++)
|
||||
for (i = 0; i < lowByte (_u16WriteQty); i++)
|
||||
{
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[i]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[i]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16TransmitBuffer[i]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16TransmitBuffer[i]);
|
||||
}
|
||||
break;
|
||||
|
||||
case ku8MBMaskWriteRegister:
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(_u16TransmitBuffer[1]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(_u16TransmitBuffer[1]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16TransmitBuffer[0]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (_u16TransmitBuffer[1]);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (_u16TransmitBuffer[1]);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -757,14 +764,15 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
u16CRC = 0xFFFF;
|
||||
for (i = 0; i < u8ModbusADUSize; i++)
|
||||
{
|
||||
u16CRC = crc16_update(u16CRC, u8ModbusADU[i]);
|
||||
u16CRC = crc16_update (u16CRC, u8ModbusADU[i]);
|
||||
}
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte(u16CRC);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte(u16CRC);
|
||||
u8ModbusADU[u8ModbusADUSize++] = lowByte (u16CRC);
|
||||
u8ModbusADU[u8ModbusADUSize++] = highByte (u16CRC);
|
||||
u8ModbusADU[u8ModbusADUSize] = 0;
|
||||
|
||||
// flush receive buffer before transmitting request
|
||||
while (MBSerial->read() != -1);
|
||||
while (MBSerial->read () != -1)
|
||||
;
|
||||
|
||||
#if 0
|
||||
// transmit request
|
||||
@ -777,38 +785,38 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
MBSerial->write((char *)u8ModbusADU, u8ModbusADUSize);
|
||||
MBSerial->write ((char *)u8ModbusADU, u8ModbusADUSize);
|
||||
#endif
|
||||
//printf("TX: %02X\n", u8ModbusADU[0]);
|
||||
// printf("TX: %02X\n", u8ModbusADU[0]);
|
||||
u8ModbusADUSize = 0;
|
||||
MBSerial->flush(); // flush transmit buffer
|
||||
MBSerial->flush (); // flush transmit buffer
|
||||
|
||||
// loop until we run out of time or bytes, or an error occurs
|
||||
u32StartTime = millis();
|
||||
u32StartTime = millis ();
|
||||
while (u8BytesLeft && !u8MBStatus)
|
||||
{
|
||||
if (MBSerial->available())
|
||||
if (MBSerial->available ())
|
||||
{
|
||||
#if __MODBUSMASTER_DEBUG__
|
||||
digitalWrite(4, true);
|
||||
digitalWrite (4, true);
|
||||
#endif
|
||||
u8ModbusADU[u8ModbusADUSize++] = MBSerial->read();
|
||||
u8ModbusADU[u8ModbusADUSize++] = MBSerial->read ();
|
||||
u8BytesLeft--;
|
||||
#if __MODBUSMASTER_DEBUG__
|
||||
digitalWrite(4, false);
|
||||
digitalWrite (4, false);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if __MODBUSMASTER_DEBUG__
|
||||
digitalWrite(5, true);
|
||||
digitalWrite (5, true);
|
||||
#endif
|
||||
if (_idle)
|
||||
{
|
||||
_idle();
|
||||
_idle ();
|
||||
}
|
||||
#if __MODBUSMASTER_DEBUG__
|
||||
digitalWrite(5, false);
|
||||
digitalWrite (5, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -822,22 +830,24 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
break;
|
||||
}
|
||||
|
||||
// verify response is for correct Modbus function code (mask exception bit 7)
|
||||
// verify response is for correct Modbus function code (mask
|
||||
// exception bit 7)
|
||||
if ((u8ModbusADU[1] & 0x7F) != u8MBFunction)
|
||||
{
|
||||
u8MBStatus = ku8MBInvalidFunction;
|
||||
break;
|
||||
}
|
||||
|
||||
// check whether Modbus exception occurred; return Modbus Exception Code
|
||||
if (bitRead(u8ModbusADU[1], 7))
|
||||
// check whether Modbus exception occurred; return Modbus Exception
|
||||
// Code
|
||||
if (bitRead (u8ModbusADU[1], 7))
|
||||
{
|
||||
u8MBStatus = u8ModbusADU[2];
|
||||
break;
|
||||
}
|
||||
|
||||
// evaluate returned Modbus function code
|
||||
switch(u8ModbusADU[1])
|
||||
switch (u8ModbusADU[1])
|
||||
{
|
||||
case ku8MBReadCoils:
|
||||
case ku8MBReadDiscreteInputs:
|
||||
@ -859,7 +869,7 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((millis() - u32StartTime) > ku16MBResponseTimeout)
|
||||
if ((millis () - u32StartTime) > ku16MBResponseTimeout)
|
||||
{
|
||||
u8MBStatus = ku8MBResponseTimedOut;
|
||||
}
|
||||
@ -872,12 +882,13 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
u16CRC = 0xFFFF;
|
||||
for (i = 0; i < (u8ModbusADUSize - 2); i++)
|
||||
{
|
||||
u16CRC = crc16_update(u16CRC, u8ModbusADU[i]);
|
||||
u16CRC = crc16_update (u16CRC, u8ModbusADU[i]);
|
||||
}
|
||||
|
||||
// verify CRC
|
||||
if (!u8MBStatus && (lowByte(u16CRC) != u8ModbusADU[u8ModbusADUSize - 2] ||
|
||||
highByte(u16CRC) != u8ModbusADU[u8ModbusADUSize - 1]))
|
||||
if (!u8MBStatus
|
||||
&& (lowByte (u16CRC) != u8ModbusADU[u8ModbusADUSize - 2]
|
||||
|| highByte (u16CRC) != u8ModbusADU[u8ModbusADUSize - 1]))
|
||||
{
|
||||
u8MBStatus = ku8MBInvalidCRC;
|
||||
}
|
||||
@ -887,7 +898,7 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
if (!u8MBStatus)
|
||||
{
|
||||
// evaluate returned Modbus function code
|
||||
switch(u8ModbusADU[1])
|
||||
switch (u8ModbusADU[1])
|
||||
{
|
||||
case ku8MBReadCoils:
|
||||
case ku8MBReadDiscreteInputs:
|
||||
@ -896,18 +907,20 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
{
|
||||
if (i < ku8MaxBufferSize)
|
||||
{
|
||||
_u16ResponseBuffer[i] = word(u8ModbusADU[2 * i + 4], u8ModbusADU[2 * i + 3]);
|
||||
_u16ResponseBuffer[i]
|
||||
= word (u8ModbusADU[2 * i + 4], u8ModbusADU[2 * i + 3]);
|
||||
}
|
||||
|
||||
_u8ResponseBufferLength = i;
|
||||
}
|
||||
|
||||
// in the event of an odd number of bytes, load last byte into zero-padded word
|
||||
// in the event of an odd number of bytes, load last byte into
|
||||
// zero-padded word
|
||||
if (u8ModbusADU[2] % 2)
|
||||
{
|
||||
if (i < ku8MaxBufferSize)
|
||||
{
|
||||
_u16ResponseBuffer[i] = word(0, u8ModbusADU[2 * i + 3]);
|
||||
_u16ResponseBuffer[i] = word (0, u8ModbusADU[2 * i + 3]);
|
||||
}
|
||||
|
||||
_u8ResponseBufferLength = i + 1;
|
||||
@ -922,7 +935,8 @@ uint8_t ModbusMaster::ModbusMasterTransaction(uint8_t u8MBFunction)
|
||||
{
|
||||
if (i < ku8MaxBufferSize)
|
||||
{
|
||||
_u16ResponseBuffer[i] = word(u8ModbusADU[2 * i + 3], u8ModbusADU[2 * i + 4]);
|
||||
_u16ResponseBuffer[i]
|
||||
= word (u8ModbusADU[2 * i + 3], u8ModbusADU[2 * i + 4]);
|
||||
}
|
||||
|
||||
_u8ResponseBufferLength = i;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user