Debugging library
Diff: MDebugger.h
- Revision:
- 0:57b729dee92c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MDebugger.h Wed Jun 25 14:33:12 2014 +0000 @@ -0,0 +1,128 @@ +#ifndef MDEBUGGER_H +#define MDEBUGGER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> +#include <cmsis.h> + +#define MDEBUGGER_CIRCULAR_BUFFER_SIZE_IN_BYTES 32 +#define MDEBUGGER_NUMBER_OF_ADDRESS_CHANNELS 2 + +/* @brief Function which user has to provide to put a character to the stream associated with given channel number. + + To make the MDebugger working this function has to be provided by the user. + It will be called every time the debug library wants to send a character from the message which has to be passed. + + @param[in] data_byte A characted byte which has to be sent. + @param[in] channel Channel number where the character byte has to be sent. + +*/ +void mdebug_putc(unsigned char data_byte, uint32_t channel); + + +/* + @brief Function which writes data to the output buffer of the MDebugger library. + + This function should be used if the user wants to send a binary data to the debug channel. + Saying more precisely - to send data which can contain NULL character. + This function is not parsing anything and is fastest than mdebug_printf version. + Underneath this function there is a circular buffer which is used in the first place to store the data. + If the buffer will fill to the maximum during copying data the mdebug_flush function will be called to write the data to the stream. + + @param[in] in_buffer Pointer to buffer which contains data to be send. + @param[in] in_buffer_size Size of data in the passed buffer. + @param[in] channel Channel number where the data has to be sent. +*/ +void mdebug_write(unsigned char *in_buffer, uint32_t in_buffer_size, uint32_t channel); + +/* + @brief Function which writes data straight to the output stream of the MDebugger library. + + This function should be used if the user wants to send a binary data to the debug channel. + Saying more precisely - to send data which can contain NULL character. + This function is not parsing anything and is fastest than mdebug_printf version. + This is an unbuffered version of mdebug_write funtion which means that there is no circular buffer underneath it. + This function will be passing the data straight to the stream. + + @param[in] in_buffer Pointer to buffer which contains data to be send. + @param[in] in_buffer_size Size of data in the passed buffer. + @param[in] channel Channel number where the data has to be sent. +*/ +void mdebug_write_unbuffered(unsigned char *in_buffer, uint32_t in_buffer_size, uint32_t channel); + +/* + @brief Function which parses the formatting string and after that writes it to the output buffer of the MDebugger library. + + This function should be used if the user wants to send a string message to the debug channel. + This function parses the formatting string together with passed arguments fimilary to printf function. + Because of parsing the string function is slower than the mdebug_write. + Underneath this function there is a circular buffer which is used in the first place to store the data. + If the buffer will fill to the maximum during copying data the mdebug_flush function will be called to write the data to the stream. + + @param[in] channel Channel number where the data has to be sent. + @param[in] formatting_string Formatting string which will be used to construct the message together with passed arguments after it. +*/ +void mdebug_printf(uint32_t channel, const char *formatting_string, ...); + +/* + @brief Function which parses the formatting string and after that writes data straight to the output stream of the MDebugger library. + + This function should be used if the user wants to send a string message to the debug channel. + This function parses the formatting string together with passed arguments fimilary to printf function. + Because of parsing the string function is slower than the mdebug_write. + This is an unbuffered version of mdebug_printf funtion which means that there is no circular buffer underneath it. + This function will be passing the data straight to the stream. + + @param[in] channel Channel number where the data has to be sent. + @param[in] formatting_string Formatting string which will be used to construct the message together with passed arguments after it. +*/ +void mdebug_printf_unbuffered(uint32_t channel, const char *formatting_string, ...); + +/* + @brief Function which flushes the circular buffer assigned to given channel (sends the data to the stream). + + @param[in] channel Channel number which circular buffer will be flushed. +*/ +void mdebug_flush(uint32_t channel); + +/* + @brief Function which showes how much space is used within the circular buffer on a given channel. + + @param[in] channel Channel number to calculate used space of circular buffer. + @returns Used space in circular buffer assigned to given channel in bytes. +*/ +uint32_t mdebug_output_bufer_used_space(uint32_t channel); + +/* + @brief Function which showes how much space is free within the circular buffer on a given channel. + + @param[in] channel Channel number to calculate free space of circular buffer. + @returns Free space in circular buffer assigned to given channel in bytes. +*/ +uint32_t mdebug_output_buffer_free_space(uint32_t channel); + + +/* + @brief Function which checks is the circular buffer of a given channel empty. + + @param[in] channel Channel number to check is it empty. + @return 0 Circular buffer assigned to given channel is not empty. + @return 1 Circular buffer assigned to given channel is empty. +*/ +uint32_t mdebug_output_buffer_is_empty(uint32_t channel); + +/* + @brief Function which prints information about the Cortex core. + + This function prints to default channel 0 all information about the core at the stage of calling this function. +*/ +void mdebug_print_system_info(void); + +#ifdef __cplusplus +} +#endif + +#endif // MDEBUGGER_H