Improve and fix documentation for error code combination

Improve documentation by:

- Fixing off by one errors in binary representations of error codes.
- Clarifying combinations of zero.
- Linking references to variables/macros via doxygen.

Signed-off-by: Chris Jones <christopher.jones@arm.com>
diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h
index 39874b9..6242289 100644
--- a/include/mbedtls/error.h
+++ b/include/mbedtls/error.h
@@ -133,10 +133,14 @@
  * \brief Combines a high-level and low-level error code together.
  *
  *        This function can be called directly however it is usually
- *        called via the mbedtls_error_add macro.
+ *        called via the #MBEDTLS_ERROR_ADD macro.
  *
- * \note  When invasive testing is enabled via MBEDTLS_TEST_HOOKS also try to
- *        call mbedtls_test_hook_error_add.
+ *        While a value of zero is not a negative error code, it is still an
+ *        error code (that denotes success) and can be combined with both a
+ *        negative error code or another value of zero.
+ *
+ * \note  When invasive testing is enabled via #MBEDTLS_TEST_HOOKS, also try to
+ *        call \link mbedtls_test_hook_error_add \endlink.
  *
  * \param high      high-level error code. See error.h for more details.
  * \param low       low-level error code. See error.h for more details.