StarBoard Orange - Example application No.1 GoogleChartLogger with StarBoard Orange
Dependencies: EthernetNetIf mbed
GoogleChart/GoogleChart.cpp@0:77d8b45a8f42, 2010-08-11 (annotated)
- Committer:
- shintamainjp
- Date:
- Wed Aug 11 01:53:35 2010 +0000
- Revision:
- 0:77d8b45a8f42
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:77d8b45a8f42 | 1 | /** |
shintamainjp | 0:77d8b45a8f42 | 2 | * GoogleChart API interface driver. (Version 0.0.1) |
shintamainjp | 0:77d8b45a8f42 | 3 | * |
shintamainjp | 0:77d8b45a8f42 | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 0:77d8b45a8f42 | 5 | * http://shinta.main.jp/ |
shintamainjp | 0:77d8b45a8f42 | 6 | */ |
shintamainjp | 0:77d8b45a8f42 | 7 | |
shintamainjp | 0:77d8b45a8f42 | 8 | #include "GoogleChart.h" |
shintamainjp | 0:77d8b45a8f42 | 9 | |
shintamainjp | 0:77d8b45a8f42 | 10 | const std::string GoogleChart::baseURL = "http://chart.apis.google.com/chart"; |
shintamainjp | 0:77d8b45a8f42 | 11 | |
shintamainjp | 0:77d8b45a8f42 | 12 | GoogleChart::GoogleChart() : title(""), width(300), height(225) { |
shintamainjp | 0:77d8b45a8f42 | 13 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 14 | axislist[i] = 0; |
shintamainjp | 0:77d8b45a8f42 | 15 | } |
shintamainjp | 0:77d8b45a8f42 | 16 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 17 | datalist[i] = 0; |
shintamainjp | 0:77d8b45a8f42 | 18 | } |
shintamainjp | 0:77d8b45a8f42 | 19 | } |
shintamainjp | 0:77d8b45a8f42 | 20 | |
shintamainjp | 0:77d8b45a8f42 | 21 | GoogleChart::~GoogleChart() {} |
shintamainjp | 0:77d8b45a8f42 | 22 | |
shintamainjp | 0:77d8b45a8f42 | 23 | int GoogleChart::addNewAxis(Axis::Type type) { |
shintamainjp | 0:77d8b45a8f42 | 24 | /* |
shintamainjp | 0:77d8b45a8f42 | 25 | * Search maximum number of axis. |
shintamainjp | 0:77d8b45a8f42 | 26 | */ |
shintamainjp | 0:77d8b45a8f42 | 27 | int max = 0; |
shintamainjp | 0:77d8b45a8f42 | 28 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 29 | if (0 != axislist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 30 | if (axislist[i]->getNumber() > max) { |
shintamainjp | 0:77d8b45a8f42 | 31 | max = axislist[i]->getNumber(); |
shintamainjp | 0:77d8b45a8f42 | 32 | } |
shintamainjp | 0:77d8b45a8f42 | 33 | } |
shintamainjp | 0:77d8b45a8f42 | 34 | } |
shintamainjp | 0:77d8b45a8f42 | 35 | |
shintamainjp | 0:77d8b45a8f42 | 36 | /* |
shintamainjp | 0:77d8b45a8f42 | 37 | * Create a new axis. |
shintamainjp | 0:77d8b45a8f42 | 38 | */ |
shintamainjp | 0:77d8b45a8f42 | 39 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 40 | if (0 == axislist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 41 | axislist[i] = new Axis(max + 1, type); |
shintamainjp | 0:77d8b45a8f42 | 42 | return max + 1; |
shintamainjp | 0:77d8b45a8f42 | 43 | } |
shintamainjp | 0:77d8b45a8f42 | 44 | } |
shintamainjp | 0:77d8b45a8f42 | 45 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 46 | } |
shintamainjp | 0:77d8b45a8f42 | 47 | |
shintamainjp | 0:77d8b45a8f42 | 48 | int GoogleChart::setAxisType(const int number, Axis::Type type) { |
shintamainjp | 0:77d8b45a8f42 | 49 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 50 | if (0 != axislist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 51 | if (axislist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 52 | axislist[i]->setType(type); |
shintamainjp | 0:77d8b45a8f42 | 53 | return number; |
shintamainjp | 0:77d8b45a8f42 | 54 | } |
shintamainjp | 0:77d8b45a8f42 | 55 | } |
shintamainjp | 0:77d8b45a8f42 | 56 | } |
shintamainjp | 0:77d8b45a8f42 | 57 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 58 | } |
shintamainjp | 0:77d8b45a8f42 | 59 | |
shintamainjp | 0:77d8b45a8f42 | 60 | int GoogleChart::setAxisRange(const int number, int rangeStart, int rangeEnd) { |
shintamainjp | 0:77d8b45a8f42 | 61 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 62 | if (0 != axislist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 63 | if (axislist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 64 | axislist[i]->setRangeStart(rangeStart); |
shintamainjp | 0:77d8b45a8f42 | 65 | axislist[i]->setRangeEnd(rangeEnd); |
shintamainjp | 0:77d8b45a8f42 | 66 | return number; |
shintamainjp | 0:77d8b45a8f42 | 67 | } |
shintamainjp | 0:77d8b45a8f42 | 68 | } |
shintamainjp | 0:77d8b45a8f42 | 69 | } |
shintamainjp | 0:77d8b45a8f42 | 70 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 71 | } |
shintamainjp | 0:77d8b45a8f42 | 72 | |
shintamainjp | 0:77d8b45a8f42 | 73 | int GoogleChart::removeAxis(const int number) { |
shintamainjp | 0:77d8b45a8f42 | 74 | for (int i = 0; i < MAX_AXIS; i++) { |
shintamainjp | 0:77d8b45a8f42 | 75 | if (0 != axislist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 76 | if (axislist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 77 | delete axislist[i]; |
shintamainjp | 0:77d8b45a8f42 | 78 | axislist[i] = 0; |
shintamainjp | 0:77d8b45a8f42 | 79 | return number; |
shintamainjp | 0:77d8b45a8f42 | 80 | } |
shintamainjp | 0:77d8b45a8f42 | 81 | } |
shintamainjp | 0:77d8b45a8f42 | 82 | } |
shintamainjp | 0:77d8b45a8f42 | 83 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 84 | } |
shintamainjp | 0:77d8b45a8f42 | 85 | |
shintamainjp | 0:77d8b45a8f42 | 86 | int GoogleChart::addNewDataSet(std::string label, const int size) { |
shintamainjp | 0:77d8b45a8f42 | 87 | /* |
shintamainjp | 0:77d8b45a8f42 | 88 | * Search maximum number of data set. |
shintamainjp | 0:77d8b45a8f42 | 89 | */ |
shintamainjp | 0:77d8b45a8f42 | 90 | int max = 0; |
shintamainjp | 0:77d8b45a8f42 | 91 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 92 | if (0 != datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 93 | if (datalist[i]->getNumber() > max) { |
shintamainjp | 0:77d8b45a8f42 | 94 | max = datalist[i]->getNumber(); |
shintamainjp | 0:77d8b45a8f42 | 95 | } |
shintamainjp | 0:77d8b45a8f42 | 96 | } |
shintamainjp | 0:77d8b45a8f42 | 97 | } |
shintamainjp | 0:77d8b45a8f42 | 98 | |
shintamainjp | 0:77d8b45a8f42 | 99 | /* |
shintamainjp | 0:77d8b45a8f42 | 100 | * Create a new data set. |
shintamainjp | 0:77d8b45a8f42 | 101 | */ |
shintamainjp | 0:77d8b45a8f42 | 102 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 103 | if (0 == datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 104 | datalist[i] = new DataSet(label, max + 1, size); |
shintamainjp | 0:77d8b45a8f42 | 105 | return max + 1; |
shintamainjp | 0:77d8b45a8f42 | 106 | } |
shintamainjp | 0:77d8b45a8f42 | 107 | } |
shintamainjp | 0:77d8b45a8f42 | 108 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 109 | } |
shintamainjp | 0:77d8b45a8f42 | 110 | |
shintamainjp | 0:77d8b45a8f42 | 111 | int GoogleChart::removeDataSet(const int number) { |
shintamainjp | 0:77d8b45a8f42 | 112 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 113 | if (0 != datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 114 | if (datalist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 115 | delete datalist[i]; |
shintamainjp | 0:77d8b45a8f42 | 116 | datalist[i] = 0; |
shintamainjp | 0:77d8b45a8f42 | 117 | return number; |
shintamainjp | 0:77d8b45a8f42 | 118 | } |
shintamainjp | 0:77d8b45a8f42 | 119 | } |
shintamainjp | 0:77d8b45a8f42 | 120 | } |
shintamainjp | 0:77d8b45a8f42 | 121 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 122 | } |
shintamainjp | 0:77d8b45a8f42 | 123 | |
shintamainjp | 0:77d8b45a8f42 | 124 | int GoogleChart::addData(const int number, double data) { |
shintamainjp | 0:77d8b45a8f42 | 125 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 126 | if (0 != datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 127 | if (datalist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 128 | datalist[i]->addData(data); |
shintamainjp | 0:77d8b45a8f42 | 129 | return i; |
shintamainjp | 0:77d8b45a8f42 | 130 | } |
shintamainjp | 0:77d8b45a8f42 | 131 | } |
shintamainjp | 0:77d8b45a8f42 | 132 | } |
shintamainjp | 0:77d8b45a8f42 | 133 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 134 | } |
shintamainjp | 0:77d8b45a8f42 | 135 | |
shintamainjp | 0:77d8b45a8f42 | 136 | int GoogleChart::clearAllData(const int number) { |
shintamainjp | 0:77d8b45a8f42 | 137 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 138 | if (0 != datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 139 | if (datalist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 140 | datalist[i]->clearAllData(); |
shintamainjp | 0:77d8b45a8f42 | 141 | return i; |
shintamainjp | 0:77d8b45a8f42 | 142 | } |
shintamainjp | 0:77d8b45a8f42 | 143 | } |
shintamainjp | 0:77d8b45a8f42 | 144 | } |
shintamainjp | 0:77d8b45a8f42 | 145 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 146 | } |
shintamainjp | 0:77d8b45a8f42 | 147 | |
shintamainjp | 0:77d8b45a8f42 | 148 | int GoogleChart::setDataScale(const int number, int min, int max) { |
shintamainjp | 0:77d8b45a8f42 | 149 | for (int i = 0; i < MAX_DATA; i++) { |
shintamainjp | 0:77d8b45a8f42 | 150 | if (0 != datalist[i]) { |
shintamainjp | 0:77d8b45a8f42 | 151 | if (datalist[i]->getNumber() == number) { |
shintamainjp | 0:77d8b45a8f42 | 152 | datalist[i]->setScale(min, max); |
shintamainjp | 0:77d8b45a8f42 | 153 | return i; |
shintamainjp | 0:77d8b45a8f42 | 154 | } |
shintamainjp | 0:77d8b45a8f42 | 155 | } |
shintamainjp | 0:77d8b45a8f42 | 156 | } |
shintamainjp | 0:77d8b45a8f42 | 157 | return -1; |
shintamainjp | 0:77d8b45a8f42 | 158 | } |
shintamainjp | 0:77d8b45a8f42 | 159 | |
shintamainjp | 0:77d8b45a8f42 | 160 | void GoogleChart::setTitle(std::string title) { |
shintamainjp | 0:77d8b45a8f42 | 161 | GoogleChart::title = title; |
shintamainjp | 0:77d8b45a8f42 | 162 | } |
shintamainjp | 0:77d8b45a8f42 | 163 | |
shintamainjp | 0:77d8b45a8f42 | 164 | std::string GoogleChart::getTitle() const { |
shintamainjp | 0:77d8b45a8f42 | 165 | return title; |
shintamainjp | 0:77d8b45a8f42 | 166 | } |
shintamainjp | 0:77d8b45a8f42 | 167 | |
shintamainjp | 0:77d8b45a8f42 | 168 | void GoogleChart::setWidth(int width) { |
shintamainjp | 0:77d8b45a8f42 | 169 | GoogleChart::width = width; |
shintamainjp | 0:77d8b45a8f42 | 170 | } |
shintamainjp | 0:77d8b45a8f42 | 171 | |
shintamainjp | 0:77d8b45a8f42 | 172 | int GoogleChart::getWidth() const { |
shintamainjp | 0:77d8b45a8f42 | 173 | return width; |
shintamainjp | 0:77d8b45a8f42 | 174 | } |
shintamainjp | 0:77d8b45a8f42 | 175 | |
shintamainjp | 0:77d8b45a8f42 | 176 | void GoogleChart::setHeight(int height) { |
shintamainjp | 0:77d8b45a8f42 | 177 | GoogleChart::height = height; |
shintamainjp | 0:77d8b45a8f42 | 178 | } |
shintamainjp | 0:77d8b45a8f42 | 179 | |
shintamainjp | 0:77d8b45a8f42 | 180 | int GoogleChart::getHeight() const { |
shintamainjp | 0:77d8b45a8f42 | 181 | return height; |
shintamainjp | 0:77d8b45a8f42 | 182 | } |
shintamainjp | 0:77d8b45a8f42 | 183 | |
shintamainjp | 0:77d8b45a8f42 | 184 | std::string GoogleChart::toURL(std::string text) { |
shintamainjp | 0:77d8b45a8f42 | 185 | static const char *unsafe_characters = " \"<>#%{}|\\^~[]`"; |
shintamainjp | 0:77d8b45a8f42 | 186 | std::string s = ""; |
shintamainjp | 0:77d8b45a8f42 | 187 | for (int i = 0; i < text.length(); i++) { |
shintamainjp | 0:77d8b45a8f42 | 188 | char c = text.at(i); |
shintamainjp | 0:77d8b45a8f42 | 189 | if (strchr(unsafe_characters, c) == NULL) { |
shintamainjp | 0:77d8b45a8f42 | 190 | s = s + c; |
shintamainjp | 0:77d8b45a8f42 | 191 | } else { |
shintamainjp | 0:77d8b45a8f42 | 192 | char buf[8]; |
shintamainjp | 0:77d8b45a8f42 | 193 | snprintf(buf, sizeof(buf), "%%%02X", c & 0xff); |
shintamainjp | 0:77d8b45a8f42 | 194 | s = s + std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 195 | } |
shintamainjp | 0:77d8b45a8f42 | 196 | } |
shintamainjp | 0:77d8b45a8f42 | 197 | return s; |
shintamainjp | 0:77d8b45a8f42 | 198 | } |
shintamainjp | 0:77d8b45a8f42 | 199 | |
shintamainjp | 0:77d8b45a8f42 | 200 | std::string GoogleChart::paramChartType(ChartType chartType) { |
shintamainjp | 0:77d8b45a8f42 | 201 | /* |
shintamainjp | 0:77d8b45a8f42 | 202 | * Chart Type. |
shintamainjp | 0:77d8b45a8f42 | 203 | */ |
shintamainjp | 0:77d8b45a8f42 | 204 | std::string s = "cht="; |
shintamainjp | 0:77d8b45a8f42 | 205 | switch (chartType) { |
shintamainjp | 0:77d8b45a8f42 | 206 | case LineChart: |
shintamainjp | 0:77d8b45a8f42 | 207 | s = s + "lc"; |
shintamainjp | 0:77d8b45a8f42 | 208 | break; |
shintamainjp | 0:77d8b45a8f42 | 209 | default: |
shintamainjp | 0:77d8b45a8f42 | 210 | s = s + "unknown"; |
shintamainjp | 0:77d8b45a8f42 | 211 | break; |
shintamainjp | 0:77d8b45a8f42 | 212 | } |
shintamainjp | 0:77d8b45a8f42 | 213 | return s; |
shintamainjp | 0:77d8b45a8f42 | 214 | } |
shintamainjp | 0:77d8b45a8f42 | 215 | |
shintamainjp | 0:77d8b45a8f42 | 216 | std::string GoogleChart::paramAxis(Axis **list, int size) { |
shintamainjp | 0:77d8b45a8f42 | 217 | |
shintamainjp | 0:77d8b45a8f42 | 218 | char buf[64]; |
shintamainjp | 0:77d8b45a8f42 | 219 | /* |
shintamainjp | 0:77d8b45a8f42 | 220 | * Axis type and range. |
shintamainjp | 0:77d8b45a8f42 | 221 | */ |
shintamainjp | 0:77d8b45a8f42 | 222 | int cnt = 0; |
shintamainjp | 0:77d8b45a8f42 | 223 | std::string sType = "chxt="; |
shintamainjp | 0:77d8b45a8f42 | 224 | std::string sRange = "chxr="; |
shintamainjp | 0:77d8b45a8f42 | 225 | for (int i = 0; i < size; i++) { |
shintamainjp | 0:77d8b45a8f42 | 226 | Axis *p = list[i]; |
shintamainjp | 0:77d8b45a8f42 | 227 | if (0 != p) { |
shintamainjp | 0:77d8b45a8f42 | 228 | /* |
shintamainjp | 0:77d8b45a8f42 | 229 | * Type. |
shintamainjp | 0:77d8b45a8f42 | 230 | */ |
shintamainjp | 0:77d8b45a8f42 | 231 | if (0 < cnt) { |
shintamainjp | 0:77d8b45a8f42 | 232 | sType = sType + ","; |
shintamainjp | 0:77d8b45a8f42 | 233 | } |
shintamainjp | 0:77d8b45a8f42 | 234 | switch (p->getType()) { |
shintamainjp | 0:77d8b45a8f42 | 235 | case Axis::Bottom: |
shintamainjp | 0:77d8b45a8f42 | 236 | sType = sType + "x"; |
shintamainjp | 0:77d8b45a8f42 | 237 | break; |
shintamainjp | 0:77d8b45a8f42 | 238 | case Axis::Left: |
shintamainjp | 0:77d8b45a8f42 | 239 | sType = sType + "y"; |
shintamainjp | 0:77d8b45a8f42 | 240 | break; |
shintamainjp | 0:77d8b45a8f42 | 241 | case Axis::Right: |
shintamainjp | 0:77d8b45a8f42 | 242 | sType = sType + "r"; |
shintamainjp | 0:77d8b45a8f42 | 243 | break; |
shintamainjp | 0:77d8b45a8f42 | 244 | case Axis::Top: |
shintamainjp | 0:77d8b45a8f42 | 245 | sType = sType + "t"; |
shintamainjp | 0:77d8b45a8f42 | 246 | break; |
shintamainjp | 0:77d8b45a8f42 | 247 | default: |
shintamainjp | 0:77d8b45a8f42 | 248 | sType = sType + "?"; |
shintamainjp | 0:77d8b45a8f42 | 249 | break; |
shintamainjp | 0:77d8b45a8f42 | 250 | } |
shintamainjp | 0:77d8b45a8f42 | 251 | /* |
shintamainjp | 0:77d8b45a8f42 | 252 | * Range. |
shintamainjp | 0:77d8b45a8f42 | 253 | */ |
shintamainjp | 0:77d8b45a8f42 | 254 | if (0 < cnt) { |
shintamainjp | 0:77d8b45a8f42 | 255 | sRange = sRange + "|"; |
shintamainjp | 0:77d8b45a8f42 | 256 | } |
shintamainjp | 0:77d8b45a8f42 | 257 | snprintf(buf, sizeof(buf), "%d,%d,%d", cnt, p->getRangeStart(), p->getRangeEnd()); |
shintamainjp | 0:77d8b45a8f42 | 258 | sRange = sRange + std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 259 | /* |
shintamainjp | 0:77d8b45a8f42 | 260 | * Next. |
shintamainjp | 0:77d8b45a8f42 | 261 | */ |
shintamainjp | 0:77d8b45a8f42 | 262 | cnt++; |
shintamainjp | 0:77d8b45a8f42 | 263 | } |
shintamainjp | 0:77d8b45a8f42 | 264 | } |
shintamainjp | 0:77d8b45a8f42 | 265 | |
shintamainjp | 0:77d8b45a8f42 | 266 | return sRange + "&" + sType; |
shintamainjp | 0:77d8b45a8f42 | 267 | } |
shintamainjp | 0:77d8b45a8f42 | 268 | |
shintamainjp | 0:77d8b45a8f42 | 269 | std::string GoogleChart::paramDataSet(DataSet **list, int size) { |
shintamainjp | 0:77d8b45a8f42 | 270 | char buf[64]; |
shintamainjp | 0:77d8b45a8f42 | 271 | int cnt = 0; |
shintamainjp | 0:77d8b45a8f42 | 272 | std::string sData = "chd=t:"; |
shintamainjp | 0:77d8b45a8f42 | 273 | std::string sScale = "chds="; |
shintamainjp | 0:77d8b45a8f42 | 274 | std::string sLabel = "chdl="; |
shintamainjp | 0:77d8b45a8f42 | 275 | for (int i = 0; i < size; i++) { |
shintamainjp | 0:77d8b45a8f42 | 276 | DataSet *p = list[i]; |
shintamainjp | 0:77d8b45a8f42 | 277 | if (0 != p) { |
shintamainjp | 0:77d8b45a8f42 | 278 | /* |
shintamainjp | 0:77d8b45a8f42 | 279 | * Data. |
shintamainjp | 0:77d8b45a8f42 | 280 | */ |
shintamainjp | 0:77d8b45a8f42 | 281 | if (0 < cnt) { |
shintamainjp | 0:77d8b45a8f42 | 282 | sData = sData + "|"; |
shintamainjp | 0:77d8b45a8f42 | 283 | } |
shintamainjp | 0:77d8b45a8f42 | 284 | for (int i = 0; i < p->getDataCount(); i++) { |
shintamainjp | 0:77d8b45a8f42 | 285 | double d = p->getData(i); |
shintamainjp | 0:77d8b45a8f42 | 286 | snprintf(buf, sizeof(buf), "%.3f", d); |
shintamainjp | 0:77d8b45a8f42 | 287 | if (0 < i) { |
shintamainjp | 0:77d8b45a8f42 | 288 | sData = sData + ","; |
shintamainjp | 0:77d8b45a8f42 | 289 | } |
shintamainjp | 0:77d8b45a8f42 | 290 | sData = sData + std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 291 | } |
shintamainjp | 0:77d8b45a8f42 | 292 | /* |
shintamainjp | 0:77d8b45a8f42 | 293 | * Range. |
shintamainjp | 0:77d8b45a8f42 | 294 | */ |
shintamainjp | 0:77d8b45a8f42 | 295 | if (0 < cnt) { |
shintamainjp | 0:77d8b45a8f42 | 296 | sScale = sScale + ","; |
shintamainjp | 0:77d8b45a8f42 | 297 | } |
shintamainjp | 0:77d8b45a8f42 | 298 | snprintf(buf, sizeof(buf), "%.3f,%.3f", p->getMin(), p->getMax()); |
shintamainjp | 0:77d8b45a8f42 | 299 | sScale = sScale + std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 300 | /* |
shintamainjp | 0:77d8b45a8f42 | 301 | * Label. |
shintamainjp | 0:77d8b45a8f42 | 302 | */ |
shintamainjp | 0:77d8b45a8f42 | 303 | if (0 < cnt) { |
shintamainjp | 0:77d8b45a8f42 | 304 | sLabel = sLabel + "|"; |
shintamainjp | 0:77d8b45a8f42 | 305 | } |
shintamainjp | 0:77d8b45a8f42 | 306 | sLabel = sLabel + p->getLabel(); |
shintamainjp | 0:77d8b45a8f42 | 307 | /* |
shintamainjp | 0:77d8b45a8f42 | 308 | * Next. |
shintamainjp | 0:77d8b45a8f42 | 309 | */ |
shintamainjp | 0:77d8b45a8f42 | 310 | cnt++; |
shintamainjp | 0:77d8b45a8f42 | 311 | } |
shintamainjp | 0:77d8b45a8f42 | 312 | } |
shintamainjp | 0:77d8b45a8f42 | 313 | |
shintamainjp | 0:77d8b45a8f42 | 314 | return sScale + "&" + sData + "&" + sLabel; |
shintamainjp | 0:77d8b45a8f42 | 315 | } |
shintamainjp | 0:77d8b45a8f42 | 316 | |
shintamainjp | 0:77d8b45a8f42 | 317 | std::string GoogleChart::paramTitle(std::string title, int color, double fontSize) { |
shintamainjp | 0:77d8b45a8f42 | 318 | char buf[64]; |
shintamainjp | 0:77d8b45a8f42 | 319 | std::string s = ""; |
shintamainjp | 0:77d8b45a8f42 | 320 | /* |
shintamainjp | 0:77d8b45a8f42 | 321 | * Chart Title Text. |
shintamainjp | 0:77d8b45a8f42 | 322 | */ |
shintamainjp | 0:77d8b45a8f42 | 323 | s = s + "chtt=" + title; |
shintamainjp | 0:77d8b45a8f42 | 324 | /* |
shintamainjp | 0:77d8b45a8f42 | 325 | * Chart Title Specification. |
shintamainjp | 0:77d8b45a8f42 | 326 | */ |
shintamainjp | 0:77d8b45a8f42 | 327 | snprintf(buf, sizeof(buf), "&chts=%06X,%.1f", color, fontSize); |
shintamainjp | 0:77d8b45a8f42 | 328 | s = s + std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 329 | return s; |
shintamainjp | 0:77d8b45a8f42 | 330 | } |
shintamainjp | 0:77d8b45a8f42 | 331 | |
shintamainjp | 0:77d8b45a8f42 | 332 | std::string GoogleChart::paramSize(int width, int height) { |
shintamainjp | 0:77d8b45a8f42 | 333 | char buf[64]; |
shintamainjp | 0:77d8b45a8f42 | 334 | /* |
shintamainjp | 0:77d8b45a8f42 | 335 | * Chart Size. |
shintamainjp | 0:77d8b45a8f42 | 336 | */ |
shintamainjp | 0:77d8b45a8f42 | 337 | snprintf(buf, sizeof(buf), "chs=%dx%d", width, height); |
shintamainjp | 0:77d8b45a8f42 | 338 | return std::string(buf); |
shintamainjp | 0:77d8b45a8f42 | 339 | } |