pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

Committer:
Rhyme
Date:
Wed Oct 18 00:31:13 2017 +0000
Revision:
23:e4d2316383a1
Parent:
5:9d5c7ee80f3b
pwm period is now 200us from default 20ms; veml6040->setCOLORCOnf is now AF_BIT | TRIG_BIT from 0x00;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wataloh 0:20bce0dcc921 1 /**
wataloh 0:20bce0dcc921 2 * Copyright 2015 Afero, Inc.
wataloh 0:20bce0dcc921 3 *
wataloh 0:20bce0dcc921 4 * Licensed under the Apache License, Version 2.0 (the "License");
wataloh 0:20bce0dcc921 5 * you may not use this file except in compliance with the License.
wataloh 0:20bce0dcc921 6 * You may obtain a copy of the License at
wataloh 0:20bce0dcc921 7 *
wataloh 0:20bce0dcc921 8 * http://www.apache.org/licenses/LICENSE-2.0
wataloh 0:20bce0dcc921 9 *
wataloh 0:20bce0dcc921 10 * Unless required by applicable law or agreed to in writing, software
wataloh 0:20bce0dcc921 11 * distributed under the License is distributed on an "AS IS" BASIS,
wataloh 0:20bce0dcc921 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
wataloh 0:20bce0dcc921 13 * See the License for the specific language governing permissions and
wataloh 0:20bce0dcc921 14 * limitations under the License.
wataloh 0:20bce0dcc921 15 */
wataloh 0:20bce0dcc921 16
wataloh 0:20bce0dcc921 17 //wsugi #include "Arduino.h"
wataloh 0:20bce0dcc921 18 #include "mbed.h"
wataloh 0:20bce0dcc921 19 #include <stdio.h>
wataloh 0:20bce0dcc921 20 #include "Command.h"
wataloh 0:20bce0dcc921 21 #include "msg_types.h"
wataloh 5:9d5c7ee80f3b 22 #include "DebugIO.hpp"
wataloh 0:20bce0dcc921 23
wataloh 0:20bce0dcc921 24 #define CMD_HDR_LEN 4 // 4 byte header on all commands
wataloh 0:20bce0dcc921 25 #define CMD_VAL_LEN 2 // 2 byte value length for commands that have a value
wataloh 0:20bce0dcc921 26
wataloh 0:20bce0dcc921 27 const char *CMD_NAMES[] = {"SET ", "GET ", "UPDATE"};
wataloh 0:20bce0dcc921 28
wataloh 0:20bce0dcc921 29
wataloh 0:20bce0dcc921 30 Command::Command(uint16_t len, uint8_t *bytes) {
wataloh 0:20bce0dcc921 31 int index = 0;
wataloh 0:20bce0dcc921 32
wataloh 0:20bce0dcc921 33 _cmd = bytes[index++];
wataloh 0:20bce0dcc921 34 _requestId = bytes[index++];
wataloh 0:20bce0dcc921 35 _attrId = bytes[index + 0] | bytes[index + 1] << 8;
wataloh 0:20bce0dcc921 36 index += 2;
wataloh 0:20bce0dcc921 37
wataloh 0:20bce0dcc921 38 if (_cmd == MSG_TYPE_GET) {
wataloh 0:20bce0dcc921 39 return;
wataloh 0:20bce0dcc921 40 }
wataloh 0:20bce0dcc921 41 if (_cmd == MSG_TYPE_UPDATE) {
wataloh 0:20bce0dcc921 42 _status = bytes[index++];
wataloh 0:20bce0dcc921 43 _reason = bytes[index++];
wataloh 0:20bce0dcc921 44 }
wataloh 0:20bce0dcc921 45
wataloh 0:20bce0dcc921 46 _valueLen = bytes[index + 0] | bytes[index + 1] << 8;
wataloh 0:20bce0dcc921 47 index += 2;
wataloh 0:20bce0dcc921 48 _value = new uint8_t[_valueLen];
wataloh 0:20bce0dcc921 49 for (int i = 0; i < _valueLen; i++) {
wataloh 0:20bce0dcc921 50 _value[i] = bytes[index + i];
wataloh 0:20bce0dcc921 51 }
wataloh 0:20bce0dcc921 52 }
wataloh 0:20bce0dcc921 53
wataloh 0:20bce0dcc921 54 Command::Command(uint8_t requestId, const char *str) {
wataloh 0:20bce0dcc921 55 _requestId = requestId & 0xff;
wataloh 0:20bce0dcc921 56
wataloh 0:20bce0dcc921 57 char *cp; //wsugi = strdup(str);
wataloh 0:20bce0dcc921 58 //wsugi 00 start
wataloh 0:20bce0dcc921 59 {
wataloh 0:20bce0dcc921 60 int length = strlen(str)+1;
wataloh 0:20bce0dcc921 61 cp = (char*)malloc(length);
wataloh 0:20bce0dcc921 62 strcpy(cp,str);
wataloh 0:20bce0dcc921 63 }
wataloh 0:20bce0dcc921 64 //wsugi 00 end
wataloh 0:20bce0dcc921 65 char *tok = strtok(cp, " ");
wataloh 0:20bce0dcc921 66 _cmd = strToCmd(tok);
wataloh 0:20bce0dcc921 67
wataloh 0:20bce0dcc921 68 tok = strtok(NULL, " ");
wataloh 0:20bce0dcc921 69 _attrId = strToAttrId(tok);
wataloh 0:20bce0dcc921 70
wataloh 0:20bce0dcc921 71 if (_cmd == MSG_TYPE_GET) {
wataloh 0:20bce0dcc921 72 _valueLen = 0;
wataloh 0:20bce0dcc921 73 _value = NULL;
wataloh 0:20bce0dcc921 74 } else {
wataloh 0:20bce0dcc921 75 tok = strtok(NULL, " ");
wataloh 0:20bce0dcc921 76 _valueLen = strlen(tok) / 2;
wataloh 0:20bce0dcc921 77 _value = new uint8_t[_valueLen];
wataloh 0:20bce0dcc921 78 strToValue(tok, _value);
wataloh 0:20bce0dcc921 79 }
wataloh 0:20bce0dcc921 80
wataloh 0:20bce0dcc921 81 free(cp);
wataloh 0:20bce0dcc921 82 }
wataloh 0:20bce0dcc921 83
wataloh 0:20bce0dcc921 84 Command::Command(uint8_t requestId, uint8_t cmd, uint16_t attrId) {
wataloh 0:20bce0dcc921 85 _requestId = requestId;
wataloh 0:20bce0dcc921 86 _cmd = cmd;
wataloh 0:20bce0dcc921 87 _attrId = attrId;
wataloh 0:20bce0dcc921 88 _valueLen = 0;
wataloh 0:20bce0dcc921 89 _value = NULL;
wataloh 0:20bce0dcc921 90 }
wataloh 0:20bce0dcc921 91
wataloh 0:20bce0dcc921 92 Command::Command(uint8_t requestId, uint8_t cmd, uint16_t attrId, uint16_t valueLen, uint8_t *value) {
wataloh 0:20bce0dcc921 93 _requestId = requestId;
wataloh 0:20bce0dcc921 94 _cmd = cmd;
wataloh 0:20bce0dcc921 95 _attrId = attrId;
wataloh 0:20bce0dcc921 96 _valueLen = valueLen;
wataloh 0:20bce0dcc921 97 _value = new uint8_t[_valueLen];
wataloh 0:20bce0dcc921 98 memcpy(_value, value, valueLen);
wataloh 0:20bce0dcc921 99 }
wataloh 0:20bce0dcc921 100
wataloh 0:20bce0dcc921 101 Command::Command(uint8_t requestId, uint8_t cmd, uint16_t attrId, uint8_t status, uint8_t reason, uint16_t valueLen,
wataloh 0:20bce0dcc921 102 uint8_t *value) {
wataloh 0:20bce0dcc921 103 _requestId = requestId;
wataloh 0:20bce0dcc921 104 _cmd = cmd;
wataloh 0:20bce0dcc921 105 _attrId = attrId;
wataloh 0:20bce0dcc921 106 _status = status;
wataloh 0:20bce0dcc921 107 _reason = reason;
wataloh 0:20bce0dcc921 108 _valueLen = valueLen;
wataloh 0:20bce0dcc921 109 _value = new uint8_t[_valueLen];
wataloh 0:20bce0dcc921 110 memcpy(_value, value, valueLen);
wataloh 0:20bce0dcc921 111 }
wataloh 0:20bce0dcc921 112
wataloh 0:20bce0dcc921 113 Command::Command() {
wataloh 0:20bce0dcc921 114 }
wataloh 0:20bce0dcc921 115
wataloh 0:20bce0dcc921 116 Command::~Command() {
wataloh 0:20bce0dcc921 117 if (_value != NULL) {
wataloh 2:dfe671e31221 118 delete[] _value; //wsugi delete (_value);
wataloh 0:20bce0dcc921 119 }
wataloh 0:20bce0dcc921 120 }
wataloh 0:20bce0dcc921 121
wataloh 0:20bce0dcc921 122 int Command::strToValue(char *valueStr, uint8_t *value) {
wataloh 0:20bce0dcc921 123 for (int i = 0; i < (int) (strlen(valueStr) / 2); i++) {
wataloh 0:20bce0dcc921 124 int j = i * 2;
wataloh 0:20bce0dcc921 125 value[i] = getVal(valueStr[j + 1]) + (getVal(valueStr[j]) << 4);
wataloh 0:20bce0dcc921 126 }
wataloh 0:20bce0dcc921 127
wataloh 0:20bce0dcc921 128 return 0;
wataloh 0:20bce0dcc921 129 }
wataloh 0:20bce0dcc921 130
wataloh 0:20bce0dcc921 131 uint16_t Command::strToAttrId(char *attrIdStr) {
wataloh 0:20bce0dcc921 132 return atoi(attrIdStr);
wataloh 0:20bce0dcc921 133 //return String(attrIdStr).toInt();
wataloh 0:20bce0dcc921 134 }
wataloh 0:20bce0dcc921 135
wataloh 0:20bce0dcc921 136 uint8_t Command::strToCmd(char *cmdStr) {
wataloh 0:20bce0dcc921 137 char c = cmdStr[0];
wataloh 0:20bce0dcc921 138 if (c == 'g' || c == 'G') {
wataloh 0:20bce0dcc921 139 return MSG_TYPE_GET;
wataloh 0:20bce0dcc921 140 } else if (c == 's' || c == 'S') {
wataloh 0:20bce0dcc921 141 return MSG_TYPE_SET;
wataloh 0:20bce0dcc921 142 } else if (c == 'u' || c == 'U') {
wataloh 0:20bce0dcc921 143 return MSG_TYPE_UPDATE;
wataloh 0:20bce0dcc921 144 }
wataloh 0:20bce0dcc921 145
wataloh 0:20bce0dcc921 146 return -1;
wataloh 0:20bce0dcc921 147 }
wataloh 0:20bce0dcc921 148
wataloh 0:20bce0dcc921 149 uint8_t Command::getCommand() {
wataloh 0:20bce0dcc921 150 return _cmd;
wataloh 0:20bce0dcc921 151 }
wataloh 0:20bce0dcc921 152
wataloh 0:20bce0dcc921 153 uint8_t Command::getReqId() {
wataloh 0:20bce0dcc921 154 return _requestId;
wataloh 0:20bce0dcc921 155 }
wataloh 0:20bce0dcc921 156
wataloh 0:20bce0dcc921 157 uint16_t Command::getAttrId() {
wataloh 0:20bce0dcc921 158 return _attrId;
wataloh 0:20bce0dcc921 159 }
wataloh 0:20bce0dcc921 160
wataloh 0:20bce0dcc921 161 uint16_t Command::getValueLen() {
wataloh 0:20bce0dcc921 162 return _valueLen;
wataloh 0:20bce0dcc921 163 }
wataloh 0:20bce0dcc921 164
wataloh 0:20bce0dcc921 165 void Command::getValue(uint8_t *value) {
wataloh 0:20bce0dcc921 166 for (int i = 0; i < _valueLen; i++) {
wataloh 0:20bce0dcc921 167 value[i] = _value[i];
wataloh 0:20bce0dcc921 168 }
wataloh 0:20bce0dcc921 169 }
wataloh 0:20bce0dcc921 170
wataloh 0:20bce0dcc921 171 uint8_t *Command::getValueP() {
wataloh 0:20bce0dcc921 172 return _value;
wataloh 0:20bce0dcc921 173 }
wataloh 0:20bce0dcc921 174
wataloh 0:20bce0dcc921 175 uint16_t Command::getSize() {
wataloh 0:20bce0dcc921 176 uint16_t len = CMD_HDR_LEN;
wataloh 0:20bce0dcc921 177
wataloh 0:20bce0dcc921 178 if (_cmd != MSG_TYPE_GET) {
wataloh 0:20bce0dcc921 179 len += CMD_VAL_LEN + _valueLen;
wataloh 0:20bce0dcc921 180 }
wataloh 0:20bce0dcc921 181
wataloh 0:20bce0dcc921 182 if (_cmd == MSG_TYPE_UPDATE) {
wataloh 0:20bce0dcc921 183 len += 2; // status byte + reason byte
wataloh 0:20bce0dcc921 184 }
wataloh 0:20bce0dcc921 185
wataloh 0:20bce0dcc921 186 return len;
wataloh 0:20bce0dcc921 187 }
wataloh 0:20bce0dcc921 188
wataloh 0:20bce0dcc921 189 uint16_t Command::getBytes(uint8_t *bytes) {
wataloh 0:20bce0dcc921 190 uint16_t len = getSize();
wataloh 0:20bce0dcc921 191
wataloh 0:20bce0dcc921 192 int index = 0;
wataloh 0:20bce0dcc921 193
wataloh 0:20bce0dcc921 194 bytes[index++] = (_cmd);
wataloh 0:20bce0dcc921 195
wataloh 0:20bce0dcc921 196 bytes[index++] = (_requestId);
wataloh 0:20bce0dcc921 197
wataloh 0:20bce0dcc921 198 bytes[index++] = (_attrId & 0xff);
wataloh 0:20bce0dcc921 199 bytes[index++] = ((_attrId >> 8) & 0xff);
wataloh 0:20bce0dcc921 200
wataloh 0:20bce0dcc921 201 if (_cmd == MSG_TYPE_GET) {
wataloh 0:20bce0dcc921 202 return len;
wataloh 0:20bce0dcc921 203 }
wataloh 0:20bce0dcc921 204
wataloh 0:20bce0dcc921 205 if (_cmd == MSG_TYPE_UPDATE) {
wataloh 0:20bce0dcc921 206 bytes[index++] = (_status);
wataloh 0:20bce0dcc921 207 bytes[index++] = (_reason);
wataloh 0:20bce0dcc921 208 }
wataloh 0:20bce0dcc921 209
wataloh 0:20bce0dcc921 210 bytes[index++] = (_valueLen & 0xff);
wataloh 0:20bce0dcc921 211 bytes[index++] = ((_valueLen >> 8) & 0xff);
wataloh 0:20bce0dcc921 212
wataloh 0:20bce0dcc921 213 for (int i = 0; i < _valueLen; i++) {
wataloh 0:20bce0dcc921 214 bytes[index++] = (_value[i]);
wataloh 0:20bce0dcc921 215 }
wataloh 0:20bce0dcc921 216
wataloh 0:20bce0dcc921 217 return len;
wataloh 0:20bce0dcc921 218 }
wataloh 0:20bce0dcc921 219
wataloh 0:20bce0dcc921 220 bool Command::isValid() {
wataloh 0:20bce0dcc921 221 return (_cmd == MSG_TYPE_SET) || (_cmd == MSG_TYPE_GET) || (_cmd == MSG_TYPE_UPDATE);
wataloh 0:20bce0dcc921 222 }
wataloh 0:20bce0dcc921 223
wataloh 0:20bce0dcc921 224 void Command::dumpBytes() {
wataloh 0:20bce0dcc921 225 uint16_t len = getSize();
wataloh 0:20bce0dcc921 226 uint8_t bytes[len];
wataloh 0:20bce0dcc921 227 getBytes(bytes);
wataloh 0:20bce0dcc921 228
wataloh 0:20bce0dcc921 229 _printBuf[0] = 0;
wataloh 0:20bce0dcc921 230 sprintf(_printBuf, "len: %d value: ", len);
wataloh 0:20bce0dcc921 231 for (int i = 0; i < len; i++) {
wataloh 0:20bce0dcc921 232 int b = bytes[i] & 0xff;
wataloh 0:20bce0dcc921 233 sprintf(&_printBuf[strlen(_printBuf)], "%02x", b);
wataloh 0:20bce0dcc921 234 }
wataloh 1:b2a9a6f2c30e 235 SERIAL_PRINT_DBG_ASR("%s\n",_printBuf);
wataloh 0:20bce0dcc921 236 }
wataloh 0:20bce0dcc921 237
wataloh 0:20bce0dcc921 238 void Command::dump() {
wataloh 0:20bce0dcc921 239 _printBuf[0] = 0;
wataloh 0:20bce0dcc921 240 sprintf(_printBuf, "cmd: %s attr: %d value: ",
wataloh 0:20bce0dcc921 241 CMD_NAMES[_cmd - MESSAGE_CHANNEL_BASE - 1],
wataloh 0:20bce0dcc921 242 _attrId
wataloh 0:20bce0dcc921 243 );
wataloh 0:20bce0dcc921 244 if (_cmd != MSG_TYPE_GET) {
wataloh 0:20bce0dcc921 245 for (int i = 0; i < _valueLen; i++) {
wataloh 0:20bce0dcc921 246 int b = _value[i] & 0xff;
wataloh 0:20bce0dcc921 247 sprintf(&_printBuf[strlen(_printBuf)], "%02x", b);
wataloh 0:20bce0dcc921 248 }
wataloh 0:20bce0dcc921 249 }
wataloh 1:b2a9a6f2c30e 250 SERIAL_PRINT_DBG_ASR("%s\n",_printBuf);
wataloh 0:20bce0dcc921 251 }
wataloh 0:20bce0dcc921 252
wataloh 0:20bce0dcc921 253 uint8_t Command::getVal(char c) {
wataloh 0:20bce0dcc921 254 if (c >= '0' && c <= '9')
wataloh 0:20bce0dcc921 255 return (uint8_t)(c - '0');
wataloh 0:20bce0dcc921 256 else if (c >= 'A' && c <= 'F')
wataloh 0:20bce0dcc921 257 return (uint8_t)(c - 'A' + 10);
wataloh 0:20bce0dcc921 258 else if (c >= 'a' && c <= 'f')
wataloh 0:20bce0dcc921 259 return (uint8_t)(c - 'a' + 10);
wataloh 0:20bce0dcc921 260
wataloh 5:9d5c7ee80f3b 261 SERIAL_PRINT_DBG_ASR("bad hex char: %c\n",c);
wataloh 0:20bce0dcc921 262
wataloh 0:20bce0dcc921 263 return 0;
wataloh 0:20bce0dcc921 264 }