Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Committer:
dflet
Date:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
15:5433f9d94cd7
Removed some debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1
dflet 0:50cedd586816 2 #include "mbed.h"
dflet 0:50cedd586816 3
dflet 0:50cedd586816 4 // Standard includes
dflet 0:50cedd586816 5 #include <stdarg.h>
dflet 0:50cedd586816 6
dflet 0:50cedd586816 7 #include "myBoardInit.h"
dflet 0:50cedd586816 8 #include "cli_uart.h"
dflet 0:50cedd586816 9 #include "osi.h"
dflet 0:50cedd586816 10
dflet 0:50cedd586816 11 OsiLockObj_t g_printLock;
dflet 0:50cedd586816 12
dflet 0:50cedd586816 13 #if (THIS_BOARD == Seeed_Arch_Max)
dflet 0:50cedd586816 14 Serial uart(PC_6, PC_7);//uart 6
dflet 14:90603ea1e85b 15 //Serial uart(USBTX, USBRX);
dflet 0:50cedd586816 16 #elif (THIS_BOARD == EA_MBED_LPC4088)
dflet 0:50cedd586816 17 Serial uart(p37, p31);
dflet 0:50cedd586816 18 #endif
dflet 0:50cedd586816 19
dflet 0:50cedd586816 20 int Uart_Write(unsigned char *inBuff)
dflet 0:50cedd586816 21 {
dflet 0:50cedd586816 22 uint16_t ret, ecount, usLength = strlen((const char *)inBuff);
dflet 0:50cedd586816 23 ecount = 0;
dflet 0:50cedd586816 24 ret = 0;
dflet 0:50cedd586816 25
dflet 0:50cedd586816 26 while(!(uart.writeable())){ecount++;if(ecount>3000)break;};
dflet 0:50cedd586816 27
dflet 0:50cedd586816 28 if(uart.writeable()) {
dflet 0:50cedd586816 29
dflet 0:50cedd586816 30 if(inBuff == NULL) {
dflet 0:50cedd586816 31 printf("Uart Write buffer empty\r\n");
dflet 0:50cedd586816 32 return -1;
dflet 0:50cedd586816 33 }
dflet 0:50cedd586816 34
dflet 0:50cedd586816 35 RTOS_MUTEX_ACQUIRE(&g_printLock);
dflet 0:50cedd586816 36 ret = usLength;
dflet 0:50cedd586816 37
dflet 0:50cedd586816 38 while (usLength) {
dflet 0:50cedd586816 39 uart.putc(*inBuff);
dflet 0:50cedd586816 40 usLength--;
dflet 0:50cedd586816 41 inBuff++;
dflet 0:50cedd586816 42 }
dflet 0:50cedd586816 43
dflet 0:50cedd586816 44 RTOS_MUTEX_RELEASE(&g_printLock);
dflet 0:50cedd586816 45 } else {
dflet 0:50cedd586816 46 printf("Uart Write failed [uart not writeable] now trying printf\r\n");
dflet 0:50cedd586816 47 while (usLength) {
dflet 0:50cedd586816 48 printf("%c",*inBuff);
dflet 0:50cedd586816 49 usLength--;
dflet 0:50cedd586816 50 inBuff++;
dflet 0:50cedd586816 51 }
dflet 0:50cedd586816 52 return -1;
dflet 0:50cedd586816 53 }
dflet 0:50cedd586816 54
dflet 0:50cedd586816 55 return (int)ret;
dflet 0:50cedd586816 56
dflet 0:50cedd586816 57 }
dflet 0:50cedd586816 58
dflet 0:50cedd586816 59 void CLI_Configure(void)
dflet 0:50cedd586816 60 {
dflet 15:5433f9d94cd7 61 uart.baud(115200);
dflet 0:50cedd586816 62
dflet 0:50cedd586816 63 RTOS_MUTEX_CREATE(&g_printLock);
dflet 0:50cedd586816 64
dflet 0:50cedd586816 65 }
dflet 0:50cedd586816 66
dflet 0:50cedd586816 67 //*****************************************************************************
dflet 0:50cedd586816 68 //
dflet 0:50cedd586816 69 //! prints the formatted string on to the console
dflet 0:50cedd586816 70 //!
dflet 0:50cedd586816 71 //! \param format is a pointer to the character string specifying the format in
dflet 0:50cedd586816 72 //! the following arguments need to be interpreted.
dflet 0:50cedd586816 73 //! \param [variable number of] arguments according to the format in the first
dflet 0:50cedd586816 74 //! parameters
dflet 0:50cedd586816 75 //! This function
dflet 0:50cedd586816 76 //! 1. prints the formatted error statement.
dflet 0:50cedd586816 77 //!
dflet 0:50cedd586816 78 //! \return count of characters printed
dflet 0:50cedd586816 79 //
dflet 0:50cedd586816 80 //*****************************************************************************
dflet 0:50cedd586816 81 int Report(const char *pcFormat, ...)
dflet 0:50cedd586816 82 {
dflet 0:50cedd586816 83 int iRet = 0;
dflet 0:50cedd586816 84 //#ifndef NOTERM
dflet 0:50cedd586816 85
dflet 0:50cedd586816 86 char *pcBuff, *pcTemp;
dflet 0:50cedd586816 87 int iSize = 256;
dflet 0:50cedd586816 88
dflet 0:50cedd586816 89 va_list list;
dflet 0:50cedd586816 90 pcBuff = (char*)malloc(iSize);
dflet 0:50cedd586816 91 if(pcBuff == NULL)
dflet 0:50cedd586816 92 {
dflet 0:50cedd586816 93 return -1;
dflet 0:50cedd586816 94 }
dflet 0:50cedd586816 95 while(1)
dflet 0:50cedd586816 96 {
dflet 0:50cedd586816 97 va_start(list,pcFormat);
dflet 0:50cedd586816 98 iRet = vsnprintf((char*)pcBuff,iSize,pcFormat,list);
dflet 0:50cedd586816 99 va_end(list);
dflet 0:50cedd586816 100 if(iRet > -1 && iRet < iSize)
dflet 0:50cedd586816 101 {
dflet 0:50cedd586816 102 break;
dflet 0:50cedd586816 103 }
dflet 0:50cedd586816 104 else
dflet 0:50cedd586816 105 {
dflet 0:50cedd586816 106 iSize*=2;
dflet 0:50cedd586816 107 if((pcTemp=(char*)realloc(pcBuff,iSize))==NULL)
dflet 0:50cedd586816 108 {
dflet 0:50cedd586816 109 Message("Could not reallocate memory\n\r");
dflet 0:50cedd586816 110 iRet = -1;
dflet 0:50cedd586816 111 break;
dflet 0:50cedd586816 112 }
dflet 0:50cedd586816 113 else
dflet 0:50cedd586816 114 {
dflet 0:50cedd586816 115 pcBuff=pcTemp;
dflet 0:50cedd586816 116 }
dflet 0:50cedd586816 117
dflet 0:50cedd586816 118 }
dflet 0:50cedd586816 119 }
dflet 0:50cedd586816 120 Message(pcBuff);
dflet 0:50cedd586816 121 free(pcBuff);
dflet 0:50cedd586816 122
dflet 0:50cedd586816 123 //#endif
dflet 0:50cedd586816 124 return iRet;
dflet 0:50cedd586816 125 }
dflet 0:50cedd586816 126
dflet 0:50cedd586816 127 //*****************************************************************************
dflet 0:50cedd586816 128 //
dflet 0:50cedd586816 129 //! Outputs a character string to the console
dflet 0:50cedd586816 130 //!
dflet 0:50cedd586816 131 //! \param str is the pointer to the string to be printed
dflet 0:50cedd586816 132 //!
dflet 0:50cedd586816 133 //! This function
dflet 0:50cedd586816 134 //! 1. prints the input string character by character on to the console.
dflet 0:50cedd586816 135 //!
dflet 0:50cedd586816 136 //! \return none
dflet 0:50cedd586816 137 //
dflet 0:50cedd586816 138 //*****************************************************************************
dflet 0:50cedd586816 139 void
dflet 0:50cedd586816 140 Message(const char *str)
dflet 0:50cedd586816 141 {
dflet 0:50cedd586816 142
dflet 0:50cedd586816 143 uint16_t ecount = 0;
dflet 0:50cedd586816 144
dflet 0:50cedd586816 145 //#ifndef NOTERM
dflet 0:50cedd586816 146 while(!(uart.writeable())){ecount++;if(ecount>3000)break;};
dflet 0:50cedd586816 147
dflet 0:50cedd586816 148 if(uart.writeable()) {
dflet 0:50cedd586816 149
dflet 0:50cedd586816 150 if(str != NULL){
dflet 0:50cedd586816 151 RTOS_MUTEX_ACQUIRE(&g_printLock);
dflet 0:50cedd586816 152 while(*str!='\0')
dflet 0:50cedd586816 153 {
dflet 0:50cedd586816 154 uart.putc(*str++);
dflet 0:50cedd586816 155 }
dflet 0:50cedd586816 156 RTOS_MUTEX_RELEASE(&g_printLock);
dflet 0:50cedd586816 157 }
dflet 0:50cedd586816 158 }
dflet 0:50cedd586816 159 //#endif
dflet 0:50cedd586816 160 }
dflet 0:50cedd586816 161
dflet 0:50cedd586816 162