TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.
utils/cli_uart.cpp@1:e448e81c416f, 2015-09-11 (annotated)
- Committer:
- dflet
- Date:
- Fri Sep 11 15:38:33 2015 +0000
- Revision:
- 1:e448e81c416f
- Parent:
- 0:400d8e75a8d0
Removed some debud.
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 |