Preliminary main mbed library for nexpaq development

Committer:
nexpaq
Date:
Fri Nov 04 20:27:58 2016 +0000
Revision:
0:6c56fb4bc5f0
Moving to library for sharing updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nexpaq 0:6c56fb4bc5f0 1 # Committing changes to mbedmicro/mbed
nexpaq 0:6c56fb4bc5f0 2
nexpaq 0:6c56fb4bc5f0 3 * Our current branching model is very simple. We are using ```master``` branch to merge all pull requests.
nexpaq 0:6c56fb4bc5f0 4 * Based on stable ```SHA``` version of ```master``` branch we decide to release and at the same time ```tag``` our build release.
nexpaq 0:6c56fb4bc5f0 5 * Our current release versioning follows simple integer version: ```94```, ```95```, ```96``` etc.
nexpaq 0:6c56fb4bc5f0 6
nexpaq 0:6c56fb4bc5f0 7 # Committer Guide
nexpaq 0:6c56fb4bc5f0 8
nexpaq 0:6c56fb4bc5f0 9 ## How to decide what release(s) should be patched
nexpaq 0:6c56fb4bc5f0 10 This section provides a guide to help a committer decide the specific base branch that a change set should be merged into.
nexpaq 0:6c56fb4bc5f0 11
nexpaq 0:6c56fb4bc5f0 12 Currently our default branch is ```master``` branch. All pull requests should be created against ```master``` branch.
nexpaq 0:6c56fb4bc5f0 13 mbed SDK is released currently on master branch under certain tag name (see [Git tagging basics]( http://git-scm.com/book/en/v2/Git-Basics-Tagging)). You can see mbed SDK tags and switch between them to for example go back to previous mbed SDK release.
nexpaq 0:6c56fb4bc5f0 14 ```
nexpaq 0:6c56fb4bc5f0 15 $ git tag
nexpaq 0:6c56fb4bc5f0 16 ```
nexpaq 0:6c56fb4bc5f0 17
nexpaq 0:6c56fb4bc5f0 18 Please note: mebd SDK ```master``` branch's ```HEAD``` is our latest code and may not be as stable as you expect. We are putting our best effort to run regression testing (in-house) against pull requests and latest code.
nexpaq 0:6c56fb4bc5f0 19 Each commit to ```master``` will trigger [GitHub's Travis Continuous Integration](https://travis-ci.org/mbedmicro/mbed/builds).
nexpaq 0:6c56fb4bc5f0 20
nexpaq 0:6c56fb4bc5f0 21 ### Pull request
nexpaq 0:6c56fb4bc5f0 22 Please send pull requests with changes which are:
nexpaq 0:6c56fb4bc5f0 23 * Complete (your code will compile and perform as expected).
nexpaq 0:6c56fb4bc5f0 24 * Tested on hardware.
nexpaq 0:6c56fb4bc5f0 25 * You can use included mbed SDK test suite to perform testing. See TESTING.md.
nexpaq 0:6c56fb4bc5f0 26 * If your change, feature do not have a test case included please add one (or more) to cover new functionality.
nexpaq 0:6c56fb4bc5f0 27 * If you can't test your functionality describe why.
nexpaq 0:6c56fb4bc5f0 28 * Documented source code:
nexpaq 0:6c56fb4bc5f0 29 * New, modified functions have descriptive comments.
nexpaq 0:6c56fb4bc5f0 30 * You follow coding rules and styles provided by mbed SDK project.
nexpaq 0:6c56fb4bc5f0 31 * Documented pull request description:
nexpaq 0:6c56fb4bc5f0 32 * Description of changes is added - explain your change / enhancement.
nexpaq 0:6c56fb4bc5f0 33 * References to existing issues, other pull requests or forum discussions are included.
nexpaq 0:6c56fb4bc5f0 34 * Test results are added.
nexpaq 0:6c56fb4bc5f0 35
nexpaq 0:6c56fb4bc5f0 36 After you send us your pull request our Gate Keeper will change the state of pull request to:
nexpaq 0:6c56fb4bc5f0 37 • ``` enhancement``` or ```bug``` when pull request creates new improvement or fixed issue.
nexpaq 0:6c56fb4bc5f0 38 Than we will set for you labels:
nexpaq 0:6c56fb4bc5f0 39 • ```review``` to let you know your pull request is under review and you can expect review related comments from us.
nexpaq 0:6c56fb4bc5f0 40 • ```in progress``` when you pull request requires some additional change which will for now block this pull request from merging.
nexpaq 0:6c56fb4bc5f0 41 At the end we will remove ```review``` label and merge your change if everything goes well.
nexpaq 0:6c56fb4bc5f0 42
nexpaq 0:6c56fb4bc5f0 43 ## C++ coding rules & coding guidelines
nexpaq 0:6c56fb4bc5f0 44 ### Rules
nexpaq 0:6c56fb4bc5f0 45 * The mbed SDK code follows K&R style (Reference: [K&R style](http://en.wikipedia.org/wiki/Indent_style#K.26R_style)) with at least 2 exceptions which can be found in the list below the code snippet:
nexpaq 0:6c56fb4bc5f0 46
nexpaq 0:6c56fb4bc5f0 47 ```c++
nexpaq 0:6c56fb4bc5f0 48 static const PinMap PinMap_ADC[] = {
nexpaq 0:6c56fb4bc5f0 49 {PTC2, ADC0_SE4b, 0},
nexpaq 0:6c56fb4bc5f0 50 {NC , NC , 0}
nexpaq 0:6c56fb4bc5f0 51 };
nexpaq 0:6c56fb4bc5f0 52
nexpaq 0:6c56fb4bc5f0 53 uint32_t adc_function(analogin_t *obj, uint32_t options)
nexpaq 0:6c56fb4bc5f0 54 {
nexpaq 0:6c56fb4bc5f0 55 uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT;
nexpaq 0:6c56fb4bc5f0 56 switch (options) {
nexpaq 0:6c56fb4bc5f0 57 case 1:
nexpaq 0:6c56fb4bc5f0 58 timeout = 6;
nexpaq 0:6c56fb4bc5f0 59 break;
nexpaq 0:6c56fb4bc5f0 60 default:
nexpaq 0:6c56fb4bc5f0 61 timeout = 10;
nexpaq 0:6c56fb4bc5f0 62 break;
nexpaq 0:6c56fb4bc5f0 63 }
nexpaq 0:6c56fb4bc5f0 64
nexpaq 0:6c56fb4bc5f0 65 while (!adc_hal_is_conversion_completed(instance, 0)) {
nexpaq 0:6c56fb4bc5f0 66 if (timeout == 0) {
nexpaq 0:6c56fb4bc5f0 67 break;
nexpaq 0:6c56fb4bc5f0 68 } else {
nexpaq 0:6c56fb4bc5f0 69 timeout--;
nexpaq 0:6c56fb4bc5f0 70 }
nexpaq 0:6c56fb4bc5f0 71 }
nexpaq 0:6c56fb4bc5f0 72
nexpaq 0:6c56fb4bc5f0 73 if (obj->adc == ADC_CHANNEL0) {
nexpaq 0:6c56fb4bc5f0 74 adc_measure_channel(instance);
nexpaq 0:6c56fb4bc5f0 75 adc_stop_channel(instance);
nexpaq 0:6c56fb4bc5f0 76 } else {
nexpaq 0:6c56fb4bc5f0 77 error("channel not available");
nexpaq 0:6c56fb4bc5f0 78 }
nexpaq 0:6c56fb4bc5f0 79
nexpaq 0:6c56fb4bc5f0 80 #if DEBUG
nexpaq 0:6c56fb4bc5f0 81 for (uint32_t i = 0; i < 10; i++) {
nexpaq 0:6c56fb4bc5f0 82 printf("Loop : %d", i);
nexpaq 0:6c56fb4bc5f0 83 }
nexpaq 0:6c56fb4bc5f0 84 #endif
nexpaq 0:6c56fb4bc5f0 85 return adc_hal_get_conversion_value(instance, 0);
nexpaq 0:6c56fb4bc5f0 86 }
nexpaq 0:6c56fb4bc5f0 87 ```
nexpaq 0:6c56fb4bc5f0 88 * Indentation - 4 spaces. Please do not use tabs!
nexpaq 0:6c56fb4bc5f0 89 * Braces - K&R, except for functions where the opening brace is on the new line.
nexpaq 0:6c56fb4bc5f0 90 * 1 TBS - use braces for statements ```if```, ```else```, ```while```, ```for``` (exception from K&R) Reference: [1TBS](http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS)).
nexpaq 0:6c56fb4bc5f0 91 * One line per statement.
nexpaq 0:6c56fb4bc5f0 92 * Preprocessor macro starts at the beginning of a new line, the code inside is indented accordingly the code above it.
nexpaq 0:6c56fb4bc5f0 93 * Cases within switch are indented (exception from K&R).
nexpaq 0:6c56fb4bc5f0 94 * Space after statements if, while, for, switch, same applies to binary and ternary operators.
nexpaq 0:6c56fb4bc5f0 95 * Each line has preferably at most 120 characters.
nexpaq 0:6c56fb4bc5f0 96 * For pointers, ```*``` is adjacent to a name (analogin_t *obj).
nexpaq 0:6c56fb4bc5f0 97 * Don't leave trailing spaces at the end of lines.
nexpaq 0:6c56fb4bc5f0 98 * Empty lines should have no trailing spaces.
nexpaq 0:6c56fb4bc5f0 99 * Unix line endings are default option for files.
nexpaq 0:6c56fb4bc5f0 100 * Use capital letters for macros.
nexpaq 0:6c56fb4bc5f0 101 * A file should have an empty line at the end.
nexpaq 0:6c56fb4bc5f0 102 and:
nexpaq 0:6c56fb4bc5f0 103 * We are not using C++11 yet so do not write code compliant to this standard.
nexpaq 0:6c56fb4bc5f0 104 * We are not using libraries like ```BOOST``` so please so not include any ```BOOST``` headers to your code.
nexpaq 0:6c56fb4bc5f0 105 * C++ & templates: please take under consideration templates are not fully supported by cross-compilers. You may have difficulties compiling template code few cross-compilers so make sure your template code compilers for more than one compiler.
nexpaq 0:6c56fb4bc5f0 106
nexpaq 0:6c56fb4bc5f0 107 ### Naming conventions
nexpaq 0:6c56fb4bc5f0 108 Classes:
nexpaq 0:6c56fb4bc5f0 109 * Begins with a capital letter, and each word in it begins also with a capital letter (```AnalogIn```, ```BusInOut```).
nexpaq 0:6c56fb4bc5f0 110 * Methods contain small letters, distinct words separated by underscore.
nexpaq 0:6c56fb4bc5f0 111 * Private members starts with an underscore.
nexpaq 0:6c56fb4bc5f0 112
nexpaq 0:6c56fb4bc5f0 113 User defined types (typedef):
nexpaq 0:6c56fb4bc5f0 114 * Structures - suffix ```_t``` - to denote it is user defined type
nexpaq 0:6c56fb4bc5f0 115 * Enumeration - the type name and values name - same naming convention as classes (e.g ```MyNewEnum```)
nexpaq 0:6c56fb4bc5f0 116
nexpaq 0:6c56fb4bc5f0 117 Functions:
nexpaq 0:6c56fb4bc5f0 118 * Contain lower case letters (as methods within classes)
nexpaq 0:6c56fb4bc5f0 119 * Distinct words separated by underscore (```wait_ms```, ```read_u16```)
nexpaq 0:6c56fb4bc5f0 120 * Please make sure that in your module all functions have unique prefix so when your module is compiled with other modules function names (and e.g. extern global variable names) are not in naming conflict.
nexpaq 0:6c56fb4bc5f0 121
nexpaq 0:6c56fb4bc5f0 122 Example code look&feel:
nexpaq 0:6c56fb4bc5f0 123 ```c++
nexpaq 0:6c56fb4bc5f0 124 #define ADC_INSTANCE_SHIFT 8
nexpaq 0:6c56fb4bc5f0 125
nexpaq 0:6c56fb4bc5f0 126 class AnalogIn {
nexpaq 0:6c56fb4bc5f0 127 public:
nexpaq 0:6c56fb4bc5f0 128 /** Create an AnalogIn, connected to the specified pin
nexpaq 0:6c56fb4bc5f0 129 *
nexpaq 0:6c56fb4bc5f0 130 * @param pin AnalogIn pin to connect to
nexpaq 0:6c56fb4bc5f0 131 * @param name (optional) A string to identify the object
nexpaq 0:6c56fb4bc5f0 132 */
nexpaq 0:6c56fb4bc5f0 133 AnalogIn(PinName pin) {
nexpaq 0:6c56fb4bc5f0 134 analogin_init(&_adc, pin);
nexpaq 0:6c56fb4bc5f0 135 }
nexpaq 0:6c56fb4bc5f0 136
nexpaq 0:6c56fb4bc5f0 137 /** Read the input voltage, represented as a float in the range [0.0, 1.0]
nexpaq 0:6c56fb4bc5f0 138 *
nexpaq 0:6c56fb4bc5f0 139 * @returns
nexpaq 0:6c56fb4bc5f0 140 * A floating-point value representing the current input voltage, measured as a percentage
nexpaq 0:6c56fb4bc5f0 141 */
nexpaq 0:6c56fb4bc5f0 142 uint32_t read() {
nexpaq 0:6c56fb4bc5f0 143 return analogin_read(&_adc, operation);
nexpaq 0:6c56fb4bc5f0 144 }
nexpaq 0:6c56fb4bc5f0 145
nexpaq 0:6c56fb4bc5f0 146 protected:
nexpaq 0:6c56fb4bc5f0 147 analogin_t _adc;
nexpaq 0:6c56fb4bc5f0 148 };
nexpaq 0:6c56fb4bc5f0 149
nexpaq 0:6c56fb4bc5f0 150 typedef enum {
nexpaq 0:6c56fb4bc5f0 151 ADC0_SE0 = (0 << ADC_INSTANCE_SHIFT) | 0,
nexpaq 0:6c56fb4bc5f0 152 } ADCName;
nexpaq 0:6c56fb4bc5f0 153
nexpaq 0:6c56fb4bc5f0 154 struct analogin_s {
nexpaq 0:6c56fb4bc5f0 155 ADCName adc;
nexpaq 0:6c56fb4bc5f0 156 };
nexpaq 0:6c56fb4bc5f0 157
nexpaq 0:6c56fb4bc5f0 158 typedef struct analogin_s analogin_t;
nexpaq 0:6c56fb4bc5f0 159 ```
nexpaq 0:6c56fb4bc5f0 160 ### Doxygen documentation
nexpaq 0:6c56fb4bc5f0 161 All functions / methods should contain a documentation using doxygen javadoc in a header file. More information regarding writing API Documentation, follow [this](https://mbed.org/handbook/API-Documentation) link.
nexpaq 0:6c56fb4bc5f0 162
nexpaq 0:6c56fb4bc5f0 163 Example of well documentet code:
nexpaq 0:6c56fb4bc5f0 164 ```c++
nexpaq 0:6c56fb4bc5f0 165 #ifndef ADC_H
nexpaq 0:6c56fb4bc5f0 166 #define ADC_H
nexpaq 0:6c56fb4bc5f0 167
nexpaq 0:6c56fb4bc5f0 168 #ifdef __cplusplus
nexpaq 0:6c56fb4bc5f0 169 extern "C" {
nexpaq 0:6c56fb4bc5f0 170 #endif
nexpaq 0:6c56fb4bc5f0 171
nexpaq 0:6c56fb4bc5f0 172 /** ADC Measurement method
nexpaq 0:6c56fb4bc5f0 173 *
nexpaq 0:6c56fb4bc5f0 174 * @param obj Pointer to the analogin object.
nexpaq 0:6c56fb4bc5f0 175 * @param options Options to be enabled by ADC peripheral.
nexpaq 0:6c56fb4bc5f0 176 *
nexpaq 0:6c56fb4bc5f0 177 * @returns
nexpaq 0:6c56fb4bc5f0 178 * Measurement value on defined ADC channel.
nexpaq 0:6c56fb4bc5f0 179 */
nexpaq 0:6c56fb4bc5f0 180 uint32_t adc_function(analogin_t *obj, uint32_t options)
nexpaq 0:6c56fb4bc5f0 181
nexpaq 0:6c56fb4bc5f0 182 #ifdef __cplusplus
nexpaq 0:6c56fb4bc5f0 183 }
nexpaq 0:6c56fb4bc5f0 184 #endif
nexpaq 0:6c56fb4bc5f0 185
nexpaq 0:6c56fb4bc5f0 186 #endif
nexpaq 0:6c56fb4bc5f0 187 ```
nexpaq 0:6c56fb4bc5f0 188 ### C/C++ Source code indenter
nexpaq 0:6c56fb4bc5f0 189 In Mbed project you can use AStyle (Reference: [Artistic Style](http://astyle.sourceforge.net/)) source code indenter to help you auto format your source code. It will for sure not correct all your coding styles but for sure will eliminate most of them. You can download AStyle from this location.
nexpaq 0:6c56fb4bc5f0 190
nexpaq 0:6c56fb4bc5f0 191 Official Mbed SDK styles include below AStyle styles (defined by command line switched):
nexpaq 0:6c56fb4bc5f0 192 ```
nexpaq 0:6c56fb4bc5f0 193 --style=kr --indent=spaces=4 --indent-switches
nexpaq 0:6c56fb4bc5f0 194 ```
nexpaq 0:6c56fb4bc5f0 195 To format your file you can execute below command. Just replace ```$(FULL_CURRENT_PATH)``` with path to your source file.
nexpaq 0:6c56fb4bc5f0 196 ```
nexpaq 0:6c56fb4bc5f0 197 $ astyle.exe --style=kr --indent=spaces=4 --indent-switches $(FULL_CURRENT_PATH)
nexpaq 0:6c56fb4bc5f0 198 ```
nexpaq 0:6c56fb4bc5f0 199
nexpaq 0:6c56fb4bc5f0 200 ## Python coding rules & coding guidelines
nexpaq 0:6c56fb4bc5f0 201 Some of our tools in tools are written in ```Python 2.7```. In case of developing tools for python we prefer to keep similar code styles across all Python source code. Please note that not all rules must be enforced. For example we do not limit you to 80 characters per line, just be sure your code can fit to widescreen display.
nexpaq 0:6c56fb4bc5f0 202
nexpaq 0:6c56fb4bc5f0 203 Please stay compatible with ```Python 2.7``` but nothing stops you to write your code so in the future it will by Python 3 friendly.
nexpaq 0:6c56fb4bc5f0 204
nexpaq 0:6c56fb4bc5f0 205 Please check our Python source code (especially ```test_api.py``` and ```singletest.py```) to get notion of how your new code should look like). We know our code is not perfect but please try to fit the same coding style to existing code so source looks consistent and is not series of different flavors.
nexpaq 0:6c56fb4bc5f0 206
nexpaq 0:6c56fb4bc5f0 207 Some general guidelines:
nexpaq 0:6c56fb4bc5f0 208 * Use Python idioms, please refer to one of many on-line guidelines how to write Pythonic code: [Code Like a Pythonista: Idiomatic Python](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html).
nexpaq 0:6c56fb4bc5f0 209 * Please do not use TABs. Please use 4 spaces instead for indentations.
nexpaq 0:6c56fb4bc5f0 210 * Please put space character between operators, after comma etc.
nexpaq 0:6c56fb4bc5f0 211 * Please document your code, write comments and ```doc``` sections for each function or class you implement.
nexpaq 0:6c56fb4bc5f0 212
nexpaq 0:6c56fb4bc5f0 213 ### Static Code Analizers for Python
nexpaq 0:6c56fb4bc5f0 214 If you are old-school developer for sure you remember tools like lint. "lint was the name originally given to a particular program that flagged some suspicious and non-portable constructs (likely to be bugs) in C language source code." Now lint-like programs are used to check similar code issues for multiple languages, also for Python. Please do use them if you want to commit new code to tools and other mbed SDK Python tooling.
nexpaq 0:6c56fb4bc5f0 215
nexpaq 0:6c56fb4bc5f0 216 Below is the list Python lint tools you may want to use:
nexpaq 0:6c56fb4bc5f0 217
nexpaq 0:6c56fb4bc5f0 218 * [pyflakes](https://pypi.python.org/pypi/pyflakes) - Please scan your code with pyflakes and remove all issues reported by it. If you are unsure if something should be modified or not you can skip lint report related fix and report this issue as possible additional commit in your pull request description.
nexpaq 0:6c56fb4bc5f0 219
nexpaq 0:6c56fb4bc5f0 220 * [pylint](http://www.pylint.org/) - Please scan your code with pylint and check if there are any issues which can be resolved and are obvious "to fix" bugs. For example you may forgot to add 'self' as first parameter in class method parameter list or you are calling unknown functions / functions from not imported modules.
nexpaq 0:6c56fb4bc5f0 221
nexpaq 0:6c56fb4bc5f0 222 * [pychecker](http://pychecker.sourceforge.net/) - optional, but more the merrier ;)
nexpaq 0:6c56fb4bc5f0 223
nexpaq 0:6c56fb4bc5f0 224 Example Python look&feel:
nexpaq 0:6c56fb4bc5f0 225 ```python
nexpaq 0:6c56fb4bc5f0 226 class HostRegistry:
nexpaq 0:6c56fb4bc5f0 227 """ Class stores registry with host tests and objects representing them
nexpaq 0:6c56fb4bc5f0 228 """
nexpaq 0:6c56fb4bc5f0 229 HOST_TESTS = {} # host_test_name -> host_test_ojbect
nexpaq 0:6c56fb4bc5f0 230
nexpaq 0:6c56fb4bc5f0 231 def register_host_test(self, ht_name, ht_object):
nexpaq 0:6c56fb4bc5f0 232 """ Registers (removes) host test by name from HOST_TESTS registry
nexpaq 0:6c56fb4bc5f0 233 if host test is not already registered (check by name).
nexpaq 0:6c56fb4bc5f0 234 """
nexpaq 0:6c56fb4bc5f0 235 if ht_name not in self.HOST_TESTS:
nexpaq 0:6c56fb4bc5f0 236 self.HOST_TESTS[ht_name] = ht_object
nexpaq 0:6c56fb4bc5f0 237
nexpaq 0:6c56fb4bc5f0 238 def unregister_host_test(self):
nexpaq 0:6c56fb4bc5f0 239 """ Unregisters (removes) host test by name from HOST_TESTS registry.
nexpaq 0:6c56fb4bc5f0 240 """
nexpaq 0:6c56fb4bc5f0 241 if ht_name in HOST_TESTS:
nexpaq 0:6c56fb4bc5f0 242 self.HOST_TESTS[ht_name] = None
nexpaq 0:6c56fb4bc5f0 243
nexpaq 0:6c56fb4bc5f0 244 def get_host_test(self, ht_name):
nexpaq 0:6c56fb4bc5f0 245 """ Returns HOST_TEST if host name is valid.
nexpaq 0:6c56fb4bc5f0 246 In case no host test is available return None
nexpaq 0:6c56fb4bc5f0 247 """
nexpaq 0:6c56fb4bc5f0 248 return self.HOST_TESTS[ht_name] if ht_name in self.HOST_TESTS else None
nexpaq 0:6c56fb4bc5f0 249
nexpaq 0:6c56fb4bc5f0 250 def is_host_test(self, ht_name):
nexpaq 0:6c56fb4bc5f0 251 """ Function returns True if host name is valid (is in HOST_TESTS)
nexpaq 0:6c56fb4bc5f0 252 """
nexpaq 0:6c56fb4bc5f0 253 return ht_name in self.HOST_TESTS
nexpaq 0:6c56fb4bc5f0 254 ```
nexpaq 0:6c56fb4bc5f0 255
nexpaq 0:6c56fb4bc5f0 256 ## Testing
nexpaq 0:6c56fb4bc5f0 257 Please refer to TESTING.md document for detais regarding mbed SDK test suite and build scripts included in ```mbed/tools/```.
nexpaq 0:6c56fb4bc5f0 258
nexpaq 0:6c56fb4bc5f0 259 ## Before pull request checklist
nexpaq 0:6c56fb4bc5f0 260 * Your pull request description section contains:
nexpaq 0:6c56fb4bc5f0 261 * Rationale – tell us why you submitted this pull request. This is your change to write us summary of your change.
nexpaq 0:6c56fb4bc5f0 262 * Description – describe changes you’ve made and tell us which new features / functionalities were implemented.
nexpaq 0:6c56fb4bc5f0 263 * Manual / Cookbook / Handbook – you can put here manual, cookbook or handbook related to your change / enhancement. Your documentation can stay with pull request.
nexpaq 0:6c56fb4bc5f0 264 * Test results (if applicable).
nexpaq 0:6c56fb4bc5f0 265 * Make sure you followed project's coding rules and styles.
nexpaq 0:6c56fb4bc5f0 266 * No dependencies are created to external C/C++ libraries which are not included already in our repository.
nexpaq 0:6c56fb4bc5f0 267 * Please make sure that in your module all functions have unique prefix (no name space collisions).
nexpaq 0:6c56fb4bc5f0 268 * You reused existing functionality, please do not add or rewrite existing code. E.g. use mbed’s ```FunctionPointer``` if possible to store your function pointers. Do not write another wrapper for it. We already got one. If some functionality is missing, just add it! Extend our APIs wisely!
nexpaq 0:6c56fb4bc5f0 269 * Were you consistent? Please continue using style / code formatting, variables naming etc. in file they are modifying.
nexpaq 0:6c56fb4bc5f0 270 * Your code compiles and links. Also doesn’t generate additional compilation warnings.