├── .gitignore ├── .ruby-gemset ├── .ruby-version ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── Makefile ├── README.md ├── Rakefile ├── SCHEMATIC.md ├── SCHEMATIC.monopic ├── SCHEMATIC.svg ├── VERSION ├── doc └── Doxyfile ├── examples ├── one_device │ └── one_device.ino └── two_devices │ └── two_devices.ino ├── extras ├── README.txt └── i2c_adc_ads7828 reference-2.0.2.pdf ├── keywords.txt ├── library.properties └── src ├── i2c_adc_ads7828.cpp └── i2c_adc_ads7828.h /.gitignore: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------- i2c_adc_ads7828 2 | doc/html/ 3 | doc/latex/ 4 | 5 | 6 | #-------------- https://github.com/github/gitignore/blob/master/Ruby.gitignore 7 | *.gem 8 | *.rbc 9 | /.config 10 | /coverage/ 11 | /InstalledFiles 12 | /pkg/ 13 | /spec/reports/ 14 | /spec/examples.txt 15 | /test/tmp/ 16 | /test/version_tmp/ 17 | /tmp/ 18 | 19 | # Used by dotenv library to load environment variables. 20 | # .env 21 | 22 | ## Specific to RubyMotion: 23 | .dat* 24 | .repl_history 25 | build/ 26 | *.bridgesupport 27 | build-iPhoneOS/ 28 | build-iPhoneSimulator/ 29 | 30 | ## Specific to RubyMotion (use of CocoaPods): 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | # vendor/Pods/ 37 | 38 | ## Documentation cache and generated files: 39 | /.yardoc/ 40 | /_yardoc/ 41 | # /doc/ 42 | /rdoc/ 43 | 44 | ## Environment normalization: 45 | /.bundle/ 46 | /vendor/bundle 47 | /lib/bundler/man/ 48 | 49 | # for a library or gem, you might want to ignore these files since the code is 50 | # intended to run in multiple environments; otherwise, check them in: 51 | # Gemfile.lock 52 | # .ruby-version 53 | # .ruby-gemset 54 | 55 | # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: 56 | .rvmrc 57 | -------------------------------------------------------------------------------- /.ruby-gemset: -------------------------------------------------------------------------------- 1 | global 2 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.3.1 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | python: 4 | - 2.7 5 | 6 | sudo: false 7 | 8 | cache: 9 | directories: 10 | - ~/.platformio 11 | 12 | # update Makefile if target boards added 13 | env: 14 | - PLATFORMIO_BOARD=uno 15 | - PLATFORMIO_BOARD=due 16 | - PLATFORMIO_BOARD=huzzah 17 | - PLATFORMIO_BOARD=genuino101 18 | - PLATFORMIO_BOARD=teensy31 19 | 20 | install: 21 | - pip install -U platformio 22 | 23 | before_script: 24 | - env 25 | - echo $HOME 26 | - echo $TRAVIS_BUILD_DIR 27 | - ls -al $PWD 28 | 29 | script: 30 | - make build 31 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # i2c_adc_ads7828 CHANGELOG 2 | 3 | ## [v2.0.2](https://github.com/4-20ma/i2c_adc_ads7828/tree/v2.0.2) (2016-09-27) 4 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v2.0.1...v2.0.2) 5 | 6 | OTHER 7 | 8 | - Fix Rakefile whitespace, update CHANGELOG date [\#24](https://github.com/4-20ma/i2c_adc_ads7828/pull/24) ([4-20ma](https://github.com/4-20ma)) 9 | 10 | ## [v2.0.1](https://github.com/4-20ma/i2c_adc_ads7828/tree/v2.0.1) (2016-09-27) 11 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v2.0.0...v2.0.1) 12 | 13 | BUG FIXES 14 | 15 | - Fix Rakefile git remote/branch [\#22](https://github.com/4-20ma/i2c_adc_ads7828/pull/22) ([4-20ma](https://github.com/4-20ma)) 16 | 17 | ## [v2.0.0](https://github.com/4-20ma/i2c_adc_ads7828/tree/v2.0.0) (2016-09-27) 18 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.5...v2.0.0) 19 | 20 | IMPROVEMENTS 21 | 22 | - Add Code of Conduct [\#16](https://github.com/4-20ma/i2c_adc_ads7828/pull/16) ([4-20ma](https://github.com/4-20ma)) 23 | - \[BREAK\] Change project license to Apache 2.0 [\#8](https://github.com/4-20ma/i2c_adc_ads7828/pull/8) ([4-20ma](https://github.com/4-20ma)) 24 | - Automate CHANGELOG [\#6](https://github.com/4-20ma/i2c_adc_ads7828/pull/6) ([4-20ma](https://github.com/4-20ma)) 25 | - Add continuous integration testing via Travis CI [\#4](https://github.com/4-20ma/i2c_adc_ads7828/pull/4) ([4-20ma](https://github.com/4-20ma)) 26 | - \[BREAK\] Update to IDE 1.5 library format v2.1 [\#3](https://github.com/4-20ma/i2c_adc_ads7828/pull/3) ([4-20ma](https://github.com/4-20ma)) 27 | 28 | OTHER 29 | 30 | - Fix README link to examples folder [\#20](https://github.com/4-20ma/i2c_adc_ads7828/pull/20) ([4-20ma](https://github.com/4-20ma)) 31 | - Remove extraneous \#includes/whitespace [\#18](https://github.com/4-20ma/i2c_adc_ads7828/pull/18) ([4-20ma](https://github.com/4-20ma)) 32 | - Update README content, layout, extension [\#14](https://github.com/4-20ma/i2c_adc_ads7828/pull/14) ([4-20ma](https://github.com/4-20ma)) 33 | - Add standard files to .gitignore [\#12](https://github.com/4-20ma/i2c_adc_ads7828/pull/12) ([4-20ma](https://github.com/4-20ma)) 34 | - Rename .pde files .ino [\#10](https://github.com/4-20ma/i2c_adc_ads7828/pull/10) ([4-20ma](https://github.com/4-20ma)) 35 | 36 | ## [v1.1.5](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.5) (2012-12-29) 37 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.4...v1.1.5) 38 | 39 | ## [v1.1.4](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.4) (2012-12-29) 40 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.3...v1.1.4) 41 | 42 | ## [v1.1.3](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.3) (2012-12-29) 43 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.2...v1.1.3) 44 | 45 | ## [v1.1.2](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.2) (2012-12-29) 46 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.1...v1.1.2) 47 | 48 | ## [v1.1.1](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.1) (2012-12-29) 49 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.1.0...v1.1.1) 50 | 51 | ## [v1.1.0](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.1.0) (2012-12-29) 52 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.0.2...v1.1.0) 53 | 54 | ## [v1.0.2](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.0.2) (2012-01-08) 55 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.0.1...v1.0.2) 56 | 57 | ## [v1.0.1](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.0.1) (2012-01-07) 58 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v1.0...v1.0.1) 59 | 60 | ## [v1.0](https://github.com/4-20ma/i2c_adc_ads7828/tree/v1.0) (2012-01-07) 61 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.7...v1.0) 62 | 63 | ## [v0.7](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.7) (2011-12-27) 64 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.6...v0.7) 65 | 66 | ## [v0.6](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.6) (2011-12-27) 67 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.5...v0.6) 68 | 69 | ## [v0.5](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.5) (2011-12-27) 70 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.4...v0.5) 71 | 72 | ## [v0.4](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.4) (2010-02-10) 73 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.3...v0.4) 74 | 75 | ## [v0.3](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.3) (2010-02-07) 76 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.2...v0.3) 77 | 78 | ## [v0.2](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.2) (2010-02-07) 79 | [Full Changelog](https://github.com/4-20ma/i2c_adc_ads7828/compare/v0.1...v0.2) 80 | 81 | ## [v0.1](https://github.com/4-20ma/i2c_adc_ads7828/tree/v0.1) (2010-01-31) 82 | 83 | 84 | \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project owner at 4-20ma@wvfans.net. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Project Maintainers 69 | 70 | - Doc Walker <<4-20ma@wvfans.net>> 71 | 72 | ## Attribution 73 | 74 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 75 | available at [http://contributor-covenant.org/version/1/4][version] 76 | 77 | [homepage]: http://contributor-covenant.org 78 | [version]: http://contributor-covenant.org/version/1/4/ 79 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2009-2016 Doc Walker 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #-------------------------------------------------------------------- settings 2 | FIND := find 3 | DIR := $(PWD)/examples 4 | CRITERIA := \( -name "*.ino" -o -name "*.pde" \) 5 | EACH_EXAMPLE := $(FIND) $(DIR) $(CRITERIA) -exec 6 | BUILD := platformio ci 7 | LIB := src 8 | 9 | #--------------------------------------------------------------------- targets 10 | # update .travis.yml if target boards added 11 | all: uno due huzzah genuino101 teensy31 12 | 13 | uno due huzzah genuino101 teensy31: 14 | PLATFORMIO_BOARD=$@ $(MAKE) build 15 | 16 | build: 17 | $(EACH_EXAMPLE) $(BUILD) --board=$(PLATFORMIO_BOARD) --lib=$(LIB) {} \; 18 | 19 | .PHONY: all uno due huzzah genuino101 teensy31 build 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # i2c_adc_ads7828 2 | [![GitHub release](https://img.shields.io/github/release/4-20ma/i2c_adc_ads7828.svg?maxAge=3600)][GitHub release] 3 | [![Travis](https://img.shields.io/travis/4-20ma/i2c_adc_ads7828.svg?maxAge=3600)][Travis] 4 | [![license](https://img.shields.io/github/license/4-20ma/i2c_adc_ads7828.svg?maxAge=3600)][license] 5 | [![code of conduct](https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-blue.svg?maxAge=3600)][code of conduct] 6 | 7 | [GitHub release]: https://github.com/4-20ma/i2c_adc_ads7828 8 | [Travis]: https://travis-ci.org/4-20ma/i2c_adc_ads7828 9 | [license]: LICENSE 10 | [code of conduct]: CODE_OF_CONDUCT.md 11 | 12 | 13 | ## Overview 14 | This is an Arduino library for the Texas Instruments ADS7828 12-bit, 8-channel I2C A/D converter. 15 | 16 | 17 | ## Features 18 | The following features are available: 19 | 20 | - Up to (4) A/D converters can be used on the same I2C bus (hardware-addressable via pins A0, A1 and software-addressable via ID 0..3; address 0x48..0x4C) 21 | - A/D conversions may be initiated on a bus-, device-, or channel-specific level 22 | - Retrieve values as 16-period moving average or last sample 23 | - Built-in scaling function to return values in user-defined engineering units 24 | 25 | 26 | ## Installation 27 | 28 | #### Library Manager 29 | Install the library into your Arduino IDE using the Library Manager (available from IDE version 1.6.2). Open the IDE and click Sketch > Include Library > Manage Libraries… 30 | 31 | Scroll or search for `i2c_adc_ads7828`, then select the version of the library you want to install. Quit/re-launch the IDE to refresh the list; new versions are automatically added to the list, once released on GitHub. 32 | 33 | Refer to Arduino Tutorials > Libraries [Using the Library Manager](https://www.arduino.cc/en/Guide/Libraries#toc3). 34 | 35 | #### Zip Library 36 | Refer to Arduino Tutorials > Libraries [Importing a .zip Library](https://www.arduino.cc/en/Guide/Libraries#toc4). 37 | 38 | #### Manual 39 | Refer to Arduino Tutorials > Libraries [Manual Installation](https://www.arduino.cc/en/Guide/Libraries#toc5). 40 | 41 | 42 | ## Schematic 43 | This library has been tested with an Arduino [Duemilanove](http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove) and a Texas Instruments [ADS7828](http://focus.ti.com/docs/prod/folders/print/ads7828.html) A/D converter. 44 | 45 | Below is a simplified schematic diagram. Refer to the datasheet for specific requirements. 46 | 47 | ![Figure 1 - Schematic Diagram](SCHEMATIC.svg) 48 | 49 | ## Example 50 | The library contains sketches that demonstrates use of the `i2c_adc_ads7828` library. You can find these in the [examples](/examples/) folder. 51 | 52 | ``` cpp 53 | #include 54 | 55 | 56 | // device 0 57 | // Address: A1=0, A0=0 58 | // Command: SD=1, PD1=1, PD0=1 59 | ADS7828 device(0, SINGLE_ENDED | REFERENCE_ON | ADC_ON, 0x0F); 60 | ADS7828* adc = &device; 61 | ADS7828Channel* ambientTemp = adc->channel(0); 62 | ADS7828Channel* waterTemp = adc->channel(1); 63 | ADS7828Channel* filterPressure = adc->channel(2); 64 | ADS7828Channel* waterLevel = adc->channel(3); 65 | 66 | 67 | void setup() 68 | { 69 | // enable serial monitor 70 | Serial.begin(19200); 71 | 72 | // enable I2C communication 73 | ADS7828::begin(); 74 | 75 | // adjust scaling on an individual channel basis 76 | ambientTemp->minScale = 0; 77 | ambientTemp->maxScale = 150; 78 | 79 | waterTemp->minScale = 0; 80 | waterTemp->maxScale = 100; 81 | 82 | filterPressure->minScale = 0; 83 | filterPressure->maxScale = 30; 84 | 85 | waterLevel->minScale = 0; 86 | waterLevel->maxScale = 100; 87 | } 88 | 89 | 90 | void loop() 91 | { 92 | // update all registered ADS7828 devices/unmasked channels 93 | ADS7828::updateAll(); 94 | 95 | // output moving average values to console 96 | Serial.print("\n Ambient: "); 97 | Serial.print(ambientTemp->value(), DEC); 98 | Serial.print("\n Water temp: "); 99 | Serial.print(waterTemp->value(), DEC); 100 | Serial.print("\n Filter pressure: "); 101 | Serial.print(filterPressure->value(), DEC); 102 | Serial.print("\n Water level: "); 103 | Serial.print(waterLevel->value(), DEC); 104 | Serial.print("\n- - - - - - - - - - - - - - - - - - - - \n"); 105 | 106 | // delay 107 | delay(1000); 108 | } 109 | ``` 110 | 111 | 112 | ## Caveats 113 | Conforms to Arduino IDE 1.5 Library Specification v2.1 which requires Arduino IDE >= 1.5. 114 | 115 | 116 | ## Support 117 | Please [submit an issue](https://github.com/4-20ma/i2c_adc_ads7828/issues) for all questions, bug reports, and feature requests. Email requests will be politely redirected to the issue tracker so others may contribute to the discussion and requestors get a more timely response. 118 | 119 | 120 | ## License & Authors 121 | 122 | - Author:: Doc Walker ([4-20ma@wvfans.net](mailto:4-20ma@wvfans.net)) 123 | 124 | ``` 125 | Copyright:: 2009-2019 Doc Walker 126 | 127 | Licensed under the Apache License, Version 2.0 (the "License"); 128 | you may not use this file except in compliance with the License. 129 | You may obtain a copy of the License at 130 | 131 | http://www.apache.org/licenses/LICENSE-2.0 132 | 133 | Unless required by applicable law or agreed to in writing, software 134 | distributed under the License is distributed on an "AS IS" BASIS, 135 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136 | See the License for the specific language governing permissions and 137 | limitations under the License. 138 | ``` 139 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | # 3 | # Copyright:: 2009-2016 Doc Walker 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | require 'git' 19 | require 'github_changelog_generator/task' 20 | require 'rake' 21 | require 'rubygems' 22 | require 'rake/version_task' # gem install version 23 | require 'version' 24 | 25 | # requires additional packages on MacOS (including Homebrew): 26 | # $ /usr/bin/ruby -e "$(curl -fsSL \ 27 | # https://raw.githubusercontent.com/Homebrew/install/master/install)" 28 | # $ brew install doxygen # generates documentation from source code 29 | # $ brew cask install mactex # MacTeX 30 | 31 | Rake::VersionTask.new do |task| 32 | # prevent auto-commit on version bump 33 | task.with_git = false 34 | end 35 | 36 | # adjust as appropriate 37 | DOXYFILE = 'Doxyfile' 38 | GITHUB_USERNAME = '4-20ma' 39 | GITHUB_REPO = 'i2c_adc_ads7828' 40 | HEADER_FILE = "#{GITHUB_REPO}.h" 41 | CHANGELOG = 'CHANGELOG' 42 | CHANGELOG_FILE = "#{CHANGELOG}.md" 43 | PROPERTIES_FILE = 'library.properties' 44 | VERSION_FILE = Version.version_file('').basename.to_s 45 | 46 | 47 | task :default => :info 48 | 49 | desc 'Display instructions for public release' 50 | task :info do 51 | puts <<-EOF.gsub(/^\s{2}/, '') 52 | 53 | Instructions for public release 54 | 55 | - Update version, as appropriate: 56 | 57 | $ rake version:bump # or 58 | $ rake version:bump:minor # or 59 | $ rake version:bump:major # or 60 | edit 'VERSION' file directly 61 | 62 | - Prepare release date, '#{CHANGELOG_FILE}' file, documentation: 63 | 64 | $ rake prepare 65 | 66 | - Review changes to '#{CHANGELOG_FILE}' file 67 | This file is assembled using git commit messages; review for completeness. 68 | 69 | - Review html documentation files 70 | These files are assembled using source code Doxygen tags; review for 71 | for completeness. 72 | 73 | - Add & commit source files, tag, push to origin/master; 74 | add & commit documentation files, push to origin/gh-pages: 75 | 76 | $ rake release 77 | 78 | EOF 79 | end # task :info 80 | 81 | 82 | desc "Prepare #{CHANGELOG_FILE} for release" 83 | task :prepare => 'prepare:default' 84 | 85 | namespace :prepare do 86 | task :default => %w(release_date library_properties changelog documentation) 87 | 88 | desc 'Prepare documentation' 89 | task :documentation => :first_time do 90 | version = Version.current.to_s 91 | 92 | # update parameters in Doxyfile 93 | cwd = File.expand_path(__dir__) 94 | file = File.join(cwd, 'doc', DOXYFILE) 95 | 96 | contents = IO.read(file) 97 | contents.sub!(/(^PROJECT_NUMBER\s*=)(.*)$/) do |match| 98 | "#{$1} v#{version}" 99 | end # contents.sub!(...) 100 | IO.write(file, contents) 101 | 102 | # chdir to doc/ and call doxygen to update documentation 103 | Dir.chdir(to = File.join(cwd, 'doc')) 104 | system('doxygen', DOXYFILE) 105 | 106 | # chdir to doc/latex and call doxygen to update documentation 107 | Dir.chdir(from = File.join(cwd, 'doc', 'latex')) 108 | system('make') 109 | 110 | # move/rename file to 'extras/GITHUB_REPO reference-x.y.pdf' 111 | to = File.join(cwd, 'extras') 112 | FileUtils.mv(File.join(from, 'refman.pdf'), 113 | File.join(to, "#{GITHUB_REPO} reference-#{version}.pdf")) 114 | end # task :documentation 115 | 116 | # desc 'Prepare doc/html directory (first-time only)' 117 | task :first_time do 118 | cwd = File.expand_path(File.join(__dir__, 'doc', 'html')) 119 | FileUtils.mkdir_p(cwd) 120 | Dir.chdir(cwd) 121 | 122 | # skip if this operation has already been completed 123 | next if 'refs/heads/gh-pages' == `git config branch.gh-pages.merge`.chomp 124 | 125 | # configure git remote/branch options 126 | origin = "https://github.com/#{GITHUB_USERNAME}/#{GITHUB_REPO}" 127 | `git init` 128 | `git remote add origin #{origin}` 129 | `git checkout --orphan gh-pages` 130 | `git config --replace-all branch.gh-pages.remote origin` 131 | `git config --replace-all branch.gh-pages.merge refs/heads/gh-pages` 132 | `touch index.html` 133 | `git add .` 134 | `git commit -a -m 'Initial commit'` 135 | end 136 | 137 | desc 'Prepare release history' 138 | GitHubChangelogGenerator::RakeTask.new(:changelog) do |config| 139 | config.add_issues_wo_labels = false 140 | config.add_pr_wo_labels = false 141 | config.enhancement_labels = [ 142 | 'Type: Enhancement', 143 | 'Type: Feature Request' 144 | ] 145 | config.enhancement_prefix = 'IMPROVEMENTS' 146 | config.bug_labels = ['Type: Bug'] 147 | config.bug_prefix = 'BUG FIXES' 148 | config.future_release = "v#{Version.current.to_s}" 149 | config.header = "# #{GITHUB_REPO} #{CHANGELOG}" 150 | config.include_labels = [CHANGELOG] 151 | config.merge_prefix = 'OTHER' # e.g. 'Type: Maintenance' 152 | config.project = GITHUB_REPO 153 | config.user = GITHUB_USERNAME 154 | end # GitHubChangelogGenerator::RakeTask.new 155 | 156 | desc 'Update version in library properties file' 157 | task :library_properties do 158 | version = Version.current.to_s 159 | 160 | cwd = File.expand_path(__dir__) 161 | file = File.join(cwd, PROPERTIES_FILE) 162 | 163 | contents = IO.read(file) 164 | contents.sub!(/(version=\s*)(.*)$/) do |match| 165 | "#{$1}#{version}" 166 | end # contents.sub!(...) 167 | IO.write(file, contents) 168 | end # task :library_properties 169 | 170 | desc 'Update release date in header file' 171 | task :release_date do 172 | cwd = File.expand_path(__dir__) 173 | file = File.join(cwd, 'src', HEADER_FILE) 174 | 175 | contents = IO.read(file) 176 | contents.sub!(/(\\date\s*)(.*)$/) do |match| 177 | "#{$1}#{Time.now.strftime('%-d %b %Y')}" 178 | end # contents.sub!(...) 179 | IO.write(file, contents) 180 | end # task :release_date 181 | 182 | end # namespace :prepare 183 | 184 | 185 | desc 'Release source & documentation' 186 | task :release => 'release:default' 187 | 188 | namespace :release do 189 | task :default => %w(source documentation) 190 | 191 | desc 'Commit documentation changes related to version bump' 192 | task :documentation do 193 | version = Version.current.to_s 194 | cwd = File.expand_path(File.join(__dir__, 'doc', 'html')) 195 | g = Git.open(cwd) 196 | 197 | # `git add .` 198 | g.add 199 | 200 | # remove each deleted item 201 | g.status.deleted.each do |item| 202 | g.remove(item[0]) 203 | end # g.status.deleted.each 204 | 205 | # commit changes if items added, changed, or deleted 206 | if g.status.added.size > 0 || g.status.changed.size > 0 || 207 | g.status.deleted.size > 0 then 208 | message = "Update documentation for v#{version}" 209 | puts g.commit(message) 210 | else 211 | puts "No changes to commit v#{version}" 212 | end # if g.status.added.size > 0 || g.status.changed.size > 0... 213 | 214 | g.push('origin', 'gh-pages') 215 | end # task :documentation 216 | 217 | desc 'Commit source changes related to version bump' 218 | task :source do 219 | version = Version.current.to_s 220 | `git add \ 221 | doc/#{DOXYFILE} \ 222 | "extras/#{GITHUB_REPO} reference-#{version}.pdf" \ 223 | src/#{HEADER_FILE} \ 224 | #{CHANGELOG_FILE} \ 225 | #{PROPERTIES_FILE} \ 226 | #{VERSION_FILE} \ 227 | ` 228 | `git commit -m 'Version bump to v#{version}'` 229 | `git tag -a -f -m 'Version v#{version}' v#{version}` 230 | `git push origin master` 231 | `git push --tags` 232 | end # task :source 233 | 234 | end # namespace :release 235 | -------------------------------------------------------------------------------- /SCHEMATIC.md: -------------------------------------------------------------------------------- 1 | ``` 2 | Arduino 3 | ┌────────────────────┐ 4 | │Duemilanove │ 5 | │ │ 6 | TI ADS7828 ┌───────○│5V │ 7 | ┌──────────────┐ │ │ │ 8 | ─○│1 CH0 VDD 16│○──┘ ┌───○│GND │ 9 | │ │ │ │ │ 10 | ─○│2 CH1 SDA 15│○──────│───○│A4 SDA │ 11 | │ │ │ │ │ 12 | ─○│3 CH2 SCL 14│○──────│───○│A5 SCL │ 13 | │ │ │ └────────────────────┘ 14 | ─○│4 CH3 A1 13│○──────● 15 | │ │ │ 16 | ─○│5 CH4 A0 12│○──────● 17 | │ │ │ 18 | ─○│6 CH5 COM 11│○─ │ 19 | │ │ │ 20 | ─○│7 CH6 REF 10│○─ │ 21 | │ │ │ 22 | ─○│8 CH7 GND 9│○──────● 23 | └──────────────┘ │ 24 | ═══ 25 | GND 26 | 27 | Created with Monodraw 28 | ``` 29 | -------------------------------------------------------------------------------- /SCHEMATIC.monopic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4-20ma/i2c_adc_ads7828/4bc11a0f7f70fed108e1258288e034e936c6e9ec/SCHEMATIC.monopic -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 2.0.2 2 | -------------------------------------------------------------------------------- /doc/Doxyfile: -------------------------------------------------------------------------------- 1 | # Doxyfile 1.8.2 2 | 3 | # This file describes the settings to be used by the documentation system 4 | # doxygen (www.doxygen.org) for a project. 5 | # 6 | # All text after a hash (#) is considered a comment and will be ignored. 7 | # The format is: 8 | # TAG = value [value, ...] 9 | # For lists items can also be appended using: 10 | # TAG += value [value, ...] 11 | # Values that contain spaces should be placed between quotes (" "). 12 | 13 | #--------------------------------------------------------------------------- 14 | # Project related configuration options 15 | #--------------------------------------------------------------------------- 16 | 17 | # This tag specifies the encoding used for all characters in the config file 18 | # that follow. The default is UTF-8 which is also the encoding used for all 19 | # text before the first occurrence of this tag. Doxygen uses libiconv (or the 20 | # iconv built into libc) for the transcoding. See 21 | # http://www.gnu.org/software/libiconv for the list of possible encodings. 22 | 23 | DOXYFILE_ENCODING = UTF-8 24 | 25 | # The PROJECT_NAME tag is a single word (or sequence of words) that should 26 | # identify the project. Note that if you do not use Doxywizard you need 27 | # to put quotes around the project name if it contains spaces. 28 | 29 | PROJECT_NAME = i2c_adc_ads7828 30 | 31 | # The PROJECT_NUMBER tag can be used to enter a project or revision number. 32 | # This could be handy for archiving the generated documentation or 33 | # if some version control system is used. 34 | 35 | PROJECT_NUMBER = v2.0.2 36 | 37 | # Using the PROJECT_BRIEF tag one can provide an optional one line description 38 | # for a project that appears at the top of each page and should give viewer 39 | # a quick idea about the purpose of the project. Keep the description short. 40 | 41 | PROJECT_BRIEF = "Arduino library for TI ADS7828 I2C A/D converter." 42 | 43 | # With the PROJECT_LOGO tag one can specify an logo or icon that is 44 | # included in the documentation. The maximum height of the logo should not 45 | # exceed 55 pixels and the maximum width should not exceed 200 pixels. 46 | # Doxygen will copy the logo to the output directory. 47 | 48 | PROJECT_LOGO = 49 | 50 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 51 | # base path where the generated documentation will be put. 52 | # If a relative path is entered, it will be relative to the location 53 | # where doxygen was started. If left blank the current directory will be used. 54 | 55 | OUTPUT_DIRECTORY = . 56 | 57 | # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 58 | # 4096 sub-directories (in 2 levels) under the output directory of each output 59 | # format and will distribute the generated files over these directories. 60 | # Enabling this option can be useful when feeding doxygen a huge amount of 61 | # source files, where putting all generated files in the same directory would 62 | # otherwise cause performance problems for the file system. 63 | 64 | CREATE_SUBDIRS = NO 65 | 66 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all 67 | # documentation generated by doxygen is written. Doxygen will use this 68 | # information to generate all constant output in the proper language. 69 | # The default language is English, other supported languages are: 70 | # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 71 | # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 72 | # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 73 | # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 74 | # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 75 | # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. 76 | 77 | OUTPUT_LANGUAGE = English 78 | 79 | # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 80 | # include brief member descriptions after the members that are listed in 81 | # the file and class documentation (similar to JavaDoc). 82 | # Set to NO to disable this. 83 | 84 | BRIEF_MEMBER_DESC = YES 85 | 86 | # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 87 | # the brief description of a member or function before the detailed description. 88 | # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 89 | # brief descriptions will be completely suppressed. 90 | 91 | REPEAT_BRIEF = YES 92 | 93 | # This tag implements a quasi-intelligent brief description abbreviator 94 | # that is used to form the text in various listings. Each string 95 | # in this list, if found as the leading text of the brief description, will be 96 | # stripped from the text and the result after processing the whole list, is 97 | # used as the annotated text. Otherwise, the brief description is used as-is. 98 | # If left blank, the following values are used ("$name" is automatically 99 | # replaced with the name of the entity): "The $name class" "The $name widget" 100 | # "The $name file" "is" "provides" "specifies" "contains" 101 | # "represents" "a" "an" "the" 102 | 103 | ABBREVIATE_BRIEF = "The $name class" \ 104 | "The $name widget" \ 105 | "The $name file" \ 106 | is \ 107 | provides \ 108 | specifies \ 109 | contains \ 110 | represents \ 111 | a \ 112 | an \ 113 | the 114 | 115 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 116 | # Doxygen will generate a detailed section even if there is only a brief 117 | # description. 118 | 119 | ALWAYS_DETAILED_SEC = NO 120 | 121 | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 122 | # inherited members of a class in the documentation of that class as if those 123 | # members were ordinary class members. Constructors, destructors and assignment 124 | # operators of the base classes will not be shown. 125 | 126 | INLINE_INHERITED_MEMB = NO 127 | 128 | # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 129 | # path before files name in the file list and in the header files. If set 130 | # to NO the shortest path that makes the file name unique will be used. 131 | 132 | FULL_PATH_NAMES = NO 133 | 134 | # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 135 | # can be used to strip a user-defined part of the path. Stripping is 136 | # only done if one of the specified strings matches the left-hand part of 137 | # the path. The tag can be used to show relative paths in the file list. 138 | # If left blank the directory from which doxygen is run is used as the 139 | # path to strip. Note that you specify absolute paths here, but also 140 | # relative paths, which will be relative from the directory where doxygen is 141 | # started. 142 | 143 | STRIP_FROM_PATH = 144 | 145 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 146 | # the path mentioned in the documentation of a class, which tells 147 | # the reader which header file to include in order to use a class. 148 | # If left blank only the name of the header file containing the class 149 | # definition is used. Otherwise one should specify the include paths that 150 | # are normally passed to the compiler using the -I flag. 151 | 152 | STRIP_FROM_INC_PATH = 153 | 154 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 155 | # (but less readable) file names. This can be useful if your file system 156 | # doesn't support long names like on DOS, Mac, or CD-ROM. 157 | 158 | SHORT_NAMES = NO 159 | 160 | # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 161 | # will interpret the first line (until the first dot) of a JavaDoc-style 162 | # comment as the brief description. If set to NO, the JavaDoc 163 | # comments will behave just like regular Qt-style comments 164 | # (thus requiring an explicit @brief command for a brief description.) 165 | 166 | JAVADOC_AUTOBRIEF = YES 167 | 168 | # If the QT_AUTOBRIEF tag is set to YES then Doxygen will 169 | # interpret the first line (until the first dot) of a Qt-style 170 | # comment as the brief description. If set to NO, the comments 171 | # will behave just like regular Qt-style comments (thus requiring 172 | # an explicit \brief command for a brief description.) 173 | 174 | QT_AUTOBRIEF = NO 175 | 176 | # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 177 | # treat a multi-line C++ special comment block (i.e. a block of //! or /// 178 | # comments) as a brief description. This used to be the default behaviour. 179 | # The new default is to treat a multi-line C++ comment block as a detailed 180 | # description. Set this tag to YES if you prefer the old behaviour instead. 181 | 182 | MULTILINE_CPP_IS_BRIEF = NO 183 | 184 | # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 185 | # member inherits the documentation from any documented member that it 186 | # re-implements. 187 | 188 | INHERIT_DOCS = YES 189 | 190 | # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 191 | # a new page for each member. If set to NO, the documentation of a member will 192 | # be part of the file/class/namespace that contains it. 193 | 194 | SEPARATE_MEMBER_PAGES = NO 195 | 196 | # The TAB_SIZE tag can be used to set the number of spaces in a tab. 197 | # Doxygen uses this value to replace tabs by spaces in code fragments. 198 | 199 | TAB_SIZE = 2 200 | 201 | # This tag can be used to specify a number of aliases that acts 202 | # as commands in the documentation. An alias has the form "name=value". 203 | # For example adding "sideeffect=\par Side Effects:\n" will allow you to 204 | # put the command \sideeffect (or @sideeffect) in the documentation, which 205 | # will result in a user-defined paragraph with heading "Side Effects:". 206 | # You can put \n's in the value part of an alias to insert newlines. 207 | 208 | ALIASES = "required=\xrefitem required \"Required Function\" \"Required Functions List\"" \ 209 | "optional=\xrefitem optional \"Optional Function (Troubleshooting)\" \"Optional Functions List (Troubleshooting)\"" 210 | 211 | # This tag can be used to specify a number of word-keyword mappings (TCL only). 212 | # A mapping has the form "name=value". For example adding 213 | # "class=itcl::class" will allow you to use the command class in the 214 | # itcl::class meaning. 215 | 216 | TCL_SUBST = 217 | 218 | # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 219 | # sources only. Doxygen will then generate output that is more tailored for C. 220 | # For instance, some of the names that are used will be different. The list 221 | # of all members will be omitted, etc. 222 | 223 | OPTIMIZE_OUTPUT_FOR_C = NO 224 | 225 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 226 | # sources only. Doxygen will then generate output that is more tailored for 227 | # Java. For instance, namespaces will be presented as packages, qualified 228 | # scopes will look different, etc. 229 | 230 | OPTIMIZE_OUTPUT_JAVA = NO 231 | 232 | # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 233 | # sources only. Doxygen will then generate output that is more tailored for 234 | # Fortran. 235 | 236 | OPTIMIZE_FOR_FORTRAN = NO 237 | 238 | # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 239 | # sources. Doxygen will then generate output that is tailored for 240 | # VHDL. 241 | 242 | OPTIMIZE_OUTPUT_VHDL = NO 243 | 244 | # Doxygen selects the parser to use depending on the extension of the files it 245 | # parses. With this tag you can assign which parser to use for a given 246 | # extension. Doxygen has a built-in mapping, but you can override or extend it 247 | # using this tag. The format is ext=language, where ext is a file extension, 248 | # and language is one of the parsers supported by doxygen: IDL, Java, 249 | # Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, 250 | # C++. For instance to make doxygen treat .inc files as Fortran files (default 251 | # is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note 252 | # that for custom extensions you also need to set FILE_PATTERNS otherwise the 253 | # files are not read by doxygen. 254 | 255 | EXTENSION_MAPPING = pde=C \ 256 | ino=C 257 | 258 | # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all 259 | # comments according to the Markdown format, which allows for more readable 260 | # documentation. See http://daringfireball.net/projects/markdown/ for details. 261 | # The output of markdown processing is further processed by doxygen, so you 262 | # can mix doxygen, HTML, and XML commands with Markdown formatting. 263 | # Disable only in case of backward compatibilities issues. 264 | 265 | MARKDOWN_SUPPORT = YES 266 | 267 | # When enabled doxygen tries to link words that correspond to documented classes, 268 | # or namespaces to their corresponding documentation. Such a link can be 269 | # prevented in individual cases by by putting a % sign in front of the word or 270 | # globally by setting AUTOLINK_SUPPORT to NO. 271 | 272 | AUTOLINK_SUPPORT = YES 273 | 274 | # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 275 | # to include (a tag file for) the STL sources as input, then you should 276 | # set this tag to YES in order to let doxygen match functions declarations and 277 | # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 278 | # func(std::string) {}). This also makes the inheritance and collaboration 279 | # diagrams that involve STL classes more complete and accurate. 280 | 281 | BUILTIN_STL_SUPPORT = NO 282 | 283 | # If you use Microsoft's C++/CLI language, you should set this option to YES to 284 | # enable parsing support. 285 | 286 | CPP_CLI_SUPPORT = NO 287 | 288 | # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 289 | # Doxygen will parse them like normal C++ but will assume all classes use public 290 | # instead of private inheritance when no explicit protection keyword is present. 291 | 292 | SIP_SUPPORT = NO 293 | 294 | # For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO. 295 | 296 | IDL_PROPERTY_SUPPORT = YES 297 | 298 | # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 299 | # tag is set to YES, then doxygen will reuse the documentation of the first 300 | # member in the group (if any) for the other members of the group. By default 301 | # all members of a group must be documented explicitly. 302 | 303 | DISTRIBUTE_GROUP_DOC = NO 304 | 305 | # Set the SUBGROUPING tag to YES (the default) to allow class member groups of 306 | # the same type (for instance a group of public functions) to be put as a 307 | # subgroup of that type (e.g. under the Public Functions section). Set it to 308 | # NO to prevent subgrouping. Alternatively, this can be done per class using 309 | # the \nosubgrouping command. 310 | 311 | SUBGROUPING = YES 312 | 313 | # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 314 | # unions are shown inside the group in which they are included (e.g. using 315 | # @ingroup) instead of on a separate page (for HTML and Man pages) or 316 | # section (for LaTeX and RTF). 317 | 318 | INLINE_GROUPED_CLASSES = NO 319 | 320 | # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 321 | # unions with only public data fields will be shown inline in the documentation 322 | # of the scope in which they are defined (i.e. file, namespace, or group 323 | # documentation), provided this scope is documented. If set to NO (the default), 324 | # structs, classes, and unions are shown on a separate page (for HTML and Man 325 | # pages) or section (for LaTeX and RTF). 326 | 327 | INLINE_SIMPLE_STRUCTS = NO 328 | 329 | # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 330 | # is documented as struct, union, or enum with the name of the typedef. So 331 | # typedef struct TypeS {} TypeT, will appear in the documentation as a struct 332 | # with name TypeT. When disabled the typedef will appear as a member of a file, 333 | # namespace, or class. And the struct will be named TypeS. This can typically 334 | # be useful for C code in case the coding convention dictates that all compound 335 | # types are typedef'ed and only the typedef is referenced, never the tag name. 336 | 337 | TYPEDEF_HIDES_STRUCT = NO 338 | 339 | # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 340 | # determine which symbols to keep in memory and which to flush to disk. 341 | # When the cache is full, less often used symbols will be written to disk. 342 | # For small to medium size projects (<1000 input files) the default value is 343 | # probably good enough. For larger projects a too small cache size can cause 344 | # doxygen to be busy swapping symbols to and from disk most of the time 345 | # causing a significant performance penalty. 346 | # If the system has enough physical memory increasing the cache will improve the 347 | # performance by keeping more symbols in memory. Note that the value works on 348 | # a logarithmic scale so increasing the size by one will roughly double the 349 | # memory usage. The cache size is given by this formula: 350 | # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 351 | # corresponding to a cache size of 2^16 = 65536 symbols. 352 | 353 | SYMBOL_CACHE_SIZE = 0 354 | 355 | # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 356 | # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 357 | # their name and scope. Since this can be an expensive process and often the 358 | # same symbol appear multiple times in the code, doxygen keeps a cache of 359 | # pre-resolved symbols. If the cache is too small doxygen will become slower. 360 | # If the cache is too large, memory is wasted. The cache size is given by this 361 | # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, 362 | # corresponding to a cache size of 2^16 = 65536 symbols. 363 | 364 | LOOKUP_CACHE_SIZE = 0 365 | 366 | #--------------------------------------------------------------------------- 367 | # Build related configuration options 368 | #--------------------------------------------------------------------------- 369 | 370 | # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 371 | # documentation are documented, even if no documentation was available. 372 | # Private class members and static file members will be hidden unless 373 | # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 374 | 375 | EXTRACT_ALL = NO 376 | 377 | # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 378 | # will be included in the documentation. 379 | 380 | EXTRACT_PRIVATE = YES 381 | 382 | # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal 383 | # scope will be included in the documentation. 384 | 385 | EXTRACT_PACKAGE = NO 386 | 387 | # If the EXTRACT_STATIC tag is set to YES all static members of a file 388 | # will be included in the documentation. 389 | 390 | EXTRACT_STATIC = NO 391 | 392 | # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 393 | # defined locally in source files will be included in the documentation. 394 | # If set to NO only classes defined in header files are included. 395 | 396 | EXTRACT_LOCAL_CLASSES = YES 397 | 398 | # This flag is only useful for Objective-C code. When set to YES local 399 | # methods, which are defined in the implementation section but not in 400 | # the interface are included in the documentation. 401 | # If set to NO (the default) only methods in the interface are included. 402 | 403 | EXTRACT_LOCAL_METHODS = NO 404 | 405 | # If this flag is set to YES, the members of anonymous namespaces will be 406 | # extracted and appear in the documentation as a namespace called 407 | # 'anonymous_namespace{file}', where file will be replaced with the base 408 | # name of the file that contains the anonymous namespace. By default 409 | # anonymous namespaces are hidden. 410 | 411 | EXTRACT_ANON_NSPACES = NO 412 | 413 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 414 | # undocumented members of documented classes, files or namespaces. 415 | # If set to NO (the default) these members will be included in the 416 | # various overviews, but no documentation section is generated. 417 | # This option has no effect if EXTRACT_ALL is enabled. 418 | 419 | HIDE_UNDOC_MEMBERS = NO 420 | 421 | # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 422 | # undocumented classes that are normally visible in the class hierarchy. 423 | # If set to NO (the default) these classes will be included in the various 424 | # overviews. This option has no effect if EXTRACT_ALL is enabled. 425 | 426 | HIDE_UNDOC_CLASSES = NO 427 | 428 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 429 | # friend (class|struct|union) declarations. 430 | # If set to NO (the default) these declarations will be included in the 431 | # documentation. 432 | 433 | HIDE_FRIEND_COMPOUNDS = NO 434 | 435 | # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 436 | # documentation blocks found inside the body of a function. 437 | # If set to NO (the default) these blocks will be appended to the 438 | # function's detailed documentation block. 439 | 440 | HIDE_IN_BODY_DOCS = NO 441 | 442 | # The INTERNAL_DOCS tag determines if documentation 443 | # that is typed after a \internal command is included. If the tag is set 444 | # to NO (the default) then the documentation will be excluded. 445 | # Set it to YES to include the internal documentation. 446 | 447 | INTERNAL_DOCS = NO 448 | 449 | # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 450 | # file names in lower-case letters. If set to YES upper-case letters are also 451 | # allowed. This is useful if you have classes or files whose names only differ 452 | # in case and if your file system supports case sensitive file names. Windows 453 | # and Mac users are advised to set this option to NO. 454 | 455 | CASE_SENSE_NAMES = NO 456 | 457 | # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 458 | # will show members with their full class and namespace scopes in the 459 | # documentation. If set to YES the scope will be hidden. 460 | 461 | HIDE_SCOPE_NAMES = NO 462 | 463 | # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 464 | # will put a list of the files that are included by a file in the documentation 465 | # of that file. 466 | 467 | SHOW_INCLUDE_FILES = YES 468 | 469 | # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 470 | # will list include files with double quotes in the documentation 471 | # rather than with sharp brackets. 472 | 473 | FORCE_LOCAL_INCLUDES = NO 474 | 475 | # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 476 | # is inserted in the documentation for inline members. 477 | 478 | INLINE_INFO = YES 479 | 480 | # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 481 | # will sort the (detailed) documentation of file and class members 482 | # alphabetically by member name. If set to NO the members will appear in 483 | # declaration order. 484 | 485 | SORT_MEMBER_DOCS = NO 486 | 487 | # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 488 | # brief documentation of file, namespace and class members alphabetically 489 | # by member name. If set to NO (the default) the members will appear in 490 | # declaration order. 491 | 492 | SORT_BRIEF_DOCS = NO 493 | 494 | # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 495 | # will sort the (brief and detailed) documentation of class members so that 496 | # constructors and destructors are listed first. If set to NO (the default) 497 | # the constructors will appear in the respective orders defined by 498 | # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 499 | # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 500 | # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. 501 | 502 | SORT_MEMBERS_CTORS_1ST = NO 503 | 504 | # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 505 | # hierarchy of group names into alphabetical order. If set to NO (the default) 506 | # the group names will appear in their defined order. 507 | 508 | SORT_GROUP_NAMES = NO 509 | 510 | # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 511 | # sorted by fully-qualified names, including namespaces. If set to 512 | # NO (the default), the class list will be sorted only by class name, 513 | # not including the namespace part. 514 | # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 515 | # Note: This option applies only to the class list, not to the 516 | # alphabetical list. 517 | 518 | SORT_BY_SCOPE_NAME = NO 519 | 520 | # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 521 | # do proper type resolution of all parameters of a function it will reject a 522 | # match between the prototype and the implementation of a member function even 523 | # if there is only one candidate or it is obvious which candidate to choose 524 | # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 525 | # will still accept a match between prototype and implementation in such cases. 526 | 527 | STRICT_PROTO_MATCHING = NO 528 | 529 | # The GENERATE_TODOLIST tag can be used to enable (YES) or 530 | # disable (NO) the todo list. This list is created by putting \todo 531 | # commands in the documentation. 532 | 533 | GENERATE_TODOLIST = YES 534 | 535 | # The GENERATE_TESTLIST tag can be used to enable (YES) or 536 | # disable (NO) the test list. This list is created by putting \test 537 | # commands in the documentation. 538 | 539 | GENERATE_TESTLIST = YES 540 | 541 | # The GENERATE_BUGLIST tag can be used to enable (YES) or 542 | # disable (NO) the bug list. This list is created by putting \bug 543 | # commands in the documentation. 544 | 545 | GENERATE_BUGLIST = YES 546 | 547 | # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 548 | # disable (NO) the deprecated list. This list is created by putting 549 | # \deprecated commands in the documentation. 550 | 551 | GENERATE_DEPRECATEDLIST= YES 552 | 553 | # The ENABLED_SECTIONS tag can be used to enable conditional 554 | # documentation sections, marked by \if sectionname ... \endif. 555 | 556 | ENABLED_SECTIONS = 557 | 558 | # The MAX_INITIALIZER_LINES tag determines the maximum number of lines 559 | # the initial value of a variable or macro consists of for it to appear in 560 | # the documentation. If the initializer consists of more lines than specified 561 | # here it will be hidden. Use a value of 0 to hide initializers completely. 562 | # The appearance of the initializer of individual variables and macros in the 563 | # documentation can be controlled using \showinitializer or \hideinitializer 564 | # command in the documentation regardless of this setting. 565 | 566 | MAX_INITIALIZER_LINES = 30 567 | 568 | # Set the SHOW_USED_FILES tag to NO to disable the list of files generated 569 | # at the bottom of the documentation of classes and structs. If set to YES the 570 | # list will mention the files that were used to generate the documentation. 571 | 572 | SHOW_USED_FILES = YES 573 | 574 | # Set the SHOW_FILES tag to NO to disable the generation of the Files page. 575 | # This will remove the Files entry from the Quick Index and from the 576 | # Folder Tree View (if specified). The default is YES. 577 | 578 | SHOW_FILES = NO 579 | 580 | # Set the SHOW_NAMESPACES tag to NO to disable the generation of the 581 | # Namespaces page. 582 | # This will remove the Namespaces entry from the Quick Index 583 | # and from the Folder Tree View (if specified). The default is YES. 584 | 585 | SHOW_NAMESPACES = YES 586 | 587 | # The FILE_VERSION_FILTER tag can be used to specify a program or script that 588 | # doxygen should invoke to get the current version for each file (typically from 589 | # the version control system). Doxygen will invoke the program by executing (via 590 | # popen()) the command , where is the value of 591 | # the FILE_VERSION_FILTER tag, and is the name of an input file 592 | # provided by doxygen. Whatever the program writes to standard output 593 | # is used as the file version. See the manual for examples. 594 | 595 | FILE_VERSION_FILTER = 596 | 597 | # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 598 | # by doxygen. The layout file controls the global structure of the generated 599 | # output files in an output format independent way. To create the layout file 600 | # that represents doxygen's defaults, run doxygen with the -l option. 601 | # You can optionally specify a file name after the option, if omitted 602 | # DoxygenLayout.xml will be used as the name of the layout file. 603 | 604 | LAYOUT_FILE = 605 | 606 | # The CITE_BIB_FILES tag can be used to specify one or more bib files 607 | # containing the references data. This must be a list of .bib files. The 608 | # .bib extension is automatically appended if omitted. Using this command 609 | # requires the bibtex tool to be installed. See also 610 | # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 611 | # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this 612 | # feature you need bibtex and perl available in the search path. 613 | 614 | CITE_BIB_FILES = 615 | 616 | #--------------------------------------------------------------------------- 617 | # configuration options related to warning and progress messages 618 | #--------------------------------------------------------------------------- 619 | 620 | # The QUIET tag can be used to turn on/off the messages that are generated 621 | # by doxygen. Possible values are YES and NO. If left blank NO is used. 622 | 623 | QUIET = NO 624 | 625 | # The WARNINGS tag can be used to turn on/off the warning messages that are 626 | # generated by doxygen. Possible values are YES and NO. If left blank 627 | # NO is used. 628 | 629 | WARNINGS = YES 630 | 631 | # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 632 | # for undocumented members. If EXTRACT_ALL is set to YES then this flag will 633 | # automatically be disabled. 634 | 635 | WARN_IF_UNDOCUMENTED = YES 636 | 637 | # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 638 | # potential errors in the documentation, such as not documenting some 639 | # parameters in a documented function, or documenting parameters that 640 | # don't exist or using markup commands wrongly. 641 | 642 | WARN_IF_DOC_ERROR = YES 643 | 644 | # The WARN_NO_PARAMDOC option can be enabled to get warnings for 645 | # functions that are documented, but have no documentation for their parameters 646 | # or return value. If set to NO (the default) doxygen will only warn about 647 | # wrong or incomplete parameter documentation, but not about the absence of 648 | # documentation. 649 | 650 | WARN_NO_PARAMDOC = NO 651 | 652 | # The WARN_FORMAT tag determines the format of the warning messages that 653 | # doxygen can produce. The string should contain the $file, $line, and $text 654 | # tags, which will be replaced by the file and line number from which the 655 | # warning originated and the warning text. Optionally the format may contain 656 | # $version, which will be replaced by the version of the file (if it could 657 | # be obtained via FILE_VERSION_FILTER) 658 | 659 | WARN_FORMAT = "$file:$line: $text" 660 | 661 | # The WARN_LOGFILE tag can be used to specify a file to which warning 662 | # and error messages should be written. If left blank the output is written 663 | # to stderr. 664 | 665 | WARN_LOGFILE = 666 | 667 | #--------------------------------------------------------------------------- 668 | # configuration options related to the input files 669 | #--------------------------------------------------------------------------- 670 | 671 | # The INPUT tag can be used to specify the files and/or directories that contain 672 | # documented source files. You may enter file names like "myfile.cpp" or 673 | # directories like "/usr/src/myproject". Separate the files or directories 674 | # with spaces. 675 | 676 | INPUT = .. 677 | 678 | # This tag can be used to specify the character encoding of the source files 679 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 680 | # also the default input encoding. Doxygen uses libiconv (or the iconv built 681 | # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 682 | # the list of possible encodings. 683 | 684 | INPUT_ENCODING = UTF-8 685 | 686 | # If the value of the INPUT tag contains directories, you can use the 687 | # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 688 | # and *.h) to filter out the source-files in the directories. If left 689 | # blank the following patterns are tested: 690 | # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 691 | # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 692 | # *.f90 *.f *.for *.vhd *.vhdl 693 | 694 | FILE_PATTERNS = *.c \ 695 | *.cc \ 696 | *.cxx \ 697 | *.cpp \ 698 | *.c++ \ 699 | *.d \ 700 | *.java \ 701 | *.ii \ 702 | *.ixx \ 703 | *.ipp \ 704 | *.i++ \ 705 | *.inl \ 706 | *.h \ 707 | *.hh \ 708 | *.hxx \ 709 | *.hpp \ 710 | *.h++ \ 711 | *.idl \ 712 | *.ino \ 713 | *.odl \ 714 | *.cs \ 715 | *.pde \ 716 | *.php \ 717 | *.php3 \ 718 | *.inc \ 719 | *.m \ 720 | *.mm \ 721 | *.dox \ 722 | *.py \ 723 | *.f90 \ 724 | *.f \ 725 | *.vhd \ 726 | *.vhdl 727 | 728 | # The RECURSIVE tag can be used to turn specify whether or not subdirectories 729 | # should be searched for input files as well. Possible values are YES and NO. 730 | # If left blank NO is used. 731 | 732 | RECURSIVE = YES 733 | 734 | # The EXCLUDE tag can be used to specify files and/or directories that should be 735 | # excluded from the INPUT source files. This way you can easily exclude a 736 | # subdirectory from a directory tree whose root is specified with the INPUT tag. 737 | # Note that relative paths are relative to the directory from which doxygen is 738 | # run. 739 | 740 | EXCLUDE = 741 | 742 | # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 743 | # directories that are symbolic links (a Unix file system feature) are excluded 744 | # from the input. 745 | 746 | EXCLUDE_SYMLINKS = NO 747 | 748 | # If the value of the INPUT tag contains directories, you can use the 749 | # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 750 | # certain files from those directories. Note that the wildcards are matched 751 | # against the file with absolute path, so to exclude all test directories 752 | # for example use the pattern */test/* 753 | 754 | EXCLUDE_PATTERNS = 755 | 756 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 757 | # (namespaces, classes, functions, etc.) that should be excluded from the 758 | # output. The symbol name can be a fully qualified name, a word, or if the 759 | # wildcard * is used, a substring. Examples: ANamespace, AClass, 760 | # AClass::ANamespace, ANamespace::*Test 761 | 762 | EXCLUDE_SYMBOLS = 763 | 764 | # The EXAMPLE_PATH tag can be used to specify one or more files or 765 | # directories that contain example code fragments that are included (see 766 | # the \include command). 767 | 768 | EXAMPLE_PATH = .. 769 | 770 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the 771 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 772 | # and *.h) to filter out the source-files in the directories. If left 773 | # blank all files are included. 774 | 775 | EXAMPLE_PATTERNS = * 776 | 777 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 778 | # searched for input files to be used with the \include or \dontinclude 779 | # commands irrespective of the value of the RECURSIVE tag. 780 | # Possible values are YES and NO. If left blank NO is used. 781 | 782 | EXAMPLE_RECURSIVE = NO 783 | 784 | # The IMAGE_PATH tag can be used to specify one or more files or 785 | # directories that contain image that are included in the documentation (see 786 | # the \image command). 787 | 788 | IMAGE_PATH = 789 | 790 | # The INPUT_FILTER tag can be used to specify a program that doxygen should 791 | # invoke to filter for each input file. Doxygen will invoke the filter program 792 | # by executing (via popen()) the command , where 793 | # is the value of the INPUT_FILTER tag, and is the name of an 794 | # input file. Doxygen will then use the output that the filter program writes 795 | # to standard output. 796 | # If FILTER_PATTERNS is specified, this tag will be 797 | # ignored. 798 | 799 | INPUT_FILTER = 800 | 801 | # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 802 | # basis. 803 | # Doxygen will compare the file name with each pattern and apply the 804 | # filter if there is a match. 805 | # The filters are a list of the form: 806 | # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 807 | # info on how filters are used. If FILTER_PATTERNS is empty or if 808 | # non of the patterns match the file name, INPUT_FILTER is applied. 809 | 810 | FILTER_PATTERNS = 811 | 812 | # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 813 | # INPUT_FILTER) will be used to filter the input files when producing source 814 | # files to browse (i.e. when SOURCE_BROWSER is set to YES). 815 | 816 | FILTER_SOURCE_FILES = NO 817 | 818 | # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 819 | # pattern. A pattern will override the setting for FILTER_PATTERN (if any) 820 | # and it is also possible to disable source filtering for a specific pattern 821 | # using *.ext= (so without naming a filter). This option only has effect when 822 | # FILTER_SOURCE_FILES is enabled. 823 | 824 | FILTER_SOURCE_PATTERNS = 825 | 826 | #--------------------------------------------------------------------------- 827 | # configuration options related to source browsing 828 | #--------------------------------------------------------------------------- 829 | 830 | # If the SOURCE_BROWSER tag is set to YES then a list of source files will 831 | # be generated. Documented entities will be cross-referenced with these sources. 832 | # Note: To get rid of all source code in the generated output, make sure also 833 | # VERBATIM_HEADERS is set to NO. 834 | 835 | SOURCE_BROWSER = NO 836 | 837 | # Setting the INLINE_SOURCES tag to YES will include the body 838 | # of functions and classes directly in the documentation. 839 | 840 | INLINE_SOURCES = YES 841 | 842 | # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 843 | # doxygen to hide any special comment blocks from generated source code 844 | # fragments. Normal C, C++ and Fortran comments will always remain visible. 845 | 846 | STRIP_CODE_COMMENTS = YES 847 | 848 | # If the REFERENCED_BY_RELATION tag is set to YES 849 | # then for each documented function all documented 850 | # functions referencing it will be listed. 851 | 852 | REFERENCED_BY_RELATION = NO 853 | 854 | # If the REFERENCES_RELATION tag is set to YES 855 | # then for each documented function all documented entities 856 | # called/used by that function will be listed. 857 | 858 | REFERENCES_RELATION = NO 859 | 860 | # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 861 | # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 862 | # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 863 | # link to the source code. 864 | # Otherwise they will link to the documentation. 865 | 866 | REFERENCES_LINK_SOURCE = YES 867 | 868 | # If the USE_HTAGS tag is set to YES then the references to source code 869 | # will point to the HTML generated by the htags(1) tool instead of doxygen 870 | # built-in source browser. The htags tool is part of GNU's global source 871 | # tagging system (see http://www.gnu.org/software/global/global.html). You 872 | # will need version 4.8.6 or higher. 873 | 874 | USE_HTAGS = NO 875 | 876 | # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 877 | # will generate a verbatim copy of the header file for each class for 878 | # which an include is specified. Set to NO to disable this. 879 | 880 | VERBATIM_HEADERS = YES 881 | 882 | #--------------------------------------------------------------------------- 883 | # configuration options related to the alphabetical class index 884 | #--------------------------------------------------------------------------- 885 | 886 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 887 | # of all compounds will be generated. Enable this if the project 888 | # contains a lot of classes, structs, unions or interfaces. 889 | 890 | ALPHABETICAL_INDEX = NO 891 | 892 | # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 893 | # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 894 | # in which this list will be split (can be a number in the range [1..20]) 895 | 896 | COLS_IN_ALPHA_INDEX = 5 897 | 898 | # In case all classes in a project start with a common prefix, all 899 | # classes will be put under the same header in the alphabetical index. 900 | # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 901 | # should be ignored while generating the index headers. 902 | 903 | IGNORE_PREFIX = 904 | 905 | #--------------------------------------------------------------------------- 906 | # configuration options related to the HTML output 907 | #--------------------------------------------------------------------------- 908 | 909 | # If the GENERATE_HTML tag is set to YES (the default) Doxygen will 910 | # generate HTML output. 911 | 912 | GENERATE_HTML = YES 913 | 914 | # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 915 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be 916 | # put in front of it. If left blank `html' will be used as the default path. 917 | 918 | HTML_OUTPUT = html 919 | 920 | # The HTML_FILE_EXTENSION tag can be used to specify the file extension for 921 | # each generated HTML page (for example: .htm,.php,.asp). If it is left blank 922 | # doxygen will generate files with .html extension. 923 | 924 | HTML_FILE_EXTENSION = .html 925 | 926 | # The HTML_HEADER tag can be used to specify a personal HTML header for 927 | # each generated HTML page. If it is left blank doxygen will generate a 928 | # standard header. Note that when using a custom header you are responsible 929 | # for the proper inclusion of any scripts and style sheets that doxygen 930 | # needs, which is dependent on the configuration options used. 931 | # It is advised to generate a default header using "doxygen -w html 932 | # header.html footer.html stylesheet.css YourConfigFile" and then modify 933 | # that header. Note that the header is subject to change so you typically 934 | # have to redo this when upgrading to a newer version of doxygen or when 935 | # changing the value of configuration settings such as GENERATE_TREEVIEW! 936 | 937 | HTML_HEADER = 938 | 939 | # The HTML_FOOTER tag can be used to specify a personal HTML footer for 940 | # each generated HTML page. If it is left blank doxygen will generate a 941 | # standard footer. 942 | 943 | HTML_FOOTER = 944 | 945 | # The HTML_STYLESHEET tag can be used to specify a user-defined cascading 946 | # style sheet that is used by each HTML page. It can be used to 947 | # fine-tune the look of the HTML output. If left blank doxygen will 948 | # generate a default style sheet. Note that it is recommended to use 949 | # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this 950 | # tag will in the future become obsolete. 951 | 952 | HTML_STYLESHEET = 953 | 954 | # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional 955 | # user-defined cascading style sheet that is included after the standard 956 | # style sheets created by doxygen. Using this option one can overrule 957 | # certain style aspects. This is preferred over using HTML_STYLESHEET 958 | # since it does not replace the standard style sheet and is therefor more 959 | # robust against future updates. Doxygen will copy the style sheet file to 960 | # the output directory. 961 | 962 | HTML_EXTRA_STYLESHEET = 963 | 964 | # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 965 | # other source files which should be copied to the HTML output directory. Note 966 | # that these files will be copied to the base HTML output directory. Use the 967 | # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 968 | # files. In the HTML_STYLESHEET file, use the file name only. Also note that 969 | # the files will be copied as-is; there are no commands or markers available. 970 | 971 | HTML_EXTRA_FILES = 972 | 973 | # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 974 | # Doxygen will adjust the colors in the style sheet and background images 975 | # according to this color. Hue is specified as an angle on a colorwheel, 976 | # see http://en.wikipedia.org/wiki/Hue for more information. 977 | # For instance the value 0 represents red, 60 is yellow, 120 is green, 978 | # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 979 | # The allowed range is 0 to 359. 980 | 981 | HTML_COLORSTYLE_HUE = 220 982 | 983 | # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 984 | # the colors in the HTML output. For a value of 0 the output will use 985 | # grayscales only. A value of 255 will produce the most vivid colors. 986 | 987 | HTML_COLORSTYLE_SAT = 100 988 | 989 | # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 990 | # the luminance component of the colors in the HTML output. Values below 991 | # 100 gradually make the output lighter, whereas values above 100 make 992 | # the output darker. The value divided by 100 is the actual gamma applied, 993 | # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 994 | # and 100 does not change the gamma. 995 | 996 | HTML_COLORSTYLE_GAMMA = 80 997 | 998 | # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 999 | # page will contain the date and time when the page was generated. Setting 1000 | # this to NO can help when comparing the output of multiple runs. 1001 | 1002 | HTML_TIMESTAMP = NO 1003 | 1004 | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 1005 | # documentation will contain sections that can be hidden and shown after the 1006 | # page has loaded. 1007 | 1008 | HTML_DYNAMIC_SECTIONS = NO 1009 | 1010 | # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of 1011 | # entries shown in the various tree structured indices initially; the user 1012 | # can expand and collapse entries dynamically later on. Doxygen will expand 1013 | # the tree to such a level that at most the specified number of entries are 1014 | # visible (unless a fully collapsed tree already exceeds this amount). 1015 | # So setting the number of entries 1 will produce a full collapsed tree by 1016 | # default. 0 is a special value representing an infinite number of entries 1017 | # and will result in a full expanded tree by default. 1018 | 1019 | HTML_INDEX_NUM_ENTRIES = 100 1020 | 1021 | # If the GENERATE_DOCSET tag is set to YES, additional index files 1022 | # will be generated that can be used as input for Apple's Xcode 3 1023 | # integrated development environment, introduced with OSX 10.5 (Leopard). 1024 | # To create a documentation set, doxygen will generate a Makefile in the 1025 | # HTML output directory. Running make will produce the docset in that 1026 | # directory and running "make install" will install the docset in 1027 | # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 1028 | # it at startup. 1029 | # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 1030 | # for more information. 1031 | 1032 | GENERATE_DOCSET = NO 1033 | 1034 | # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 1035 | # feed. A documentation feed provides an umbrella under which multiple 1036 | # documentation sets from a single provider (such as a company or product suite) 1037 | # can be grouped. 1038 | 1039 | DOCSET_FEEDNAME = "Doxygen generated docs" 1040 | 1041 | # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 1042 | # should uniquely identify the documentation set bundle. This should be a 1043 | # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 1044 | # will append .docset to the name. 1045 | 1046 | DOCSET_BUNDLE_ID = org.doxygen.Project 1047 | 1048 | # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely 1049 | # identify the documentation publisher. This should be a reverse domain-name 1050 | # style string, e.g. com.mycompany.MyDocSet.documentation. 1051 | 1052 | DOCSET_PUBLISHER_ID = org.doxygen.Publisher 1053 | 1054 | # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. 1055 | 1056 | DOCSET_PUBLISHER_NAME = Publisher 1057 | 1058 | # If the GENERATE_HTMLHELP tag is set to YES, additional index files 1059 | # will be generated that can be used as input for tools like the 1060 | # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 1061 | # of the generated HTML documentation. 1062 | 1063 | GENERATE_HTMLHELP = NO 1064 | 1065 | # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 1066 | # be used to specify the file name of the resulting .chm file. You 1067 | # can add a path in front of the file if the result should not be 1068 | # written to the html output directory. 1069 | 1070 | CHM_FILE = 1071 | 1072 | # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 1073 | # be used to specify the location (absolute path including file name) of 1074 | # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 1075 | # the HTML help compiler on the generated index.hhp. 1076 | 1077 | HHC_LOCATION = 1078 | 1079 | # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 1080 | # controls if a separate .chi index file is generated (YES) or that 1081 | # it should be included in the master .chm file (NO). 1082 | 1083 | GENERATE_CHI = NO 1084 | 1085 | # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 1086 | # is used to encode HtmlHelp index (hhk), content (hhc) and project file 1087 | # content. 1088 | 1089 | CHM_INDEX_ENCODING = 1090 | 1091 | # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 1092 | # controls whether a binary table of contents is generated (YES) or a 1093 | # normal table of contents (NO) in the .chm file. 1094 | 1095 | BINARY_TOC = NO 1096 | 1097 | # The TOC_EXPAND flag can be set to YES to add extra items for group members 1098 | # to the contents of the HTML help documentation and to the tree view. 1099 | 1100 | TOC_EXPAND = NO 1101 | 1102 | # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 1103 | # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 1104 | # that can be used as input for Qt's qhelpgenerator to generate a 1105 | # Qt Compressed Help (.qch) of the generated HTML documentation. 1106 | 1107 | GENERATE_QHP = NO 1108 | 1109 | # If the QHG_LOCATION tag is specified, the QCH_FILE tag can 1110 | # be used to specify the file name of the resulting .qch file. 1111 | # The path specified is relative to the HTML output folder. 1112 | 1113 | QCH_FILE = 1114 | 1115 | # The QHP_NAMESPACE tag specifies the namespace to use when generating 1116 | # Qt Help Project output. For more information please see 1117 | # http://doc.trolltech.com/qthelpproject.html#namespace 1118 | 1119 | QHP_NAMESPACE = org.doxygen.Project 1120 | 1121 | # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 1122 | # Qt Help Project output. For more information please see 1123 | # http://doc.trolltech.com/qthelpproject.html#virtual-folders 1124 | 1125 | QHP_VIRTUAL_FOLDER = doc 1126 | 1127 | # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 1128 | # add. For more information please see 1129 | # http://doc.trolltech.com/qthelpproject.html#custom-filters 1130 | 1131 | QHP_CUST_FILTER_NAME = 1132 | 1133 | # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 1134 | # custom filter to add. For more information please see 1135 | # 1136 | # Qt Help Project / Custom Filters. 1137 | 1138 | QHP_CUST_FILTER_ATTRS = 1139 | 1140 | # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 1141 | # project's 1142 | # filter section matches. 1143 | # 1144 | # Qt Help Project / Filter Attributes. 1145 | 1146 | QHP_SECT_FILTER_ATTRS = 1147 | 1148 | # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 1149 | # be used to specify the location of Qt's qhelpgenerator. 1150 | # If non-empty doxygen will try to run qhelpgenerator on the generated 1151 | # .qhp file. 1152 | 1153 | QHG_LOCATION = 1154 | 1155 | # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files 1156 | # will be generated, which together with the HTML files, form an Eclipse help 1157 | # plugin. To install this plugin and make it available under the help contents 1158 | # menu in Eclipse, the contents of the directory containing the HTML and XML 1159 | # files needs to be copied into the plugins directory of eclipse. The name of 1160 | # the directory within the plugins directory should be the same as 1161 | # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 1162 | # the help appears. 1163 | 1164 | GENERATE_ECLIPSEHELP = NO 1165 | 1166 | # A unique identifier for the eclipse help plugin. When installing the plugin 1167 | # the directory name containing the HTML and XML files should also have 1168 | # this name. 1169 | 1170 | ECLIPSE_DOC_ID = org.doxygen.Project 1171 | 1172 | # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 1173 | # at top of each HTML page. The value NO (the default) enables the index and 1174 | # the value YES disables it. Since the tabs have the same information as the 1175 | # navigation tree you can set this option to NO if you already set 1176 | # GENERATE_TREEVIEW to YES. 1177 | 1178 | DISABLE_INDEX = NO 1179 | 1180 | # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 1181 | # structure should be generated to display hierarchical information. 1182 | # If the tag value is set to YES, a side panel will be generated 1183 | # containing a tree-like index structure (just like the one that 1184 | # is generated for HTML Help). For this to work a browser that supports 1185 | # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 1186 | # Windows users are probably better off using the HTML help feature. 1187 | # Since the tree basically has the same information as the tab index you 1188 | # could consider to set DISABLE_INDEX to NO when enabling this option. 1189 | 1190 | GENERATE_TREEVIEW = YES 1191 | 1192 | # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 1193 | # (range [0,1..20]) that doxygen will group on one line in the generated HTML 1194 | # documentation. Note that a value of 0 will completely suppress the enum 1195 | # values from appearing in the overview section. 1196 | 1197 | ENUM_VALUES_PER_LINE = 4 1198 | 1199 | # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 1200 | # used to set the initial width (in pixels) of the frame in which the tree 1201 | # is shown. 1202 | 1203 | TREEVIEW_WIDTH = 250 1204 | 1205 | # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 1206 | # links to external symbols imported via tag files in a separate window. 1207 | 1208 | EXT_LINKS_IN_WINDOW = NO 1209 | 1210 | # Use this tag to change the font size of Latex formulas included 1211 | # as images in the HTML documentation. The default is 10. Note that 1212 | # when you change the font size after a successful doxygen run you need 1213 | # to manually remove any form_*.png images from the HTML output directory 1214 | # to force them to be regenerated. 1215 | 1216 | FORMULA_FONTSIZE = 10 1217 | 1218 | # Use the FORMULA_TRANPARENT tag to determine whether or not the images 1219 | # generated for formulas are transparent PNGs. Transparent PNGs are 1220 | # not supported properly for IE 6.0, but are supported on all modern browsers. 1221 | # Note that when changing this option you need to delete any form_*.png files 1222 | # in the HTML output before the changes have effect. 1223 | 1224 | FORMULA_TRANSPARENT = YES 1225 | 1226 | # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 1227 | # (see http://www.mathjax.org) which uses client side Javascript for the 1228 | # rendering instead of using prerendered bitmaps. Use this if you do not 1229 | # have LaTeX installed or if you want to formulas look prettier in the HTML 1230 | # output. When enabled you may also need to install MathJax separately and 1231 | # configure the path to it using the MATHJAX_RELPATH option. 1232 | 1233 | USE_MATHJAX = NO 1234 | 1235 | # When MathJax is enabled you need to specify the location relative to the 1236 | # HTML output directory using the MATHJAX_RELPATH option. The destination 1237 | # directory should contain the MathJax.js script. For instance, if the mathjax 1238 | # directory is located at the same level as the HTML output directory, then 1239 | # MATHJAX_RELPATH should be ../mathjax. The default value points to 1240 | # the MathJax Content Delivery Network so you can quickly see the result without 1241 | # installing MathJax. 1242 | # However, it is strongly recommended to install a local 1243 | # copy of MathJax from http://www.mathjax.org before deployment. 1244 | 1245 | MATHJAX_RELPATH = http://www.mathjax.org/mathjax 1246 | 1247 | # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 1248 | # names that should be enabled during MathJax rendering. 1249 | 1250 | MATHJAX_EXTENSIONS = 1251 | 1252 | # When the SEARCHENGINE tag is enabled doxygen will generate a search box 1253 | # for the HTML output. The underlying search engine uses javascript 1254 | # and DHTML and should work on any modern browser. Note that when using 1255 | # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 1256 | # (GENERATE_DOCSET) there is already a search function so this one should 1257 | # typically be disabled. For large projects the javascript based search engine 1258 | # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. 1259 | 1260 | SEARCHENGINE = NO 1261 | 1262 | # When the SERVER_BASED_SEARCH tag is enabled the search engine will be 1263 | # implemented using a PHP enabled web server instead of at the web client 1264 | # using Javascript. Doxygen will generate the search PHP script and index 1265 | # file to put on the web server. The advantage of the server 1266 | # based approach is that it scales better to large projects and allows 1267 | # full text search. The disadvantages are that it is more difficult to setup 1268 | # and does not have live searching capabilities. 1269 | 1270 | SERVER_BASED_SEARCH = NO 1271 | 1272 | #--------------------------------------------------------------------------- 1273 | # configuration options related to the LaTeX output 1274 | #--------------------------------------------------------------------------- 1275 | 1276 | # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 1277 | # generate Latex output. 1278 | 1279 | GENERATE_LATEX = YES 1280 | 1281 | # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 1282 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1283 | # put in front of it. If left blank `latex' will be used as the default path. 1284 | 1285 | LATEX_OUTPUT = latex 1286 | 1287 | # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 1288 | # invoked. If left blank `latex' will be used as the default command name. 1289 | # Note that when enabling USE_PDFLATEX this option is only used for 1290 | # generating bitmaps for formulas in the HTML output, but not in the 1291 | # Makefile that is written to the output directory. 1292 | 1293 | LATEX_CMD_NAME = latex 1294 | 1295 | # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 1296 | # generate index for LaTeX. If left blank `makeindex' will be used as the 1297 | # default command name. 1298 | 1299 | MAKEINDEX_CMD_NAME = makeindex 1300 | 1301 | # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 1302 | # LaTeX documents. This may be useful for small projects and may help to 1303 | # save some trees in general. 1304 | 1305 | COMPACT_LATEX = YES 1306 | 1307 | # The PAPER_TYPE tag can be used to set the paper type that is used 1308 | # by the printer. Possible values are: a4, letter, legal and 1309 | # executive. If left blank a4wide will be used. 1310 | 1311 | PAPER_TYPE = letter 1312 | 1313 | # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 1314 | # packages that should be included in the LaTeX output. 1315 | 1316 | EXTRA_PACKAGES = 1317 | 1318 | # The LATEX_HEADER tag can be used to specify a personal LaTeX header for 1319 | # the generated latex document. The header should contain everything until 1320 | # the first chapter. If it is left blank doxygen will generate a 1321 | # standard header. Notice: only use this tag if you know what you are doing! 1322 | 1323 | LATEX_HEADER = 1324 | 1325 | # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 1326 | # the generated latex document. The footer should contain everything after 1327 | # the last chapter. If it is left blank doxygen will generate a 1328 | # standard footer. Notice: only use this tag if you know what you are doing! 1329 | 1330 | LATEX_FOOTER = 1331 | 1332 | # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 1333 | # is prepared for conversion to pdf (using ps2pdf). The pdf file will 1334 | # contain links (just like the HTML output) instead of page references 1335 | # This makes the output suitable for online browsing using a pdf viewer. 1336 | 1337 | PDF_HYPERLINKS = YES 1338 | 1339 | # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 1340 | # plain latex in the generated Makefile. Set this option to YES to get a 1341 | # higher quality PDF documentation. 1342 | 1343 | USE_PDFLATEX = YES 1344 | 1345 | # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 1346 | # command to the generated LaTeX files. This will instruct LaTeX to keep 1347 | # running if errors occur, instead of asking the user for help. 1348 | # This option is also used when generating formulas in HTML. 1349 | 1350 | LATEX_BATCHMODE = YES 1351 | 1352 | # If LATEX_HIDE_INDICES is set to YES then doxygen will not 1353 | # include the index chapters (such as File Index, Compound Index, etc.) 1354 | # in the output. 1355 | 1356 | LATEX_HIDE_INDICES = NO 1357 | 1358 | # If LATEX_SOURCE_CODE is set to YES then doxygen will include 1359 | # source code with syntax highlighting in the LaTeX output. 1360 | # Note that which sources are shown also depends on other settings 1361 | # such as SOURCE_BROWSER. 1362 | 1363 | LATEX_SOURCE_CODE = NO 1364 | 1365 | # The LATEX_BIB_STYLE tag can be used to specify the style to use for the 1366 | # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 1367 | # http://en.wikipedia.org/wiki/BibTeX for more info. 1368 | 1369 | LATEX_BIB_STYLE = plain 1370 | 1371 | #--------------------------------------------------------------------------- 1372 | # configuration options related to the RTF output 1373 | #--------------------------------------------------------------------------- 1374 | 1375 | # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 1376 | # The RTF output is optimized for Word 97 and may not look very pretty with 1377 | # other RTF readers or editors. 1378 | 1379 | GENERATE_RTF = NO 1380 | 1381 | # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 1382 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1383 | # put in front of it. If left blank `rtf' will be used as the default path. 1384 | 1385 | RTF_OUTPUT = rtf 1386 | 1387 | # If the COMPACT_RTF tag is set to YES Doxygen generates more compact 1388 | # RTF documents. This may be useful for small projects and may help to 1389 | # save some trees in general. 1390 | 1391 | COMPACT_RTF = NO 1392 | 1393 | # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 1394 | # will contain hyperlink fields. The RTF file will 1395 | # contain links (just like the HTML output) instead of page references. 1396 | # This makes the output suitable for online browsing using WORD or other 1397 | # programs which support those fields. 1398 | # Note: wordpad (write) and others do not support links. 1399 | 1400 | RTF_HYPERLINKS = NO 1401 | 1402 | # Load style sheet definitions from file. Syntax is similar to doxygen's 1403 | # config file, i.e. a series of assignments. You only have to provide 1404 | # replacements, missing definitions are set to their default value. 1405 | 1406 | RTF_STYLESHEET_FILE = 1407 | 1408 | # Set optional variables used in the generation of an rtf document. 1409 | # Syntax is similar to doxygen's config file. 1410 | 1411 | RTF_EXTENSIONS_FILE = 1412 | 1413 | #--------------------------------------------------------------------------- 1414 | # configuration options related to the man page output 1415 | #--------------------------------------------------------------------------- 1416 | 1417 | # If the GENERATE_MAN tag is set to YES (the default) Doxygen will 1418 | # generate man pages 1419 | 1420 | GENERATE_MAN = NO 1421 | 1422 | # The MAN_OUTPUT tag is used to specify where the man pages will be put. 1423 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1424 | # put in front of it. If left blank `man' will be used as the default path. 1425 | 1426 | MAN_OUTPUT = man 1427 | 1428 | # The MAN_EXTENSION tag determines the extension that is added to 1429 | # the generated man pages (default is the subroutine's section .3) 1430 | 1431 | MAN_EXTENSION = .3 1432 | 1433 | # If the MAN_LINKS tag is set to YES and Doxygen generates man output, 1434 | # then it will generate one additional man file for each entity 1435 | # documented in the real man page(s). These additional files 1436 | # only source the real man page, but without them the man command 1437 | # would be unable to find the correct page. The default is NO. 1438 | 1439 | MAN_LINKS = NO 1440 | 1441 | #--------------------------------------------------------------------------- 1442 | # configuration options related to the XML output 1443 | #--------------------------------------------------------------------------- 1444 | 1445 | # If the GENERATE_XML tag is set to YES Doxygen will 1446 | # generate an XML file that captures the structure of 1447 | # the code including all documentation. 1448 | 1449 | GENERATE_XML = NO 1450 | 1451 | # The XML_OUTPUT tag is used to specify where the XML pages will be put. 1452 | # If a relative path is entered the value of OUTPUT_DIRECTORY will be 1453 | # put in front of it. If left blank `xml' will be used as the default path. 1454 | 1455 | XML_OUTPUT = xml 1456 | 1457 | # The XML_SCHEMA tag can be used to specify an XML schema, 1458 | # which can be used by a validating XML parser to check the 1459 | # syntax of the XML files. 1460 | 1461 | XML_SCHEMA = 1462 | 1463 | # The XML_DTD tag can be used to specify an XML DTD, 1464 | # which can be used by a validating XML parser to check the 1465 | # syntax of the XML files. 1466 | 1467 | XML_DTD = 1468 | 1469 | # If the XML_PROGRAMLISTING tag is set to YES Doxygen will 1470 | # dump the program listings (including syntax highlighting 1471 | # and cross-referencing information) to the XML output. Note that 1472 | # enabling this will significantly increase the size of the XML output. 1473 | 1474 | XML_PROGRAMLISTING = NO 1475 | 1476 | #--------------------------------------------------------------------------- 1477 | # configuration options for the AutoGen Definitions output 1478 | #--------------------------------------------------------------------------- 1479 | 1480 | # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 1481 | # generate an AutoGen Definitions (see autogen.sf.net) file 1482 | # that captures the structure of the code including all 1483 | # documentation. Note that this feature is still experimental 1484 | # and incomplete at the moment. 1485 | 1486 | GENERATE_AUTOGEN_DEF = NO 1487 | 1488 | #--------------------------------------------------------------------------- 1489 | # configuration options related to the Perl module output 1490 | #--------------------------------------------------------------------------- 1491 | 1492 | # If the GENERATE_PERLMOD tag is set to YES Doxygen will 1493 | # generate a Perl module file that captures the structure of 1494 | # the code including all documentation. Note that this 1495 | # feature is still experimental and incomplete at the 1496 | # moment. 1497 | 1498 | GENERATE_PERLMOD = NO 1499 | 1500 | # If the PERLMOD_LATEX tag is set to YES Doxygen will generate 1501 | # the necessary Makefile rules, Perl scripts and LaTeX code to be able 1502 | # to generate PDF and DVI output from the Perl module output. 1503 | 1504 | PERLMOD_LATEX = NO 1505 | 1506 | # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 1507 | # nicely formatted so it can be parsed by a human reader. 1508 | # This is useful 1509 | # if you want to understand what is going on. 1510 | # On the other hand, if this 1511 | # tag is set to NO the size of the Perl module output will be much smaller 1512 | # and Perl will parse it just the same. 1513 | 1514 | PERLMOD_PRETTY = YES 1515 | 1516 | # The names of the make variables in the generated doxyrules.make file 1517 | # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 1518 | # This is useful so different doxyrules.make files included by the same 1519 | # Makefile don't overwrite each other's variables. 1520 | 1521 | PERLMOD_MAKEVAR_PREFIX = 1522 | 1523 | #--------------------------------------------------------------------------- 1524 | # Configuration options related to the preprocessor 1525 | #--------------------------------------------------------------------------- 1526 | 1527 | # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 1528 | # evaluate all C-preprocessor directives found in the sources and include 1529 | # files. 1530 | 1531 | ENABLE_PREPROCESSING = YES 1532 | 1533 | # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 1534 | # names in the source code. If set to NO (the default) only conditional 1535 | # compilation will be performed. Macro expansion can be done in a controlled 1536 | # way by setting EXPAND_ONLY_PREDEF to YES. 1537 | 1538 | MACRO_EXPANSION = NO 1539 | 1540 | # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 1541 | # then the macro expansion is limited to the macros specified with the 1542 | # PREDEFINED and EXPAND_AS_DEFINED tags. 1543 | 1544 | EXPAND_ONLY_PREDEF = NO 1545 | 1546 | # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 1547 | # pointed to by INCLUDE_PATH will be searched when a #include is found. 1548 | 1549 | SEARCH_INCLUDES = YES 1550 | 1551 | # The INCLUDE_PATH tag can be used to specify one or more directories that 1552 | # contain include files that are not input files but should be processed by 1553 | # the preprocessor. 1554 | 1555 | INCLUDE_PATH = 1556 | 1557 | # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 1558 | # patterns (like *.h and *.hpp) to filter out the header-files in the 1559 | # directories. If left blank, the patterns specified with FILE_PATTERNS will 1560 | # be used. 1561 | 1562 | INCLUDE_FILE_PATTERNS = 1563 | 1564 | # The PREDEFINED tag can be used to specify one or more macro names that 1565 | # are defined before the preprocessor is started (similar to the -D option of 1566 | # gcc). The argument of the tag is a list of macros of the form: name 1567 | # or name=definition (no spaces). If the definition and the = are 1568 | # omitted =1 is assumed. To prevent a macro definition from being 1569 | # undefined via #undef or recursively expanded use the := operator 1570 | # instead of the = operator. 1571 | 1572 | PREDEFINED = 1573 | 1574 | # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 1575 | # this tag can be used to specify a list of macro names that should be expanded. 1576 | # The macro definition that is found in the sources will be used. 1577 | # Use the PREDEFINED tag if you want to use a different macro definition that 1578 | # overrules the definition found in the source code. 1579 | 1580 | EXPAND_AS_DEFINED = 1581 | 1582 | # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 1583 | # doxygen's preprocessor will remove all references to function-like macros 1584 | # that are alone on a line, have an all uppercase name, and do not end with a 1585 | # semicolon, because these will confuse the parser if not removed. 1586 | 1587 | SKIP_FUNCTION_MACROS = YES 1588 | 1589 | #--------------------------------------------------------------------------- 1590 | # Configuration::additions related to external references 1591 | #--------------------------------------------------------------------------- 1592 | 1593 | # The TAGFILES option can be used to specify one or more tagfiles. For each 1594 | # tag file the location of the external documentation should be added. The 1595 | # format of a tag file without this location is as follows: 1596 | # 1597 | # TAGFILES = file1 file2 ... 1598 | # Adding location for the tag files is done as follows: 1599 | # 1600 | # TAGFILES = file1=loc1 "file2 = loc2" ... 1601 | # where "loc1" and "loc2" can be relative or absolute paths 1602 | # or URLs. Note that each tag file must have a unique name (where the name does 1603 | # NOT include the path). If a tag file is not located in the directory in which 1604 | # doxygen is run, you must also specify the path to the tagfile here. 1605 | 1606 | TAGFILES = 1607 | 1608 | # When a file name is specified after GENERATE_TAGFILE, doxygen will create 1609 | # a tag file that is based on the input files it reads. 1610 | 1611 | GENERATE_TAGFILE = 1612 | 1613 | # If the ALLEXTERNALS tag is set to YES all external classes will be listed 1614 | # in the class index. If set to NO only the inherited external classes 1615 | # will be listed. 1616 | 1617 | ALLEXTERNALS = NO 1618 | 1619 | # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 1620 | # in the modules index. If set to NO, only the current project's groups will 1621 | # be listed. 1622 | 1623 | EXTERNAL_GROUPS = YES 1624 | 1625 | # The PERL_PATH should be the absolute path and name of the perl script 1626 | # interpreter (i.e. the result of `which perl'). 1627 | 1628 | PERL_PATH = /usr/bin/perl 1629 | 1630 | #--------------------------------------------------------------------------- 1631 | # Configuration options related to the dot tool 1632 | #--------------------------------------------------------------------------- 1633 | 1634 | # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 1635 | # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 1636 | # or super classes. Setting the tag to NO turns the diagrams off. Note that 1637 | # this option also works with HAVE_DOT disabled, but it is recommended to 1638 | # install and use dot, since it yields more powerful graphs. 1639 | 1640 | CLASS_DIAGRAMS = YES 1641 | 1642 | # You can define message sequence charts within doxygen comments using the \msc 1643 | # command. Doxygen will then run the mscgen tool (see 1644 | # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 1645 | # documentation. The MSCGEN_PATH tag allows you to specify the directory where 1646 | # the mscgen tool resides. If left empty the tool is assumed to be found in the 1647 | # default search path. 1648 | 1649 | MSCGEN_PATH = 1650 | 1651 | # If set to YES, the inheritance and collaboration graphs will hide 1652 | # inheritance and usage relations if the target is undocumented 1653 | # or is not a class. 1654 | 1655 | HIDE_UNDOC_RELATIONS = YES 1656 | 1657 | # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 1658 | # available from the path. This tool is part of Graphviz, a graph visualization 1659 | # toolkit from AT&T and Lucent Bell Labs. The other options in this section 1660 | # have no effect if this option is set to NO (the default) 1661 | 1662 | HAVE_DOT = YES 1663 | 1664 | # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 1665 | # allowed to run in parallel. When set to 0 (the default) doxygen will 1666 | # base this on the number of processors available in the system. You can set it 1667 | # explicitly to a value larger than 0 to get control over the balance 1668 | # between CPU load and processing speed. 1669 | 1670 | DOT_NUM_THREADS = 0 1671 | 1672 | # By default doxygen will use the Helvetica font for all dot files that 1673 | # doxygen generates. When you want a differently looking font you can specify 1674 | # the font name using DOT_FONTNAME. You need to make sure dot is able to find 1675 | # the font, which can be done by putting it in a standard location or by setting 1676 | # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 1677 | # directory containing the font. 1678 | 1679 | DOT_FONTNAME = FreeSans 1680 | 1681 | # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 1682 | # The default size is 10pt. 1683 | 1684 | DOT_FONTSIZE = 10 1685 | 1686 | # By default doxygen will tell dot to use the Helvetica font. 1687 | # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 1688 | # set the path where dot can find it. 1689 | 1690 | DOT_FONTPATH = 1691 | 1692 | # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 1693 | # will generate a graph for each documented class showing the direct and 1694 | # indirect inheritance relations. Setting this tag to YES will force the 1695 | # CLASS_DIAGRAMS tag to NO. 1696 | 1697 | CLASS_GRAPH = YES 1698 | 1699 | # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 1700 | # will generate a graph for each documented class showing the direct and 1701 | # indirect implementation dependencies (inheritance, containment, and 1702 | # class references variables) of the class with other documented classes. 1703 | 1704 | COLLABORATION_GRAPH = YES 1705 | 1706 | # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 1707 | # will generate a graph for groups, showing the direct groups dependencies 1708 | 1709 | GROUP_GRAPHS = YES 1710 | 1711 | # If the UML_LOOK tag is set to YES doxygen will generate inheritance and 1712 | # collaboration diagrams in a style similar to the OMG's Unified Modeling 1713 | # Language. 1714 | 1715 | UML_LOOK = NO 1716 | 1717 | # If the UML_LOOK tag is enabled, the fields and methods are shown inside 1718 | # the class node. If there are many fields or methods and many nodes the 1719 | # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS 1720 | # threshold limits the number of items for each type to make the size more 1721 | # managable. Set this to 0 for no limit. Note that the threshold may be 1722 | # exceeded by 50% before the limit is enforced. 1723 | 1724 | UML_LIMIT_NUM_FIELDS = 10 1725 | 1726 | # If set to YES, the inheritance and collaboration graphs will show the 1727 | # relations between templates and their instances. 1728 | 1729 | TEMPLATE_RELATIONS = NO 1730 | 1731 | # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 1732 | # tags are set to YES then doxygen will generate a graph for each documented 1733 | # file showing the direct and indirect include dependencies of the file with 1734 | # other documented files. 1735 | 1736 | INCLUDE_GRAPH = YES 1737 | 1738 | # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 1739 | # HAVE_DOT tags are set to YES then doxygen will generate a graph for each 1740 | # documented header file showing the documented files that directly or 1741 | # indirectly include this file. 1742 | 1743 | INCLUDED_BY_GRAPH = YES 1744 | 1745 | # If the CALL_GRAPH and HAVE_DOT options are set to YES then 1746 | # doxygen will generate a call dependency graph for every global function 1747 | # or class method. Note that enabling this option will significantly increase 1748 | # the time of a run. So in most cases it will be better to enable call graphs 1749 | # for selected functions only using the \callgraph command. 1750 | 1751 | CALL_GRAPH = YES 1752 | 1753 | # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 1754 | # doxygen will generate a caller dependency graph for every global function 1755 | # or class method. Note that enabling this option will significantly increase 1756 | # the time of a run. So in most cases it will be better to enable caller 1757 | # graphs for selected functions only using the \callergraph command. 1758 | 1759 | CALLER_GRAPH = YES 1760 | 1761 | # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 1762 | # will generate a graphical hierarchy of all classes instead of a textual one. 1763 | 1764 | GRAPHICAL_HIERARCHY = YES 1765 | 1766 | # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES 1767 | # then doxygen will show the dependencies a directory has on other directories 1768 | # in a graphical way. The dependency relations are determined by the #include 1769 | # relations between the files in the directories. 1770 | 1771 | DIRECTORY_GRAPH = YES 1772 | 1773 | # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 1774 | # generated by dot. Possible values are svg, png, jpg, or gif. 1775 | # If left blank png will be used. If you choose svg you need to set 1776 | # HTML_FILE_EXTENSION to xhtml in order to make the SVG files 1777 | # visible in IE 9+ (other browsers do not have this requirement). 1778 | 1779 | DOT_IMAGE_FORMAT = png 1780 | 1781 | # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 1782 | # enable generation of interactive SVG images that allow zooming and panning. 1783 | # Note that this requires a modern browser other than Internet Explorer. 1784 | # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 1785 | # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 1786 | # visible. Older versions of IE do not have SVG support. 1787 | 1788 | INTERACTIVE_SVG = NO 1789 | 1790 | # The tag DOT_PATH can be used to specify the path where the dot tool can be 1791 | # found. If left blank, it is assumed the dot tool can be found in the path. 1792 | 1793 | DOT_PATH = 1794 | 1795 | # The DOTFILE_DIRS tag can be used to specify one or more directories that 1796 | # contain dot files that are included in the documentation (see the 1797 | # \dotfile command). 1798 | 1799 | DOTFILE_DIRS = 1800 | 1801 | # The MSCFILE_DIRS tag can be used to specify one or more directories that 1802 | # contain msc files that are included in the documentation (see the 1803 | # \mscfile command). 1804 | 1805 | MSCFILE_DIRS = 1806 | 1807 | # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 1808 | # nodes that will be shown in the graph. If the number of nodes in a graph 1809 | # becomes larger than this value, doxygen will truncate the graph, which is 1810 | # visualized by representing a node as a red box. Note that doxygen if the 1811 | # number of direct children of the root node in a graph is already larger than 1812 | # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 1813 | # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 1814 | 1815 | DOT_GRAPH_MAX_NODES = 50 1816 | 1817 | # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 1818 | # graphs generated by dot. A depth value of 3 means that only nodes reachable 1819 | # from the root by following a path via at most 3 edges will be shown. Nodes 1820 | # that lay further from the root node will be omitted. Note that setting this 1821 | # option to 1 or 2 may greatly reduce the computation time needed for large 1822 | # code bases. Also note that the size of a graph can be further restricted by 1823 | # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. 1824 | 1825 | MAX_DOT_GRAPH_DEPTH = 0 1826 | 1827 | # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 1828 | # background. This is disabled by default, because dot on Windows does not 1829 | # seem to support this out of the box. Warning: Depending on the platform used, 1830 | # enabling this option may lead to badly anti-aliased labels on the edges of 1831 | # a graph (i.e. they become hard to read). 1832 | 1833 | DOT_TRANSPARENT = NO 1834 | 1835 | # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 1836 | # files in one run (i.e. multiple -o and -T options on the command line). This 1837 | # makes dot run faster, but since only newer versions of dot (>1.8.10) 1838 | # support this, this feature is disabled by default. 1839 | 1840 | DOT_MULTI_TARGETS = NO 1841 | 1842 | # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 1843 | # generate a legend page explaining the meaning of the various boxes and 1844 | # arrows in the dot generated graphs. 1845 | 1846 | GENERATE_LEGEND = YES 1847 | 1848 | # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 1849 | # remove the intermediate dot files that are used to generate 1850 | # the various graphs. 1851 | 1852 | DOT_CLEANUP = YES 1853 | -------------------------------------------------------------------------------- /examples/one_device/one_device.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | one_device.ino - example using i2c_adc_ads7828 library 4 | 5 | Library:: i2c_adc_ads7828 6 | Author:: Doc Walker <4-20ma@wvfans.net> 7 | 8 | Copyright:: 2009-2016 Doc Walker 9 | 10 | Licensed under the Apache License, Version 2.0 (the "License"); 11 | you may not use this file except in compliance with the License. 12 | You may obtain a copy of the License at 13 | 14 | http://www.apache.org/licenses/LICENSE-2.0 15 | 16 | Unless required by applicable law or agreed to in writing, software 17 | distributed under the License is distributed on an "AS IS" BASIS, 18 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 | See the License for the specific language governing permissions and 20 | limitations under the License. 21 | 22 | */ 23 | 24 | 25 | #include 26 | 27 | 28 | // device 0 29 | // Address: A1=0, A0=0 30 | // Command: SD=1, PD1=1, PD0=1 31 | ADS7828 device(0, SINGLE_ENDED | REFERENCE_ON | ADC_ON, 0x0F); 32 | ADS7828* adc = &device; 33 | ADS7828Channel* ambientTemp = adc->channel(0); 34 | ADS7828Channel* waterTemp = adc->channel(1); 35 | ADS7828Channel* filterPressure = adc->channel(2); 36 | ADS7828Channel* waterLevel = adc->channel(3); 37 | 38 | 39 | void setup() 40 | { 41 | // enable serial monitor 42 | Serial.begin(19200); 43 | 44 | // enable I2C communication 45 | ADS7828::begin(); 46 | 47 | // adjust scaling on an individual channel basis 48 | ambientTemp->minScale = 0; 49 | ambientTemp->maxScale = 150; 50 | 51 | waterTemp->minScale = 0; 52 | waterTemp->maxScale = 100; 53 | 54 | filterPressure->minScale = 0; 55 | filterPressure->maxScale = 30; 56 | 57 | waterLevel->minScale = 0; 58 | waterLevel->maxScale = 100; 59 | } 60 | 61 | 62 | void loop() 63 | { 64 | // update all registered ADS7828 devices/unmasked channels 65 | ADS7828::updateAll(); 66 | 67 | // output moving average values to console 68 | Serial.print("\n Ambient: "); 69 | Serial.print(ambientTemp->value(), DEC); 70 | Serial.print("\n Water temp: "); 71 | Serial.print(waterTemp->value(), DEC); 72 | Serial.print("\n Filter pressure: "); 73 | Serial.print(filterPressure->value(), DEC); 74 | Serial.print("\n Water level: "); 75 | Serial.print(waterLevel->value(), DEC); 76 | Serial.print("\n- - - - - - - - - - - - - - - - - - - - \n"); 77 | 78 | // delay 79 | delay(1000); 80 | } 81 | -------------------------------------------------------------------------------- /examples/two_devices/two_devices.ino: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | two_devices.ino - example using i2c_adc_ads7828 library 4 | 5 | Library:: i2c_adc_ads7828 6 | Author:: Doc Walker <4-20ma@wvfans.net> 7 | 8 | Copyright:: 2009-2016 Doc Walker 9 | 10 | Licensed under the Apache License, Version 2.0 (the "License"); 11 | you may not use this file except in compliance with the License. 12 | You may obtain a copy of the License at 13 | 14 | http://www.apache.org/licenses/LICENSE-2.0 15 | 16 | Unless required by applicable law or agreed to in writing, software 17 | distributed under the License is distributed on an "AS IS" BASIS, 18 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 | See the License for the specific language governing permissions and 20 | limitations under the License. 21 | 22 | */ 23 | 24 | 25 | #include 26 | 27 | 28 | // device 1 29 | // Address: A1=0, A0=1 30 | // Command: SD=1, PD1=1, PD0=1 31 | ADS7828 device1(1, SINGLE_ENDED | REFERENCE_ON | ADC_ON, 0xFF); 32 | 33 | // device 2 34 | // Address: A1=1, A0=0 35 | // Command: SD=1, PD1=1, PD0=1 36 | // Scaling: min=0, max=1000 37 | ADS7828 device2(2, SINGLE_ENDED | REFERENCE_ON | ADC_ON, 0xFF, 0, 1000); 38 | 39 | void setup() 40 | { 41 | // enable serial monitor 42 | Serial.begin(19200); 43 | 44 | // enable I2C communication 45 | ADS7828::begin(); 46 | } 47 | 48 | 49 | void loop() 50 | { 51 | uint8_t a, ch; 52 | 53 | // update all registered ADS7828 devices/unmasked channels 54 | ADS7828::updateAll(); 55 | 56 | // iterate through device 1..2 channels 0..7 57 | for (a = 1; a <= 2; a++) 58 | { 59 | for (ch = 0; ch < 8; ch++) 60 | { 61 | serialPrint(ADS7828::device(a)->channel(ch)); 62 | } 63 | } 64 | Serial.print("\n"); 65 | 66 | // output moving average values to console 67 | Serial.print("\n- - - - - - - - - - - - - - - - - - - - \n"); 68 | 69 | // delay 70 | delay(1000); 71 | } 72 | 73 | 74 | void serialPrint(ADS7828Channel* ch) 75 | { 76 | // device address (0..3) 77 | Serial.print("\nAD:"); 78 | Serial.print(ch->device()->address(), DEC); 79 | 80 | // channel ID (0..7) 81 | Serial.print(", CH:"); 82 | Serial.print(ch->id(), DEC); 83 | 84 | // moving average value (scaled) 85 | Serial.print(", v:"); 86 | Serial.print(ch->value(), DEC); 87 | 88 | // minimum scale applied to moving average value 89 | Serial.print(", mn:"); 90 | Serial.print(ch->minScale, DEC); 91 | 92 | // maximum scale applied to moving average value 93 | Serial.print(", mx:"); 94 | Serial.print(ch->maxScale, DEC); 95 | } 96 | -------------------------------------------------------------------------------- /extras/README.txt: -------------------------------------------------------------------------------- 1 | Documentation is available at: 2 | http://4-20ma.github.com/i2c_adc_ads7828 3 | 4 | Alternatively, you can download the HTML files at: 5 | [tarball] https://github.com/4-20ma/i2c_adc_ads7828/tarball/gh-pages 6 | [zipball] https://github.com/4-20ma/i2c_adc_ads7828/zipball/gh-pages 7 | -------------------------------------------------------------------------------- /extras/i2c_adc_ads7828 reference-2.0.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/4-20ma/i2c_adc_ads7828/4bc11a0f7f70fed108e1258288e034e936c6e9ec/extras/i2c_adc_ads7828 reference-2.0.2.pdf -------------------------------------------------------------------------------- /keywords.txt: -------------------------------------------------------------------------------- 1 | ####################################### 2 | # Syntax Coloring Map For i2c_adc_ads7828 3 | ####################################### 4 | 5 | ####################################### 6 | # Datatypes (KEYWORD1) 7 | ####################################### 8 | 9 | i2c_adc_ads7828 KEYWORD1 10 | ADS7828 KEYWORD1 11 | ADS7828Channel KEYWORD1 12 | 13 | ####################################### 14 | # Methods and Functions (KEYWORD2) 15 | ####################################### 16 | 17 | address KEYWORD2 18 | begin KEYWORD2 19 | channel KEYWORD2 20 | commandByte KEYWORD2 21 | device KEYWORD2 22 | id KEYWORD2 23 | index KEYWORD2 24 | newSample KEYWORD2 25 | reset KEYWORD2 26 | sample KEYWORD2 27 | start KEYWORD2 28 | total KEYWORD2 29 | update KEYWORD2 30 | updateAll KEYWORD2 31 | value KEYWORD2 32 | 33 | maxScale KEYWORD2 34 | minScale KEYWORD2 35 | 36 | 37 | ####################################### 38 | # Instances (KEYWORD2) 39 | ####################################### 40 | 41 | ####################################### 42 | # Constants (LITERAL1) 43 | ####################################### 44 | 45 | DIFFERENTIAL LITERAL1 46 | SINGLE_ENDED LITERAL1 47 | REFERENCE_OFF LITERAL1 48 | REFERENCE_ON LITERAL1 49 | ADC_OFF LITERAL1 50 | ADC_ON LITERAL1 51 | 52 | DEFAULT_CHANNEL_MASK LITERAL1 53 | DEFAULT_MIN_SCALE LITERAL1 54 | DEFAULT_MAX_SCALE LITERAL1 55 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=i2c_adc_ads7828 2 | version=2.0.2 3 | author=Doc Walker 4 | maintainer=Doc Walker <4-20ma@wvfans.net> 5 | sentence=Arduino library for the Texas Instruments ADS7828 12-bit, 8-channel I2C A/D converter. 6 | paragraph=The ADS7828 provides a 12-bit, 8-channel A/D converter accessible via the I2C interface serial clock (SCL) and serial data (SDA). 7 | category=Signal Input/Output 8 | url=https://github.com/4-20ma/i2c_adc_ads7828 9 | architectures=* 10 | includes=i2c_adc_ads7828.h 11 | -------------------------------------------------------------------------------- /src/i2c_adc_ads7828.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | i2c_adc_ads7828.cpp - Arduino library for TI i2c_adc_ads7828 I2C A/D converter 4 | 5 | Library:: i2c_adc_ads7828 6 | Author:: Doc Walker <4-20ma@wvfans.net> 7 | 8 | Copyright:: 2009-2016 Doc Walker 9 | 10 | Licensed under the Apache License, Version 2.0 (the "License"); 11 | you may not use this file except in compliance with the License. 12 | You may obtain a copy of the License at 13 | 14 | http://www.apache.org/licenses/LICENSE-2.0 15 | 16 | Unless required by applicable law or agreed to in writing, software 17 | distributed under the License is distributed on an "AS IS" BASIS, 18 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 | See the License for the specific language governing permissions and 20 | limitations under the License. 21 | 22 | */ 23 | 24 | 25 | // __________________________________________________________ PROJECT INCLUDES 26 | #include "i2c_adc_ads7828.h" 27 | 28 | 29 | // ___________________________________________________ PUBLIC MEMBER FUNCTIONS 30 | /// \remark Invoked by ADS7828 constructor; 31 | /// this function will not normally be called by end user. 32 | ADS7828Channel::ADS7828Channel(ADS7828* const device, uint8_t id, 33 | uint8_t options, uint16_t min, uint16_t max) 34 | { 35 | this->device_ = device; 36 | this->commandByte_ = (bitRead(options, 7) << 7) | (bitRead(id, 0) << 6) | 37 | (bitRead(id, 2) << 5) | (bitRead(id, 1) << 4); 38 | this->minScale = min; 39 | this->maxScale = max; 40 | reset(); 41 | } 42 | 43 | 44 | /// Return command byte for channel object. 45 | /// \optional This function is for testing and troubleshooting. 46 | /// \return command byte (0x00..0xFC) 47 | /// \par Usage: 48 | /// \code 49 | /// ... 50 | /// ADS7828 adc(0); 51 | /// ADS7828Channel* temperature = adc.channel(0); 52 | /// uint8_t command = temperature->commandByte(); 53 | /// ... 54 | /// \endcode 55 | uint8_t ADS7828Channel::commandByte() 56 | { 57 | return commandByte_ | device_->commandByte(); 58 | } 59 | 60 | 61 | /// Return pointer to parent device object. 62 | /// \return pointer to parent ADS7828 object 63 | /// \par Usage: 64 | /// \code 65 | /// ... 66 | /// ADS7828 adc(0); 67 | /// ADS7828Channel* temperature = adc.channel(0); 68 | /// ADS7828* parentDevice = temperature->device(); 69 | /// ... 70 | /// \endcode 71 | ADS7828* ADS7828Channel::device() 72 | { 73 | return device_; 74 | } 75 | 76 | 77 | /// Return ID number of channel object (+IN connection). 78 | /// Single-ended inputs use COM as -IN; Differential inputs are as follows: 79 | /// \arg 0 indicates CH0 as +IN, CH1 as -IN 80 | /// \arg 1 indicates CH1 as +IN, CH0 as -IN 81 | /// \arg 2 indicates CH2 as +IN, CH3 as -IN 82 | /// \arg ... 83 | /// \arg 7 indicates CH7 as +IN, CH6 as -IN 84 | /// 85 | /// \return id (0..7) 86 | /// \retval 0 command byte C2 C1 C0 = 000 87 | /// \retval 1 command byte C2 C1 C0 = 100 88 | /// \retval 2 command byte C2 C1 C0 = 001 89 | /// \retval 3 command byte C2 C1 C0 = 101 90 | /// \retval 4 command byte C2 C1 C0 = 010 91 | /// \retval 5 command byte C2 C1 C0 = 110 92 | /// \retval 6 command byte C2 C1 C0 = 011 93 | /// \retval 7 command byte C2 C1 C0 = 111 94 | /// \par Usage: 95 | /// \code 96 | /// ... 97 | /// ADS7828 adc(0); 98 | /// ADS7828Channel* temperature = adc.channel(0); 99 | /// uint8_t channelId = temperature->id(); 100 | /// ... 101 | /// \endcode 102 | uint8_t ADS7828Channel::id() 103 | { 104 | return ((bitRead(commandByte_, 5) << 2) | (bitRead(commandByte_, 4) << 1) | 105 | (bitRead(commandByte_, 6))); 106 | } 107 | 108 | 109 | /// Return index position within moving average array. 110 | /// \optional This function is for testing and troubleshooting. 111 | /// \return index (0..2\ref MOVING_AVERAGE_BITS_ - 1) 112 | /// \par Usage: 113 | /// \code 114 | /// ... 115 | /// ADS7828 adc(0); 116 | /// ADS7828Channel* temperature = adc.channel(0); 117 | /// uint8_t channelIndex = temperature->index(); 118 | /// ... 119 | /// \endcode 120 | uint8_t ADS7828Channel::index() 121 | { 122 | return index_; 123 | } 124 | 125 | 126 | /// Add (unscaled) sample value to moving average array, update totalizer. 127 | /// \param sample sample value (0x0000..0xFFFF) 128 | /// \remark Invoked by ADS7828::update() / ADS7828::updateAll() functions; 129 | /// this function will not normally be called by end user. 130 | void ADS7828Channel::newSample(uint16_t sample) 131 | { 132 | this->index_++; 133 | if (index_ >= (1 << MOVING_AVERAGE_BITS_)) this->index_ = 0; 134 | this->total_ -= samples_[index_]; 135 | this->samples_[index_] = sample; 136 | this->total_ += samples_[index_]; 137 | } 138 | 139 | 140 | /// Reset moving average array, index, totalizer to zero. 141 | /// \par Usage: 142 | /// \code 143 | /// ... 144 | /// ADS7828 adc(0); 145 | /// ADS7828Channel* temperature = adc.channel(0); 146 | /// temperature->reset(); 147 | /// ... 148 | /// \endcode 149 | void ADS7828Channel::reset() 150 | { 151 | this->index_ = this->total_ = 0; 152 | for (uint8_t k = 0; k < (1 << MOVING_AVERAGE_BITS_); k++) 153 | { 154 | this->samples_[k] = 0; 155 | } 156 | } 157 | 158 | 159 | /// Return most-recent (unscaled) sample value from moving average array. 160 | /// \optional This function is for testing and troubleshooting. 161 | /// \return sample value (0x0000..0xFFFF) 162 | /// \par Usage: 163 | /// \code 164 | /// ... 165 | /// ADS7828 adc(0); 166 | /// ADS7828Channel* temperature = adc.channel(0); 167 | /// uint16_t sampleValue = temperature->sample(); 168 | /// ... 169 | /// \endcode 170 | uint16_t ADS7828Channel::sample() 171 | { 172 | return samples_[index_]; 173 | } 174 | 175 | 176 | /// Initiate A/D conversion for channel object. 177 | /// \optional This function is for testing and troubleshooting. 178 | /// \todo Determine whether this function is needed. 179 | /// \retval 0 success 180 | /// \retval 1 length too long for buffer 181 | /// \retval 2 address send, NACK received (device not on bus) 182 | /// \retval 3 data send, NACK received 183 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 184 | /// \par Usage: 185 | /// \code 186 | /// ... 187 | /// ADS7828 adc(0); 188 | /// ADS7828Channel* temperature = adc.channel(0); 189 | /// uint8_t status = temperature->start(); 190 | /// ... 191 | /// \endcode 192 | uint8_t ADS7828Channel::start() 193 | { 194 | return device_->start(id()); 195 | } 196 | 197 | 198 | /// Return (unscaled) totalizer value for channel object. 199 | /// \optional This function is for testing and troubleshooting. 200 | /// \return totalizer value (0x0000..0xFFFF) 201 | /// \par Usage: 202 | /// \code 203 | /// ... 204 | /// ADS7828 adc(0); 205 | /// ADS7828Channel* temperature = adc.channel(0); 206 | /// uint16_t totalValue = temperature->total(); 207 | /// ... 208 | /// \endcode 209 | uint16_t ADS7828Channel::total() 210 | { 211 | return total_; 212 | } 213 | 214 | 215 | /// Initiate A/D conversion, read data, update moving average for channel object. 216 | /// \optional This function is for testing and troubleshooting. 217 | /// \todo Determine whether this function is needed. 218 | /// \retval 0 success 219 | /// \retval 1 length too long for buffer 220 | /// \retval 2 address send, NACK received (device not on bus) 221 | /// \retval 3 data send, NACK received 222 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 223 | /// \par Usage: 224 | /// \code 225 | /// ... 226 | /// ADS7828 adc(0); 227 | /// ADS7828Channel* temperature = adc.channel(0); 228 | /// uint8_t status = temperature->update(); 229 | /// ... 230 | /// \endcode 231 | uint8_t ADS7828Channel::update() 232 | { 233 | device_->update(id()); 234 | } 235 | 236 | 237 | /// Return moving average value for channel object. 238 | /// \required This is the most commonly-used channel function. 239 | /// \return scaled value (0x0000..0xFFFF) 240 | /// \par Usage: 241 | /// \code 242 | /// ... 243 | /// ADS7828 adc(0); 244 | /// ADS7828Channel* temperature = adc.channel(0); 245 | /// uint16_t ambient = temperature->value(); 246 | /// ... 247 | /// \endcode 248 | uint16_t ADS7828Channel::value() 249 | { 250 | uint16_t r = (total_ >> MOVING_AVERAGE_BITS_); 251 | return map(r, DEFAULT_MIN_SCALE, DEFAULT_MAX_SCALE, minScale, maxScale); 252 | } 253 | 254 | 255 | // ____________________________________________ STATIC PUBLIC MEMBER FUNCTIONS 256 | 257 | 258 | // __________________________________________________ PRIVATE MEMBER FUNCTIONS 259 | 260 | 261 | // ___________________________________________ STATIC PRIVATE MEMBER FUNCTIONS 262 | 263 | 264 | // ___________________________________________________ PUBLIC MEMBER FUNCTIONS 265 | /// Constructor with the following defaults: 266 | /// 267 | /// \arg differential inputs (SD=0) 268 | /// \arg internal reference OFF between conversions (PD1=0) 269 | /// \arg A/D converter OFF between conversions (PD0=0) 270 | /// \arg min scale=0 271 | /// \arg max scale=4095 272 | /// 273 | /// \param address device address (0..3) 274 | /// \par Usage: 275 | /// \code 276 | /// ... 277 | /// // construct device with address 2 278 | /// ADS7828 adc(2); 279 | /// ... 280 | /// \endcode 281 | /// \sa ADS7828::address() 282 | ADS7828::ADS7828(uint8_t address) 283 | { 284 | init(address, (DIFFERENTIAL | REFERENCE_OFF | ADC_OFF), 285 | DEFAULT_CHANNEL_MASK, DEFAULT_MIN_SCALE, DEFAULT_MAX_SCALE); 286 | } 287 | 288 | 289 | /// \overload ADS7828::ADS7828(uint8_t address, uint8_t options) 290 | /// \param options command byte bits SD, PD1, PD0 291 | /// \par Usage: 292 | /// \code 293 | /// ... 294 | /// // device address 0, differential inputs, ref/ADC ON between conversions 295 | /// ADS7828 adc0(0, DIFFERENTIAL | REFERENCE_ON | ADC_ON); 296 | /// 297 | /// // device address 1, single-ended inputs, ref/ADC OFF between conversions 298 | /// ADS7828 adc1(1, SINGLE_ENDED | REFERENCE_OFF | ADC_OFF); 299 | /// 300 | /// // device address 2, single-ended inputs, ref/ADC ON between conversions 301 | /// ADS7828 adc2(2, SINGLE_ENDED | REFERENCE_ON | ADC_ON); 302 | /// ... 303 | /// \endcode 304 | /// \sa ADS7828Channel::commandByte() 305 | ADS7828::ADS7828(uint8_t address, uint8_t options) 306 | { 307 | init(address, options, DEFAULT_CHANNEL_MASK, DEFAULT_MIN_SCALE, 308 | DEFAULT_MAX_SCALE); 309 | } 310 | 311 | 312 | /// \overload ADS7828::ADS7828(uint8_t address, uint8_t options, uint8_t channelMask) 313 | /// \param channelMask bit positions containing a 1 represent channels that 314 | /// are to be read via update() / updateAll() 315 | /// \par Usage: 316 | /// \code 317 | /// ... 318 | /// // device address 0, update all channels via updateAll() (bits 7..0 are set) 319 | /// ADS7828 adc0(0, 0, 0xFF); 320 | /// 321 | /// // device address 1, update channels 0..3 via updateAll() (bits 3..0 are set) 322 | /// ADS7828 adc1(1, 0, 0b00001111); 323 | /// 324 | /// // device address 2, update channels 0, 1, 2, 7 via updateAll() (bits 7, 2, 1, 0 are set) 325 | /// ADS7828 adc2(2, 0, 0b10000111); 326 | /// ... 327 | /// \endcode 328 | /// \sa ADS7828::channelMask 329 | ADS7828::ADS7828(uint8_t address, uint8_t options, uint8_t channelMask) 330 | { 331 | init(address, options, channelMask, DEFAULT_MIN_SCALE, DEFAULT_MAX_SCALE); 332 | } 333 | 334 | 335 | /// \overload ADS7828::ADS7828(uint8_t address, uint8_t options, uint8_t channelMask, uint16_t min, uint16_t max) 336 | /// \param min minimum scaling value applied to value() 337 | /// \param max maximum scaling value applied to value() 338 | /// \par Usage: 339 | /// \code 340 | /// ... 341 | /// // device address 2, channel default minScale 0, maxScale 100 342 | /// ADS7828 adc(2, 0, DEFAULT_CHANNEL_MASK, 0, 100); 343 | /// ... 344 | /// \endcode 345 | /// \sa ADS7828Channel::minScale, ADS7828Channel::maxScale 346 | ADS7828::ADS7828(uint8_t address, uint8_t options, uint8_t channelMask, 347 | uint16_t min, uint16_t max) 348 | { 349 | init(address, options, channelMask, min, max); 350 | } 351 | 352 | 353 | /// Device address as defined by pins A1, A0 354 | /// \retval 0x00 A1=0, A0=0 355 | /// \retval 0x01 A1=0, A0=1 356 | /// \retval 0x02 A1=1, A0=0 357 | /// \retval 0x03 A1=1, A0=1 358 | /// \par Usage: 359 | /// \code 360 | /// ... 361 | /// ADS7828 adc(3); 362 | /// uint8_t deviceAddress = adc.address(); 363 | /// ... 364 | /// \endcode 365 | uint8_t ADS7828::address() 366 | { 367 | return address_; 368 | } 369 | 370 | 371 | /// Return pointer to channel object. 372 | /// \param ch channel number (0..7) 373 | /// \return pointer to ADS7828Channel object 374 | /// \par Usage: 375 | /// \code 376 | /// ... 377 | /// ADS7828 adc(0); 378 | /// ADS7828Channel* temperature = adc.channel(0); 379 | /// ... 380 | /// \endcode 381 | ADS7828Channel* ADS7828::channel(uint8_t ch) 382 | { 383 | return &channels_[ch & 0x07]; 384 | } 385 | 386 | 387 | /// Return command byte for device object (PD1 PD0 bits only). 388 | /// \optional This function is for testing and troubleshooting. 389 | /// \retval 0x00 Power Down Between A/D Converter Conversions 390 | /// \retval 0x04 Internal Reference OFF and A/D Converter ON 391 | /// \retval 0x08 Internal Reference ON and A/D Converter OFF 392 | /// \retval 0x0C Internal Reference ON and A/D Converter ON 393 | /// \par Usage: 394 | /// \code 395 | /// ... 396 | /// ADS7828 adc(0); 397 | /// uint8_t command = adc.commandByte(); 398 | /// ... 399 | /// \endcode 400 | uint8_t ADS7828::commandByte() 401 | { 402 | return commandByte_; 403 | } 404 | 405 | 406 | /// Initiate communication with device. 407 | /// \optional This function is for testing and troubleshooting and 408 | /// can be used to determine whether a device is available (similar to 409 | /// the TCP/IP \c ping \c command). 410 | /// \retval 0 success 411 | /// \retval 1 length too long for buffer 412 | /// \retval 2 address send, NACK received (device not on bus) 413 | /// \retval 3 data send, NACK received 414 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 415 | /// \par Usage: 416 | /// \code 417 | /// ... 418 | /// ADS7828 adc(3); 419 | /// // test whether device is available 420 | /// uint8_t status = adc.start(); 421 | /// ... 422 | /// \endcode 423 | uint8_t ADS7828::start() 424 | { 425 | return start(0); 426 | } 427 | 428 | 429 | /// \overload ADS7828::start(uint8_t ch) 430 | /// \optional This function is for testing and troubleshooting. 431 | /// \param ch channel number (0..7) 432 | /// \retval 0 success 433 | /// \retval 1 length too long for buffer 434 | /// \retval 2 address send, NACK received (device not on bus) 435 | /// \retval 3 data send, NACK received 436 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 437 | /// \par Usage: 438 | /// \code 439 | /// ... 440 | /// ADS7828 adc(0); 441 | /// // test whether device is available (channel 3 A/D conversion started) 442 | /// uint8_t status = adc.start(3); 443 | /// ... 444 | /// \endcode 445 | uint8_t ADS7828::start(uint8_t ch) 446 | { 447 | return start(address_, commandByte_ | channel(ch)->commandByte()); 448 | } 449 | 450 | 451 | /// Update all unmasked channels on device. 452 | /// \required Call this or one of the update() / updateAll() functions 453 | /// from within \c loop() in order to read data from device(s). 454 | /// \return quantity of channels updated (0..8) 455 | /// \par Usage: 456 | /// \code 457 | /// ... 458 | /// ADS7828 adc(0); 459 | /// ... 460 | /// void loop() 461 | /// { 462 | /// ... 463 | /// // update device 0, all unmasked channels 464 | /// uint8_t quantity = adc.update(); 465 | /// ... 466 | /// } 467 | /// ... 468 | /// \endcode 469 | uint8_t ADS7828::update() 470 | { 471 | return update(this); 472 | } 473 | 474 | 475 | /// \overload uint8_t ADS7828::update(uint8_t ch) 476 | /// \required Call this or one of the update() / updateAll() functions 477 | /// from within \c loop() in order to read data from device(s). 478 | /// \param ch channel number (0..7) 479 | /// \retval 0 success 480 | /// \retval 1 length too long for buffer 481 | /// \retval 2 address send, NACK received (device not on bus) 482 | /// \retval 3 data send, NACK received 483 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 484 | /// \par Usage: 485 | /// \code 486 | /// ... 487 | /// ADS7828 adc(0); 488 | /// ... 489 | /// void loop() 490 | /// { 491 | /// ... 492 | /// // update device 0, channel 3 493 | /// uint8_t status = adc.update(3); 494 | /// ... 495 | /// } 496 | /// ... 497 | /// \endcode 498 | uint8_t ADS7828::update(uint8_t ch) 499 | { 500 | return update(this, ch); 501 | } 502 | 503 | 504 | // ____________________________________________ STATIC PUBLIC MEMBER FUNCTIONS 505 | /// Enable I2C communication. 506 | /// \required Call from within \c setup()\c to enable I2C communication. 507 | /// \par Usage: 508 | /// \code 509 | /// ... 510 | /// void setup() 511 | /// { 512 | /// // enable I2C communication 513 | /// ADS7828::begin(); 514 | /// } 515 | /// ... 516 | /// \endcode 517 | void ADS7828::begin() 518 | { 519 | Wire.begin(); 520 | } 521 | 522 | 523 | /// Return pointer to device object. 524 | /// \param address device address (0..3) 525 | /// \return pointer to ADS7828 object 526 | /// \par Usage: 527 | /// \code 528 | /// ... 529 | /// // device 2 pointer 530 | /// ADS7828* device2 = ADS7828::device(2); 531 | /// ... 532 | /// \endcode 533 | ADS7828* ADS7828::device(uint8_t address) 534 | { 535 | return devices_[address & 0x03]; 536 | } 537 | 538 | 539 | /// Update all unmasked channels on all registered devices. 540 | /// \required Call this or one of the update() functions 541 | /// from within \c loop() in order to read data from device(s). 542 | /// This is the most commonly-used device update function. 543 | /// \return quantity of channels updated (0..32) 544 | /// \par Usage: 545 | /// \code 546 | /// ... 547 | /// void loop() 548 | /// { 549 | /// ... 550 | /// // update all registered ADS7828 devices/unmasked channels 551 | /// uint8_t quantity = ADS7828::updateAll(); 552 | /// ... 553 | /// } 554 | /// ... 555 | /// \endcode 556 | uint8_t ADS7828::updateAll() 557 | { 558 | uint8_t a, ch, count = 0; 559 | for (a = 0; a < 4; a++) 560 | { 561 | if (0 != devices_[a]) count += update(devices_[a]); 562 | } 563 | return count; 564 | } 565 | 566 | 567 | // __________________________________________________ PRIVATE MEMBER FUNCTIONS 568 | /// Common code for constructors. 569 | /// \param address device address (0..3) 570 | /// \param options command byte bits SD, PD1, PD0 571 | /// \param channelMask bit positions containing a 1 represent channels that 572 | /// are to be read via update() / updateAll() 573 | /// \param min minimum scaling value applied to value() 574 | /// \param max maximum scaling value applied to value() 575 | void ADS7828::init(uint8_t address, uint8_t options, 576 | uint8_t channelMask, uint16_t min, uint16_t max) 577 | { 578 | this->address_ = address & 0x03; // A1 A0 bits 579 | this->commandByte_ = options & 0x0C; // PD1 PD0 bits 580 | this->channelMask = channelMask; 581 | for (uint8_t ch = 0; ch < 8; ch++) 582 | { 583 | channels_[ch] = ADS7828Channel(this, ch, options, min, max); 584 | } 585 | this->devices_[address_] = this; 586 | } 587 | 588 | 589 | /// Request and receive data from most-recent A/D conversion from device. 590 | /// \return 16-bit zero-padded word (12 data bits D11..D0) 591 | uint16_t ADS7828::read() 592 | { 593 | return read(address_); 594 | } 595 | 596 | 597 | // ___________________________________________ STATIC PRIVATE MEMBER FUNCTIONS 598 | /// Request and receive data from most-recent A/D conversion from device. 599 | /// \param address device address (0..3) 600 | /// \return 16-bit zero-padded word (12 data bits D11..D0) 601 | uint16_t ADS7828::read(uint8_t address) 602 | { 603 | Wire.requestFrom(BASE_ADDRESS_ | (address & 0x03), 2); 604 | return word(Wire.read(), Wire.read()); 605 | } 606 | 607 | 608 | /// Initiate communication with device. 609 | /// \param address device address (0..3) 610 | /// \param command command byte (0x00..0xFC) 611 | /// \retval 0 success 612 | /// \retval 1 length too long for buffer 613 | /// \retval 2 address send, NACK received (device not on bus) 614 | /// \retval 3 data send, NACK received 615 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 616 | uint8_t ADS7828::start(uint8_t address, uint8_t command) 617 | { 618 | Wire.beginTransmission(BASE_ADDRESS_ | (address & 0x03)); 619 | Wire.write((uint8_t) command); 620 | return Wire.endTransmission(); 621 | } 622 | 623 | 624 | /// Initiate communication with device. 625 | /// \param device pointer to device object 626 | /// \return quantity of channels updated (0..8) 627 | uint8_t ADS7828::update(ADS7828* device) 628 | { 629 | if (0 == device) device = devices_[0]; 630 | uint8_t ch, count = 0; 631 | for (ch = 0; ch < 8; ch++) 632 | { 633 | if (bitRead(device->channelMask, ch)) 634 | { 635 | if (0 == update(device, ch)) count++; 636 | } 637 | } 638 | return count; 639 | } 640 | 641 | 642 | /// Initiate communication with device. 643 | /// \param device pointer to device object 644 | /// \param ch channel number (0..7) 645 | /// \retval 0 success 646 | /// \retval 1 length too long for buffer 647 | /// \retval 2 address send, NACK received (device not on bus) 648 | /// \retval 3 data send, NACK received 649 | /// \retval 4 other twi error (lost bus arbitration, bus error, ...) 650 | uint8_t ADS7828::update(ADS7828* device, uint8_t ch) 651 | { 652 | if (0 == device) device = devices_[0]; 653 | uint8_t status = device->start(ch); 654 | if (0 == status) device->channel(ch)->newSample(device->read()); 655 | return status; 656 | } 657 | 658 | 659 | // _________________________________________________ STATIC PRIVATE ATTRIBTUES 660 | ADS7828* ADS7828::devices_[] = {}; 661 | -------------------------------------------------------------------------------- /src/i2c_adc_ads7828.h: -------------------------------------------------------------------------------- 1 | /// \file 2 | /// Arduino library for TI ADS7828 I2C A/D converter. 3 | /* 4 | 5 | i2c_adc_ads7828.h - Arduino library for TI ADS7828 I2C A/D converter 6 | 7 | Library:: i2c_adc_ads7828 8 | Author:: Doc Walker <4-20ma@wvfans.net> 9 | 10 | Copyright:: 2009-2016 Doc Walker 11 | 12 | Licensed under the Apache License, Version 2.0 (the "License"); 13 | you may not use this file except in compliance with the License. 14 | You may obtain a copy of the License at 15 | 16 | http://www.apache.org/licenses/LICENSE-2.0 17 | 18 | Unless required by applicable law or agreed to in writing, software 19 | distributed under the License is distributed on an "AS IS" BASIS, 20 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 | See the License for the specific language governing permissions and 22 | limitations under the License. 23 | 24 | */ 25 | 26 | 27 | /// \mainpage Arduino library for TI ADS7828 I2C A/D converter. 28 | /// \version \verbinclude VERSION 29 | /// \date 27 Sep 2016 30 | /// \par Source Code Repository: 31 | /// https://github.com/4-20ma/i2c_adc_ads7828 32 | /// \par Programming Style Guidelines: 33 | /// http://geosoft.no/development/cppstyle.html 34 | /// 35 | /// \par Features 36 | /// The ADS7828 is a single-supply, low-power, 12-bit data acquisition 37 | /// device that features a serial I2C interface and an 8-channel 38 | /// multiplexer. The Analog-to-Digital (A/D) converter features a 39 | /// sample-and-hold amplifier and internal, asynchronous clock. The 40 | /// combination of an I2C serial, 2-wire interface and micropower 41 | /// consumption makes the ADS7828 ideal for applications requiring the A/D 42 | /// converter to be close to the input source in remote locations and for 43 | /// applications requiring isolation. The ADS7828 is available in a TSSOP-16 44 | /// package. 45 | /// \par Schematic 46 | /// \verbinclude SCHEMATIC 47 | /// \par Caveats 48 | /// Conforms to Arduino IDE 1.5 Library Specification v2.1 which requires 49 | /// Arduino IDE >= 1.5. 50 | /// \par Support 51 | /// Please [submit an issue](https://github.com/4-20ma/i2c_adc_ads7828/ 52 | /// issues) for all questions, bug reports, and feature requests. Email 53 | /// requests will be politely redirected to the issue tracker so others may 54 | /// contribute to the discussion and requestors get a more timely response. 55 | /// \author Doc Walker ([4-20ma@wvfans.net](mailto:4-20ma@wvfans.net)) 56 | /// \copyright 2009-2016 Doc Walker 57 | /// \par License 58 | ///
 59 | /// Licensed under the Apache License, Version 2.0 (the "License");
 60 | /// you may not use this file except in compliance with the License.
 61 | /// You may obtain a copy of the License at
 62 | /// 
 63 | ///     http://www.apache.org/licenses/LICENSE-2.0
 64 | /// 
 65 | /// Unless required by applicable law or agreed to in writing, software
 66 | /// distributed under the License is distributed on an "AS IS" BASIS,
 67 | /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 68 | /// See the License for the specific language governing permissions and
 69 | /// limitations under the License.
 70 | /// 
71 | 72 | 73 | #ifndef i2c_adc_ads7828_h 74 | #define i2c_adc_ads7828_h 75 | 76 | // _________________________________________________________ STANDARD INCLUDES 77 | // include types & constants of Wiring core API 78 | #include "Arduino.h" 79 | 80 | 81 | // __________________________________________________________ PROJECT INCLUDES 82 | // include twi/i2c library 83 | #include 84 | 85 | 86 | // ____________________________________________________________ UTILITY MACROS 87 | 88 | 89 | // _________________________________________________________________ CONSTANTS 90 | /// Configure channels to use differential inputs (Command byte SD=0). 91 | /// Use either \ref DIFFERENTIAL or \ref SINGLE_ENDED in ADS7828 92 | /// constructor; default is \ref DIFFERENTIAL. 93 | /// \par Usage: 94 | /// \code 95 | /// ... 96 | /// // address 0, differential inputs, ref/ADC OFF between conversions 97 | /// ADS7828 adc0(0, DIFFERENTIAL | REFERENCE_OFF | ADC_OFF); 98 | /// ... 99 | /// \endcode 100 | /// \relates ADS7828 101 | static const uint8_t DIFFERENTIAL = 0 << 7; // SD == 0 102 | 103 | 104 | /// Configure channels to use single-ended inputs (Command byte SD=1). 105 | /// Use either \ref DIFFERENTIAL or \ref SINGLE_ENDED in ADS7828 106 | /// constructor; default is \ref DIFFERENTIAL. 107 | /// \par Usage: 108 | /// \code 109 | /// ... 110 | /// // address 1, single-ended inputs, ref/ADC OFF between conversions 111 | /// ADS7828 adc1(1, SINGLE_ENDED | REFERENCE_OFF | ADC_OFF); 112 | /// ... 113 | /// \endcode 114 | /// \relates ADS7828 115 | static const uint8_t SINGLE_ENDED = 1 << 7; // SD == 1 116 | 117 | 118 | /// Configure channels to turn internal reference OFF between conversions (Command byte PD1=0). 119 | /// Use either \ref REFERENCE_OFF or \ref REFERENCE_ON in ADS7828 120 | /// constructor; default is \ref REFERENCE_OFF. 121 | /// \par Usage: 122 | /// \code 123 | /// ... 124 | /// // address 0, differential inputs, ref/ADC OFF between conversions 125 | /// ADS7828 adc0(0, DIFFERENTIAL | REFERENCE_OFF | ADC_OFF); 126 | /// ... 127 | /// \endcode 128 | /// \relates ADS7828 129 | static const uint8_t REFERENCE_OFF = 0 << 3; // PD1 == 0 130 | 131 | 132 | /// Configure channels to turn internal reference ON between conversions (Command byte PD1=1). 133 | /// Use either \ref REFERENCE_OFF or \ref REFERENCE_ON in ADS7828 134 | /// constructor; default is \ref REFERENCE_OFF. 135 | /// \par Usage: 136 | /// \code 137 | /// ... 138 | /// // address 2, differential inputs, ref ON/ADC OFF between conversions 139 | /// ADS7828 adc2(2, DIFFERENTIAL | REFERENCE_ON | ADC_OFF); 140 | /// ... 141 | /// \endcode 142 | /// \relates ADS7828 143 | static const uint8_t REFERENCE_ON = 1 << 3; // PD1 == 1 144 | 145 | 146 | /// Configure channels to turn A/D converter OFF between conversions (Command byte PD0=0). 147 | /// Use either \ref ADC_OFF or \ref ADC_ON in ADS7828 148 | /// constructor; default is \ref ADC_OFF. 149 | /// \par Usage: 150 | /// \code 151 | /// ... 152 | /// // address 0, differential inputs, ref/ADC OFF between conversions 153 | /// ADS7828 adc0(0, DIFFERENTIAL | REFERENCE_OFF | ADC_OFF); 154 | /// ... 155 | /// \endcode 156 | /// \relates ADS7828 157 | static const uint8_t ADC_OFF = 0 << 2; // PD0 == 0 158 | 159 | 160 | /// Configure channels to turn A/D converter ON between conversions (Command byte PD0=1). 161 | /// Use either \ref ADC_OFF or \ref ADC_ON in ADS7828 162 | /// constructor; default is \ref ADC_OFF. 163 | /// \par Usage: 164 | /// \code 165 | /// ... 166 | /// // address 3 , differential inputs, ref OFF/ADC ON between conversions 167 | /// ADS7828 adc3(3, DIFFERENTIAL | REFERENCE_OFF | ADC_ON); 168 | /// ... 169 | /// \endcode 170 | /// \relates ADS7828 171 | static const uint8_t ADC_ON = 1 << 2; // PD0 == 1 172 | 173 | 174 | /// Default channel mask used in ADS7828 constructor. 175 | /// \relates ADS7828 176 | static const uint8_t DEFAULT_CHANNEL_MASK = 0xFF; 177 | 178 | 179 | /// Default scaling minimum value used in ADS7828 constructor. 180 | /// \relates ADS7828 181 | static const uint16_t DEFAULT_MIN_SCALE = 0; 182 | 183 | 184 | /// Default scaling maximum value used in ADS7828 constructor. 185 | /// \relates ADS7828 186 | static const uint16_t DEFAULT_MAX_SCALE = 0xFFF; 187 | 188 | 189 | // _________________________________________________________ CLASS DEFINITIONS 190 | class ADS7828; 191 | class ADS7828Channel 192 | { 193 | public: 194 | // ............................................... public member functions 195 | ADS7828Channel() {}; 196 | ADS7828Channel(ADS7828* const, uint8_t, uint8_t, uint16_t, uint16_t); 197 | uint8_t commandByte(); 198 | ADS7828* device(); 199 | uint8_t id(); 200 | uint8_t index(); 201 | void newSample(uint16_t); 202 | void reset(); 203 | uint16_t sample(); 204 | uint8_t start(); 205 | uint16_t total(); 206 | uint8_t update(); 207 | uint16_t value(); 208 | 209 | // ........................................ static public member functions 210 | 211 | // ..................................................... public attributes 212 | /// Maximum value of moving average (defaults to 0x0FFF). 213 | /// \par Usage: 214 | /// \code 215 | /// ... 216 | /// ADS7828 device(0); 217 | /// ADS7828Channel* temperature = device.channel(0); 218 | /// uint16_t old = temperature->maxScale; // get current value and/or 219 | /// temperature->maxScale = 100; // set new value 220 | /// ... 221 | /// \endcode 222 | uint16_t maxScale; 223 | 224 | /// Minimum value of moving average (defaults to 0x0000). 225 | /// \par Usage: 226 | /// \code 227 | /// ... 228 | /// ADS7828 device(0); 229 | /// ADS7828Channel* temperature = device.channel(0); 230 | /// uint16_t old = temperature->minScale; // get current value and/or 231 | /// temperature->minScale = 0; // set new value 232 | /// ... 233 | /// \endcode 234 | uint16_t minScale; 235 | 236 | // .............................................. static public attributes 237 | 238 | private: 239 | // .............................................. private member functions 240 | 241 | // ....................................... static private member functions 242 | 243 | // .................................................... private attributes 244 | /// Command byte for channel object (SD C2 C1 C0 bits only). 245 | uint8_t commandByte_; 246 | 247 | /// Pointer to parent device object. 248 | ADS7828* device_; 249 | 250 | /// Index position within moving average array. 251 | uint8_t index_; 252 | 253 | /// Array of (unscaled) sample values. 254 | /// \note Bit shift must match \ref MOVING_AVERAGE_BITS_. 255 | uint16_t samples_[1 << 4]; 256 | 257 | /// (Unscaled) running total of moving average array elements. 258 | uint16_t total_; 259 | 260 | // ............................................. static private attributes 261 | /// Quantity of samples to be averaged = 262 | /// 2\ref MOVING_AVERAGE_BITS_. 263 | /// \note \ref MOVING_AVERAGE_BITS_ must match \ref samples_ bit shift. 264 | static const uint8_t MOVING_AVERAGE_BITS_ = 4; 265 | }; 266 | 267 | 268 | class ADS7828 269 | { 270 | public: 271 | // ............................................... public member functions 272 | ADS7828(uint8_t); 273 | ADS7828(uint8_t, uint8_t); 274 | ADS7828(uint8_t, uint8_t, uint8_t); 275 | ADS7828(uint8_t, uint8_t, uint8_t, uint16_t, uint16_t); 276 | uint8_t address(); 277 | ADS7828Channel* channel(uint8_t); 278 | uint8_t commandByte(); 279 | uint8_t start(); 280 | uint8_t start(uint8_t); 281 | uint8_t update(); // single device, all unmasked channel 282 | uint8_t update(uint8_t); // single device, single channel 283 | 284 | // ........................................ static public member functions 285 | static void begin(); 286 | static ADS7828* device(uint8_t); 287 | static uint8_t updateAll(); // all devices, all unmasked channels 288 | 289 | // ..................................................... public attributes 290 | /// Each bit position containing a 1 represents a channel that is to be 291 | /// read via update() / updateAll(). 292 | uint8_t channelMask; // mask of active channels 293 | 294 | // .............................................. static public attributes 295 | 296 | private: 297 | // .............................................. private member functions 298 | void init(uint8_t, uint8_t, uint8_t, uint16_t, uint16_t); 299 | uint16_t read(); 300 | 301 | // ....................................... static private member functions 302 | static uint16_t read(uint8_t); 303 | static uint8_t start(uint8_t, uint8_t); 304 | static uint8_t update(ADS7828*); // single device, all unmasked channels 305 | static uint8_t update(ADS7828*, uint8_t); // single device, single channel 306 | 307 | // .................................................... private attributes 308 | /// Device address as defined by pins A1, A0 309 | uint8_t address_; 310 | 311 | /// Array of channel objects. 312 | ADS7828Channel channels_[8]; 313 | 314 | /// Command byte for device object (PD1 PD0 bits only). 315 | uint8_t commandByte_; 316 | 317 | // ............................................. static private attributes 318 | /// Array of pointers to registered device objects. 319 | static ADS7828* devices_[4]; 320 | 321 | /// Factory pre-set slave address. 322 | static const uint8_t BASE_ADDRESS_ = 0x48; 323 | }; 324 | #endif 325 | /// \example examples/one_device/one_device.ino 326 | /// \example examples/two_devices/two_devices.ino 327 | --------------------------------------------------------------------------------