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:
Wed Jun 24 09:54:16 2015 +0000
Revision:
0:50cedd586816
Child:
14:90603ea1e85b
First commit work in progress

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