Azure IoT common library

Dependents:   STM32F746_iothub_client_sample_mqtt f767zi_mqtt iothub_client_sample_amqp iothub_client_sample_http ... more

Committer:
AzureIoTClient
Date:
Fri Apr 21 14:51:10 2017 -0700
Revision:
25:8507bf644fdf
Parent:
20:95abdea56064
Child:
27:8656a313842b
1.1.13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Azure.IoT Build 6:c55b013dfc2a 1 // Copyright (c) Microsoft. All rights reserved.
Azure.IoT Build 6:c55b013dfc2a 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
Azure.IoT Build 6:c55b013dfc2a 3
Azure.IoT Build 6:c55b013dfc2a 4 #include "azure_c_shared_utility/xlogging.h"
Azure.IoT Build 6:c55b013dfc2a 5 #include "azure_c_shared_utility/consolelogger.h"
Azure.IoT Build 6:c55b013dfc2a 6
AzureIoTClient 7:1af47e3a19b6 7 #ifndef NO_LOGGING
AzureIoTClient 7:1af47e3a19b6 8
AzureIoTClient 7:1af47e3a19b6 9
AzureIoTClient 7:1af47e3a19b6 10 #ifdef WINCE
AzureIoTClient 7:1af47e3a19b6 11 #include <stdarg.h>
AzureIoTClient 7:1af47e3a19b6 12
AzureIoTClient 8:3db46d1e5471 13 void consolelogger_log(LOG_CATEGORY log_category, const char* file, const char* func, const int line, unsigned int options, const char* format, ...)
AzureIoTClient 7:1af47e3a19b6 14 {
AzureIoTClient 7:1af47e3a19b6 15 va_list args;
AzureIoTClient 7:1af47e3a19b6 16 va_start(args, format);
AzureIoTClient 7:1af47e3a19b6 17
AzureIoTClient 7:1af47e3a19b6 18 time_t t = time(NULL);
AzureIoTClient 7:1af47e3a19b6 19
AzureIoTClient 7:1af47e3a19b6 20 switch (log_category)
AzureIoTClient 7:1af47e3a19b6 21 {
AzureIoTClient 18:6d8a413a4d9a 22 case AZ_LOG_INFO:
AzureIoTClient 7:1af47e3a19b6 23 (void)printf("Info: ");
AzureIoTClient 7:1af47e3a19b6 24 break;
AzureIoTClient 18:6d8a413a4d9a 25 case AZ_LOG_ERROR:
AzureIoTClient 8:3db46d1e5471 26 (void)printf("Error: Time:%.24s File:%s Func:%s Line:%d ", ctime(&t), file, func, line);
AzureIoTClient 7:1af47e3a19b6 27 break;
AzureIoTClient 7:1af47e3a19b6 28 default:
AzureIoTClient 7:1af47e3a19b6 29 break;
AzureIoTClient 7:1af47e3a19b6 30 }
AzureIoTClient 7:1af47e3a19b6 31
AzureIoTClient 7:1af47e3a19b6 32 (void)vprintf(format, args);
AzureIoTClient 7:1af47e3a19b6 33 va_end(args);
AzureIoTClient 7:1af47e3a19b6 34
AzureIoTClient 7:1af47e3a19b6 35 (void)log_category;
AzureIoTClient 7:1af47e3a19b6 36 if (options & LOG_LINE)
AzureIoTClient 7:1af47e3a19b6 37 {
AzureIoTClient 7:1af47e3a19b6 38 (void)printf("\r\n");
AzureIoTClient 7:1af47e3a19b6 39 }
AzureIoTClient 7:1af47e3a19b6 40 }
AzureIoTClient 7:1af47e3a19b6 41 #endif
AzureIoTClient 7:1af47e3a19b6 42
AzureIoTClient 7:1af47e3a19b6 43 LOGGER_LOG global_log_function = consolelogger_log;
AzureIoTClient 7:1af47e3a19b6 44
Azure.IoT Build 6:c55b013dfc2a 45
Azure.IoT Build 6:c55b013dfc2a 46 void xlogging_set_log_function(LOGGER_LOG log_function)
Azure.IoT Build 6:c55b013dfc2a 47 {
Azure.IoT Build 6:c55b013dfc2a 48 global_log_function = log_function;
Azure.IoT Build 6:c55b013dfc2a 49 }
Azure.IoT Build 6:c55b013dfc2a 50
Azure.IoT Build 6:c55b013dfc2a 51 LOGGER_LOG xlogging_get_log_function(void)
Azure.IoT Build 6:c55b013dfc2a 52 {
Azure.IoT Build 6:c55b013dfc2a 53 return global_log_function;
Azure.IoT Build 6:c55b013dfc2a 54 }
AzureIoTClient 7:1af47e3a19b6 55
Azure.IoT.Build 16:18e7ebd42bb2 56 /* Print up to 16 bytes per line. */
Azure.IoT.Build 16:18e7ebd42bb2 57 #define LINE_SIZE 16
Azure.IoT.Build 16:18e7ebd42bb2 58
Azure.IoT.Build 16:18e7ebd42bb2 59 /* Return the printable char for the provided value. */
Azure.IoT.Build 16:18e7ebd42bb2 60 #define PRINTABLE(c) ((c >= ' ') && (c <= '~')) ? (char)c : '.'
Azure.IoT.Build 16:18e7ebd42bb2 61
Azure.IoT.Build 16:18e7ebd42bb2 62 /* Convert the lower nibble of the provided byte to a hexadecimal printable char. */
Azure.IoT.Build 16:18e7ebd42bb2 63 #define HEX_STR(c) (((c) & 0xF) < 0xA) ? (char)(((c) & 0xF) + '0') : (char)(((c) & 0xF) - 0xA + 'A')
Azure.IoT.Build 16:18e7ebd42bb2 64
Azure.IoT.Build 16:18e7ebd42bb2 65 void xlogging_dump_buffer(const void* buf, size_t size)
Azure.IoT.Build 16:18e7ebd42bb2 66 {
Azure.IoT.Build 16:18e7ebd42bb2 67 char charBuf[LINE_SIZE + 1];
Azure.IoT.Build 16:18e7ebd42bb2 68 char hexBuf[LINE_SIZE * 3 + 1];
AzureIoTClient 20:95abdea56064 69 size_t countbuf = 0;
Azure.IoT.Build 16:18e7ebd42bb2 70 const unsigned char* bufAsChar = (const unsigned char*)buf;
Azure.IoT.Build 16:18e7ebd42bb2 71 const unsigned char* startPos = bufAsChar;
Azure.IoT.Build 16:18e7ebd42bb2 72
Azure.IoT.Build 16:18e7ebd42bb2 73 /* Print the whole buffer. */
AzureIoTClient 25:8507bf644fdf 74 size_t i = 0;
AzureIoTClient 25:8507bf644fdf 75 for (i = 0; i < size; i++)
Azure.IoT.Build 16:18e7ebd42bb2 76 {
Azure.IoT.Build 16:18e7ebd42bb2 77 /* Store the printable value of the char in the charBuf to print. */
Azure.IoT.Build 16:18e7ebd42bb2 78 charBuf[countbuf] = PRINTABLE(*bufAsChar);
Azure.IoT.Build 16:18e7ebd42bb2 79
Azure.IoT.Build 16:18e7ebd42bb2 80 /* Convert the high nibble to a printable hexadecimal value. */
Azure.IoT.Build 16:18e7ebd42bb2 81 hexBuf[countbuf * 3] = HEX_STR(*bufAsChar >> 4);
Azure.IoT.Build 16:18e7ebd42bb2 82
Azure.IoT.Build 16:18e7ebd42bb2 83 /* Convert the low nibble to a printable hexadecimal value. */
Azure.IoT.Build 16:18e7ebd42bb2 84 hexBuf[countbuf * 3 + 1] = HEX_STR(*bufAsChar);
Azure.IoT.Build 16:18e7ebd42bb2 85
Azure.IoT.Build 16:18e7ebd42bb2 86 hexBuf[countbuf * 3 + 2] = ' ';
Azure.IoT.Build 16:18e7ebd42bb2 87
Azure.IoT.Build 16:18e7ebd42bb2 88 countbuf++;
Azure.IoT.Build 16:18e7ebd42bb2 89 bufAsChar++;
Azure.IoT.Build 16:18e7ebd42bb2 90 /* If the line is full, print it to start another one. */
Azure.IoT.Build 16:18e7ebd42bb2 91 if (countbuf == LINE_SIZE)
Azure.IoT.Build 16:18e7ebd42bb2 92 {
Azure.IoT.Build 16:18e7ebd42bb2 93 charBuf[countbuf] = '\0';
Azure.IoT.Build 16:18e7ebd42bb2 94 hexBuf[countbuf * 3] = '\0';
AzureIoTClient 18:6d8a413a4d9a 95 LOG(AZ_LOG_TRACE, 0, "%p: %s %s", startPos, hexBuf, charBuf);
Azure.IoT.Build 16:18e7ebd42bb2 96 countbuf = 0;
Azure.IoT.Build 16:18e7ebd42bb2 97 startPos = bufAsChar;
Azure.IoT.Build 16:18e7ebd42bb2 98 }
Azure.IoT.Build 16:18e7ebd42bb2 99 }
Azure.IoT.Build 16:18e7ebd42bb2 100
Azure.IoT.Build 16:18e7ebd42bb2 101 /* If the last line does not fit the line size. */
Azure.IoT.Build 16:18e7ebd42bb2 102 if (countbuf > 0)
Azure.IoT.Build 16:18e7ebd42bb2 103 {
Azure.IoT.Build 16:18e7ebd42bb2 104 /* Close the charBuf string. */
Azure.IoT.Build 16:18e7ebd42bb2 105 charBuf[countbuf] = '\0';
Azure.IoT.Build 16:18e7ebd42bb2 106
Azure.IoT.Build 16:18e7ebd42bb2 107 /* Fill the hexBuf with spaces to keep the charBuf alignment. */
Azure.IoT.Build 16:18e7ebd42bb2 108 while ((countbuf++) < LINE_SIZE - 1)
Azure.IoT.Build 16:18e7ebd42bb2 109 {
Azure.IoT.Build 16:18e7ebd42bb2 110 hexBuf[countbuf * 3] = ' ';
Azure.IoT.Build 16:18e7ebd42bb2 111 hexBuf[countbuf * 3 + 1] = ' ';
Azure.IoT.Build 16:18e7ebd42bb2 112 hexBuf[countbuf * 3 + 2] = ' ';
Azure.IoT.Build 16:18e7ebd42bb2 113 }
Azure.IoT.Build 16:18e7ebd42bb2 114 hexBuf[countbuf * 3] = '\0';
Azure.IoT.Build 16:18e7ebd42bb2 115
Azure.IoT.Build 16:18e7ebd42bb2 116 /* Print the last line. */
AzureIoTClient 18:6d8a413a4d9a 117 LOG(AZ_LOG_TRACE, 0, "%p: %s %s", startPos, hexBuf, charBuf);
Azure.IoT.Build 16:18e7ebd42bb2 118 }
Azure.IoT.Build 16:18e7ebd42bb2 119 }
Azure.IoT.Build 16:18e7ebd42bb2 120
AzureIoTClient 7:1af47e3a19b6 121 #endif