Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
utils/cli_uart.cpp@0:400d8e75a8d0, 2015-09-06 (annotated)
- Committer:
 - dflet
 - Date:
 - Sun Sep 06 15:19:36 2015 +0000
 - Revision:
 - 0:400d8e75a8d0
 
TI's websocket Camera demo, also uses Arducam mini 0v5642 camera.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| dflet | 0:400d8e75a8d0 | 1 | |
| dflet | 0:400d8e75a8d0 | 2 | #include "mbed.h" | 
| dflet | 0:400d8e75a8d0 | 3 | |
| dflet | 0:400d8e75a8d0 | 4 | // Standard includes | 
| dflet | 0:400d8e75a8d0 | 5 | #include <stdarg.h> | 
| dflet | 0:400d8e75a8d0 | 6 | |
| dflet | 0:400d8e75a8d0 | 7 | #include "myBoardInit.h" | 
| dflet | 0:400d8e75a8d0 | 8 | #include "cli_uart.h" | 
| dflet | 0:400d8e75a8d0 | 9 | #include "osi.h" | 
| dflet | 0:400d8e75a8d0 | 10 | |
| dflet | 0:400d8e75a8d0 | 11 | OsiLockObj_t g_printLock; | 
| dflet | 0:400d8e75a8d0 | 12 | |
| dflet | 0:400d8e75a8d0 | 13 | |
| dflet | 0:400d8e75a8d0 | 14 | Serial uart(USBTX, USBRX); | 
| dflet | 0:400d8e75a8d0 | 15 | |
| dflet | 0:400d8e75a8d0 | 16 | int Uart_Write(unsigned char *inBuff) | 
| dflet | 0:400d8e75a8d0 | 17 | { | 
| dflet | 0:400d8e75a8d0 | 18 | uint16_t ret, ecount, usLength = strlen((const char *)inBuff); | 
| dflet | 0:400d8e75a8d0 | 19 | ecount = 0; | 
| dflet | 0:400d8e75a8d0 | 20 | ret = 0; | 
| dflet | 0:400d8e75a8d0 | 21 | |
| dflet | 0:400d8e75a8d0 | 22 | while(!(uart.writeable())){ecount++;if(ecount>3000)break;}; | 
| dflet | 0:400d8e75a8d0 | 23 | |
| dflet | 0:400d8e75a8d0 | 24 | if(uart.writeable()) { | 
| dflet | 0:400d8e75a8d0 | 25 | |
| dflet | 0:400d8e75a8d0 | 26 | if(inBuff == NULL) { | 
| dflet | 0:400d8e75a8d0 | 27 | printf("Uart Write buffer empty\r\n"); | 
| dflet | 0:400d8e75a8d0 | 28 | return -1; | 
| dflet | 0:400d8e75a8d0 | 29 | } | 
| dflet | 0:400d8e75a8d0 | 30 | |
| dflet | 0:400d8e75a8d0 | 31 | RTOS_MUTEX_ACQUIRE(&g_printLock); | 
| dflet | 0:400d8e75a8d0 | 32 | ret = usLength; | 
| dflet | 0:400d8e75a8d0 | 33 | |
| dflet | 0:400d8e75a8d0 | 34 | while (usLength) { | 
| dflet | 0:400d8e75a8d0 | 35 | uart.putc(*inBuff); | 
| dflet | 0:400d8e75a8d0 | 36 | usLength--; | 
| dflet | 0:400d8e75a8d0 | 37 | inBuff++; | 
| dflet | 0:400d8e75a8d0 | 38 | } | 
| dflet | 0:400d8e75a8d0 | 39 | |
| dflet | 0:400d8e75a8d0 | 40 | RTOS_MUTEX_RELEASE(&g_printLock); | 
| dflet | 0:400d8e75a8d0 | 41 | } else { | 
| dflet | 0:400d8e75a8d0 | 42 | printf("Uart Write failed [uart not writeable] now trying printf\r\n"); | 
| dflet | 0:400d8e75a8d0 | 43 | while (usLength) { | 
| dflet | 0:400d8e75a8d0 | 44 | printf("%c",*inBuff); | 
| dflet | 0:400d8e75a8d0 | 45 | usLength--; | 
| dflet | 0:400d8e75a8d0 | 46 | inBuff++; | 
| dflet | 0:400d8e75a8d0 | 47 | } | 
| dflet | 0:400d8e75a8d0 | 48 | return -1; | 
| dflet | 0:400d8e75a8d0 | 49 | } | 
| dflet | 0:400d8e75a8d0 | 50 | |
| dflet | 0:400d8e75a8d0 | 51 | return (int)ret; | 
| dflet | 0:400d8e75a8d0 | 52 | |
| dflet | 0:400d8e75a8d0 | 53 | } | 
| dflet | 0:400d8e75a8d0 | 54 | |
| dflet | 0:400d8e75a8d0 | 55 | void CLI_Configure(void) | 
| dflet | 0:400d8e75a8d0 | 56 | { | 
| dflet | 0:400d8e75a8d0 | 57 | uart.baud(115200); | 
| dflet | 0:400d8e75a8d0 | 58 | |
| dflet | 0:400d8e75a8d0 | 59 | RTOS_MUTEX_CREATE(&g_printLock); | 
| dflet | 0:400d8e75a8d0 | 60 | |
| dflet | 0:400d8e75a8d0 | 61 | } | 
| dflet | 0:400d8e75a8d0 | 62 | |
| dflet | 0:400d8e75a8d0 | 63 | //***************************************************************************** | 
| dflet | 0:400d8e75a8d0 | 64 | // | 
| dflet | 0:400d8e75a8d0 | 65 | //! prints the formatted string on to the console | 
| dflet | 0:400d8e75a8d0 | 66 | //! | 
| dflet | 0:400d8e75a8d0 | 67 | //! \param format is a pointer to the character string specifying the format in | 
| dflet | 0:400d8e75a8d0 | 68 | //! the following arguments need to be interpreted. | 
| dflet | 0:400d8e75a8d0 | 69 | //! \param [variable number of] arguments according to the format in the first | 
| dflet | 0:400d8e75a8d0 | 70 | //! parameters | 
| dflet | 0:400d8e75a8d0 | 71 | //! This function | 
| dflet | 0:400d8e75a8d0 | 72 | //! 1. prints the formatted error statement. | 
| dflet | 0:400d8e75a8d0 | 73 | //! | 
| dflet | 0:400d8e75a8d0 | 74 | //! \return count of characters printed | 
| dflet | 0:400d8e75a8d0 | 75 | // | 
| dflet | 0:400d8e75a8d0 | 76 | //***************************************************************************** | 
| dflet | 0:400d8e75a8d0 | 77 | int Report(const char *pcFormat, ...) | 
| dflet | 0:400d8e75a8d0 | 78 | { | 
| dflet | 0:400d8e75a8d0 | 79 | int iRet = 0; | 
| dflet | 0:400d8e75a8d0 | 80 | //#ifndef NOTERM | 
| dflet | 0:400d8e75a8d0 | 81 | |
| dflet | 0:400d8e75a8d0 | 82 | char *pcBuff, *pcTemp; | 
| dflet | 0:400d8e75a8d0 | 83 | int iSize = 256; | 
| dflet | 0:400d8e75a8d0 | 84 | |
| dflet | 0:400d8e75a8d0 | 85 | va_list list; | 
| dflet | 0:400d8e75a8d0 | 86 | pcBuff = (char*)malloc(iSize); | 
| dflet | 0:400d8e75a8d0 | 87 | if(pcBuff == NULL) | 
| dflet | 0:400d8e75a8d0 | 88 | { | 
| dflet | 0:400d8e75a8d0 | 89 | return -1; | 
| dflet | 0:400d8e75a8d0 | 90 | } | 
| dflet | 0:400d8e75a8d0 | 91 | while(1) | 
| dflet | 0:400d8e75a8d0 | 92 | { | 
| dflet | 0:400d8e75a8d0 | 93 | va_start(list,pcFormat); | 
| dflet | 0:400d8e75a8d0 | 94 | iRet = vsnprintf((char*)pcBuff,iSize,pcFormat,list); | 
| dflet | 0:400d8e75a8d0 | 95 | va_end(list); | 
| dflet | 0:400d8e75a8d0 | 96 | if(iRet > -1 && iRet < iSize) | 
| dflet | 0:400d8e75a8d0 | 97 | { | 
| dflet | 0:400d8e75a8d0 | 98 | break; | 
| dflet | 0:400d8e75a8d0 | 99 | } | 
| dflet | 0:400d8e75a8d0 | 100 | else | 
| dflet | 0:400d8e75a8d0 | 101 | { | 
| dflet | 0:400d8e75a8d0 | 102 | iSize*=2; | 
| dflet | 0:400d8e75a8d0 | 103 | if((pcTemp=(char*)realloc(pcBuff,iSize))==NULL) | 
| dflet | 0:400d8e75a8d0 | 104 | { | 
| dflet | 0:400d8e75a8d0 | 105 | Message("Could not reallocate memory\n\r"); | 
| dflet | 0:400d8e75a8d0 | 106 | iRet = -1; | 
| dflet | 0:400d8e75a8d0 | 107 | break; | 
| dflet | 0:400d8e75a8d0 | 108 | } | 
| dflet | 0:400d8e75a8d0 | 109 | else | 
| dflet | 0:400d8e75a8d0 | 110 | { | 
| dflet | 0:400d8e75a8d0 | 111 | pcBuff=pcTemp; | 
| dflet | 0:400d8e75a8d0 | 112 | } | 
| dflet | 0:400d8e75a8d0 | 113 | |
| dflet | 0:400d8e75a8d0 | 114 | } | 
| dflet | 0:400d8e75a8d0 | 115 | } | 
| dflet | 0:400d8e75a8d0 | 116 | Message(pcBuff); | 
| dflet | 0:400d8e75a8d0 | 117 | free(pcBuff); | 
| dflet | 0:400d8e75a8d0 | 118 | |
| dflet | 0:400d8e75a8d0 | 119 | //#endif | 
| dflet | 0:400d8e75a8d0 | 120 | return iRet; | 
| dflet | 0:400d8e75a8d0 | 121 | } | 
| dflet | 0:400d8e75a8d0 | 122 | |
| dflet | 0:400d8e75a8d0 | 123 | //***************************************************************************** | 
| dflet | 0:400d8e75a8d0 | 124 | // | 
| dflet | 0:400d8e75a8d0 | 125 | //! Outputs a character string to the console | 
| dflet | 0:400d8e75a8d0 | 126 | //! | 
| dflet | 0:400d8e75a8d0 | 127 | //! \param str is the pointer to the string to be printed | 
| dflet | 0:400d8e75a8d0 | 128 | //! | 
| dflet | 0:400d8e75a8d0 | 129 | //! This function | 
| dflet | 0:400d8e75a8d0 | 130 | //! 1. prints the input string character by character on to the console. | 
| dflet | 0:400d8e75a8d0 | 131 | //! | 
| dflet | 0:400d8e75a8d0 | 132 | //! \return none | 
| dflet | 0:400d8e75a8d0 | 133 | // | 
| dflet | 0:400d8e75a8d0 | 134 | //***************************************************************************** | 
| dflet | 0:400d8e75a8d0 | 135 | void | 
| dflet | 0:400d8e75a8d0 | 136 | Message(const char *str) | 
| dflet | 0:400d8e75a8d0 | 137 | { | 
| dflet | 0:400d8e75a8d0 | 138 | |
| dflet | 0:400d8e75a8d0 | 139 | uint16_t ecount = 0; | 
| dflet | 0:400d8e75a8d0 | 140 | |
| dflet | 0:400d8e75a8d0 | 141 | //#ifndef NOTERM | 
| dflet | 0:400d8e75a8d0 | 142 | while(!(uart.writeable())){ecount++;if(ecount>3000)break;}; | 
| dflet | 0:400d8e75a8d0 | 143 | |
| dflet | 0:400d8e75a8d0 | 144 | if(uart.writeable()) { | 
| dflet | 0:400d8e75a8d0 | 145 | |
| dflet | 0:400d8e75a8d0 | 146 | if(str != NULL){ | 
| dflet | 0:400d8e75a8d0 | 147 | RTOS_MUTEX_ACQUIRE(&g_printLock); | 
| dflet | 0:400d8e75a8d0 | 148 | while(*str!='\0') | 
| dflet | 0:400d8e75a8d0 | 149 | { | 
| dflet | 0:400d8e75a8d0 | 150 | uart.putc(*str++); | 
| dflet | 0:400d8e75a8d0 | 151 | } | 
| dflet | 0:400d8e75a8d0 | 152 | RTOS_MUTEX_RELEASE(&g_printLock); | 
| dflet | 0:400d8e75a8d0 | 153 | } | 
| dflet | 0:400d8e75a8d0 | 154 | } | 
| dflet | 0:400d8e75a8d0 | 155 | //#endif | 
| dflet | 0:400d8e75a8d0 | 156 | } | 
| dflet | 0:400d8e75a8d0 | 157 | |
| dflet | 0:400d8e75a8d0 | 158 |