The code from https://github.com/vpcola/Nucleo

Committer:
sinrab
Date:
Wed Oct 08 11:00:24 2014 +0000
Revision:
0:5464d5e415e5
The code from https://github.com/vpcola/Nucleo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sinrab 0:5464d5e415e5 1 #include "Utility.h"
sinrab 0:5464d5e415e5 2 #include <stdlib.h>
sinrab 0:5464d5e415e5 3 #include <stdio.h>
sinrab 0:5464d5e415e5 4 #include <string.h>
sinrab 0:5464d5e415e5 5 #include <stdarg.h>
sinrab 0:5464d5e415e5 6 #include <string>
sinrab 0:5464d5e415e5 7 #include <cctype>
sinrab 0:5464d5e415e5 8 #include <algorithm>
sinrab 0:5464d5e415e5 9
sinrab 0:5464d5e415e5 10 extern I2C i2c;
sinrab 0:5464d5e415e5 11
sinrab 0:5464d5e415e5 12 static void DisplayBuffer(Stream * chp, char * buff)
sinrab 0:5464d5e415e5 13 {
sinrab 0:5464d5e415e5 14 int i = 0;
sinrab 0:5464d5e415e5 15 while(buff[i] != 0)
sinrab 0:5464d5e415e5 16 {
sinrab 0:5464d5e415e5 17 char c = buff[i];
sinrab 0:5464d5e415e5 18 if (c == '\n') {
sinrab 0:5464d5e415e5 19 chp->printf("\r%c", c);
sinrab 0:5464d5e415e5 20 break;
sinrab 0:5464d5e415e5 21 }
sinrab 0:5464d5e415e5 22 else
sinrab 0:5464d5e415e5 23 chp->printf("%c", c);
sinrab 0:5464d5e415e5 24
sinrab 0:5464d5e415e5 25 i++;
sinrab 0:5464d5e415e5 26 }
sinrab 0:5464d5e415e5 27 }
sinrab 0:5464d5e415e5 28
sinrab 0:5464d5e415e5 29
sinrab 0:5464d5e415e5 30 static int DisplayHeap(void* pBuffer, char const* pFormatString, ...)
sinrab 0:5464d5e415e5 31 {
sinrab 0:5464d5e415e5 32 char* pStringEnd = (char*)pBuffer + strlen((char*)pBuffer);
sinrab 0:5464d5e415e5 33 va_list valist;
sinrab 0:5464d5e415e5 34
sinrab 0:5464d5e415e5 35 va_start(valist, pFormatString);
sinrab 0:5464d5e415e5 36
sinrab 0:5464d5e415e5 37 return vsprintf(pStringEnd, pFormatString, valist);
sinrab 0:5464d5e415e5 38 }
sinrab 0:5464d5e415e5 39
sinrab 0:5464d5e415e5 40
sinrab 0:5464d5e415e5 41 void heapinfo(Stream * chp) {
sinrab 0:5464d5e415e5 42 char OutputBuffer[256];
sinrab 0:5464d5e415e5 43 chp->printf("Build Date/Time: %s %s\r\n", __DATE__, __TIME__);
sinrab 0:5464d5e415e5 44 chp->printf("Current Stack : 0x%08X\r\n", __current_sp());
sinrab 0:5464d5e415e5 45 chp->printf("Current Heap : 0x%08X\r\n", __current_pc());
sinrab 0:5464d5e415e5 46
sinrab 0:5464d5e415e5 47 OutputBuffer[0] = '\0';
sinrab 0:5464d5e415e5 48 typedef int (*__heapprt)(void *, char const *, ...);
sinrab 0:5464d5e415e5 49 __heapstats( (__heapprt)DisplayHeap, OutputBuffer ) ;
sinrab 0:5464d5e415e5 50 chp->printf("Available Memory: ");
sinrab 0:5464d5e415e5 51 DisplayBuffer(chp, OutputBuffer);
sinrab 0:5464d5e415e5 52 }
sinrab 0:5464d5e415e5 53
sinrab 0:5464d5e415e5 54 char *_strtok(char *str, const char *delim, char **saveptr)
sinrab 0:5464d5e415e5 55 {
sinrab 0:5464d5e415e5 56 char *token;
sinrab 0:5464d5e415e5 57 if (str)
sinrab 0:5464d5e415e5 58 *saveptr = str;
sinrab 0:5464d5e415e5 59 token = *saveptr;
sinrab 0:5464d5e415e5 60
sinrab 0:5464d5e415e5 61 if (!token)
sinrab 0:5464d5e415e5 62 return NULL;
sinrab 0:5464d5e415e5 63
sinrab 0:5464d5e415e5 64 token += strspn(token, delim);
sinrab 0:5464d5e415e5 65 *saveptr = strpbrk(token, delim);
sinrab 0:5464d5e415e5 66 if (*saveptr)
sinrab 0:5464d5e415e5 67 *(*saveptr)++ = '\0';
sinrab 0:5464d5e415e5 68
sinrab 0:5464d5e415e5 69 return *token ? token : NULL;
sinrab 0:5464d5e415e5 70 }
sinrab 0:5464d5e415e5 71
sinrab 0:5464d5e415e5 72 void split( vector<string> & theStringVector, /* Altered/returned value */
sinrab 0:5464d5e415e5 73 const string & theString,
sinrab 0:5464d5e415e5 74 const string & theDelimiter)
sinrab 0:5464d5e415e5 75 {
sinrab 0:5464d5e415e5 76 size_t start = 0, end = 0;
sinrab 0:5464d5e415e5 77 while ( end != string::npos)
sinrab 0:5464d5e415e5 78 {
sinrab 0:5464d5e415e5 79 end = theString.find( theDelimiter, start);
sinrab 0:5464d5e415e5 80
sinrab 0:5464d5e415e5 81 // If at end, use length=maxLength. Else use length=end-start.
sinrab 0:5464d5e415e5 82 theStringVector.push_back( theString.substr( start,
sinrab 0:5464d5e415e5 83 (end == string::npos) ? string::npos : end - start));
sinrab 0:5464d5e415e5 84
sinrab 0:5464d5e415e5 85 // If at end, use start=maxSize. Else use start=end+delimiter.
sinrab 0:5464d5e415e5 86 start = ( ( end > (string::npos - theDelimiter.size()) )
sinrab 0:5464d5e415e5 87 ? string::npos : end + theDelimiter.size());
sinrab 0:5464d5e415e5 88 }
sinrab 0:5464d5e415e5 89 }
sinrab 0:5464d5e415e5 90
sinrab 0:5464d5e415e5 91 std::string trim(const std::string& str,
sinrab 0:5464d5e415e5 92 const std::string& whitespace)
sinrab 0:5464d5e415e5 93 {
sinrab 0:5464d5e415e5 94 size_t strBegin = str.find_first_not_of(whitespace);
sinrab 0:5464d5e415e5 95 if (strBegin == std::string::npos)
sinrab 0:5464d5e415e5 96 return ""; // no content
sinrab 0:5464d5e415e5 97
sinrab 0:5464d5e415e5 98 size_t strEnd = str.find_last_not_of(whitespace);
sinrab 0:5464d5e415e5 99 size_t strRange = strEnd - strBegin + 1;
sinrab 0:5464d5e415e5 100
sinrab 0:5464d5e415e5 101 return str.substr(strBegin, strRange);
sinrab 0:5464d5e415e5 102 }
sinrab 0:5464d5e415e5 103
sinrab 0:5464d5e415e5 104 static void transform_if_first_of_word( char& c )
sinrab 0:5464d5e415e5 105 {
sinrab 0:5464d5e415e5 106 // if the previous character was a space, transform it toupper
sinrab 0:5464d5e415e5 107 if( (*(&c - sizeof(char))) == ' ')
sinrab 0:5464d5e415e5 108 c = toupper( c );
sinrab 0:5464d5e415e5 109 }
sinrab 0:5464d5e415e5 110
sinrab 0:5464d5e415e5 111 void capitalize_word_start(std::string & str)
sinrab 0:5464d5e415e5 112 {
sinrab 0:5464d5e415e5 113 str[ 0 ] = toupper( str[ 0 ]);
sinrab 0:5464d5e415e5 114
sinrab 0:5464d5e415e5 115 std::for_each( str.begin()+1, str.end(), transform_if_first_of_word );
sinrab 0:5464d5e415e5 116 }
sinrab 0:5464d5e415e5 117
sinrab 0:5464d5e415e5 118 void set_ctrl_panel(int paneladdr, uint8_t value)
sinrab 0:5464d5e415e5 119 {
sinrab 0:5464d5e415e5 120 char cmd[2];
sinrab 0:5464d5e415e5 121 uint8_t addr;
sinrab 0:5464d5e415e5 122
sinrab 0:5464d5e415e5 123 switch(paneladdr)
sinrab 0:5464d5e415e5 124 {
sinrab 0:5464d5e415e5 125 case 0:
sinrab 0:5464d5e415e5 126 addr = I2C_CTR_PANEL_ADDR;
sinrab 0:5464d5e415e5 127 cmd[0] = 0x12;
sinrab 0:5464d5e415e5 128 break;
sinrab 0:5464d5e415e5 129 case 1:
sinrab 0:5464d5e415e5 130 addr = I2C_CTR_PANEL_ADDR;
sinrab 0:5464d5e415e5 131 cmd[0] = 0x13;
sinrab 0:5464d5e415e5 132 break;
sinrab 0:5464d5e415e5 133 default:
sinrab 0:5464d5e415e5 134 // don't set anything for non-existing address
sinrab 0:5464d5e415e5 135 return;
sinrab 0:5464d5e415e5 136 }
sinrab 0:5464d5e415e5 137
sinrab 0:5464d5e415e5 138 cmd[1] = value;
sinrab 0:5464d5e415e5 139
sinrab 0:5464d5e415e5 140 i2c.write(addr, cmd, 2);
sinrab 0:5464d5e415e5 141 }
sinrab 0:5464d5e415e5 142
sinrab 0:5464d5e415e5 143
sinrab 0:5464d5e415e5 144