library for enebular edge agent board(version p1)

Dependents:   ina-hack-2nd

Committer:
koyo_take
Date:
Sat Aug 26 08:58:38 2017 +0000
Revision:
0:c6b2a8ace823
Child:
1:da9fd2252ed5
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
koyo_take 0:c6b2a8ace823 1 #include "Eeabp1.h"
koyo_take 0:c6b2a8ace823 2 //#include "rtos.h"
koyo_take 0:c6b2a8ace823 3
koyo_take 0:c6b2a8ace823 4 //Thread thread;
koyo_take 0:c6b2a8ace823 5 static const int lora_msg_max_len = 11;
koyo_take 0:c6b2a8ace823 6
koyo_take 0:c6b2a8ace823 7 Eeabp1::Eeabp1() : pwr_en(P0_0), led(P0_23),
koyo_take 0:c6b2a8ace823 8 lora_power(P0_5), lora_reset(P0_22), grove_power(P0_6),
koyo_take 0:c6b2a8ace823 9 grv_sel2a(P0_19), grv_sel2g(P0_18), grv_sel1a(P0_17), grv_sel1g(P0_16),
koyo_take 0:c6b2a8ace823 10 grv_p1s1a(P0_2), grv_p1s2a(P0_1),
koyo_take 0:c6b2a8ace823 11 grv_p2s1a(P0_4), grv_p2s2a(P0_3)
koyo_take 0:c6b2a8ace823 12 {
koyo_take 0:c6b2a8ace823 13 this->led_state = LED_OFF;
koyo_take 0:c6b2a8ace823 14 this->led = 0;
koyo_take 0:c6b2a8ace823 15 this->serial = new RawSerial(P0_9, P0_11);
koyo_take 0:c6b2a8ace823 16 this->serial->baud(9600); /* use for LoRa */
koyo_take 0:c6b2a8ace823 17 this->pwr_en = 1; // メイン電源投入
koyo_take 0:c6b2a8ace823 18 this->lora_power = 0;
koyo_take 0:c6b2a8ace823 19 this->lora_reset = 0;
koyo_take 0:c6b2a8ace823 20 this->grove_power = 0;
koyo_take 0:c6b2a8ace823 21 this->lora_enabled = false;
koyo_take 0:c6b2a8ace823 22 this->grove_enabled = false;
koyo_take 0:c6b2a8ace823 23 // Grove端子をHiZに
koyo_take 0:c6b2a8ace823 24 this->grv_sel1g = 1;
koyo_take 0:c6b2a8ace823 25 this->grv_sel1a = 1;
koyo_take 0:c6b2a8ace823 26 this->grv_sel2g = 1;
koyo_take 0:c6b2a8ace823 27 this->grv_sel2a = 1;
koyo_take 0:c6b2a8ace823 28 grv_p1s1do = NULL, grv_p1s2do = NULL, grv_p1s1di = NULL, grv_p1s2di = NULL;
koyo_take 0:c6b2a8ace823 29 grv_p2s1do = NULL, grv_p2s2do = NULL, grv_p2s1di = NULL, grv_p2s2di = NULL;
koyo_take 0:c6b2a8ace823 30 temp_humid_sensor = NULL;
koyo_take 0:c6b2a8ace823 31 }
koyo_take 0:c6b2a8ace823 32
koyo_take 0:c6b2a8ace823 33 int Eeabp1::setLedState(EeabLedState state)
koyo_take 0:c6b2a8ace823 34 {
koyo_take 0:c6b2a8ace823 35 this->led_state = state;
koyo_take 0:c6b2a8ace823 36
koyo_take 0:c6b2a8ace823 37 if (this->led_state == LED_OFF) {
koyo_take 0:c6b2a8ace823 38 this->led = 0;
koyo_take 0:c6b2a8ace823 39 } else {
koyo_take 0:c6b2a8ace823 40 this->led = 1;
koyo_take 0:c6b2a8ace823 41 }
koyo_take 0:c6b2a8ace823 42
koyo_take 0:c6b2a8ace823 43 return 0;
koyo_take 0:c6b2a8ace823 44 }
koyo_take 0:c6b2a8ace823 45
koyo_take 0:c6b2a8ace823 46 void Eeabp1::loop(void)
koyo_take 0:c6b2a8ace823 47 {
koyo_take 0:c6b2a8ace823 48 switch (this->led_state) {
koyo_take 0:c6b2a8ace823 49 case LED_OFF:
koyo_take 0:c6b2a8ace823 50 /* fall through */
koyo_take 0:c6b2a8ace823 51 case LED_ON:
koyo_take 0:c6b2a8ace823 52 break;
koyo_take 0:c6b2a8ace823 53 case LED_BLINK_FAST:
koyo_take 0:c6b2a8ace823 54 case LED_BLINK_MID:
koyo_take 0:c6b2a8ace823 55 case LED_BLINK_SLOW:
koyo_take 0:c6b2a8ace823 56 this->led = !this->led;
koyo_take 0:c6b2a8ace823 57 break;
koyo_take 0:c6b2a8ace823 58 }
koyo_take 0:c6b2a8ace823 59 }
koyo_take 0:c6b2a8ace823 60
koyo_take 0:c6b2a8ace823 61 int Eeabp1::debug(const char * format, ...)
koyo_take 0:c6b2a8ace823 62 {
koyo_take 0:c6b2a8ace823 63 char tmp[80];
koyo_take 0:c6b2a8ace823 64 int ret;
koyo_take 0:c6b2a8ace823 65
koyo_take 0:c6b2a8ace823 66 std::va_list arg;
koyo_take 0:c6b2a8ace823 67 va_start(arg, format);
koyo_take 0:c6b2a8ace823 68 vsnprintf(tmp, sizeof(tmp), format, arg);
koyo_take 0:c6b2a8ace823 69 va_end(arg);
koyo_take 0:c6b2a8ace823 70
koyo_take 0:c6b2a8ace823 71 delete this->serial;
koyo_take 0:c6b2a8ace823 72 this->serial = new RawSerial(P0_8, P0_10);
koyo_take 0:c6b2a8ace823 73 ret = this->serial->puts(tmp);
koyo_take 0:c6b2a8ace823 74 delete this->serial;
koyo_take 0:c6b2a8ace823 75 this->serial = new RawSerial(P0_9, P0_11);
koyo_take 0:c6b2a8ace823 76
koyo_take 0:c6b2a8ace823 77 return ret;
koyo_take 0:c6b2a8ace823 78 }
koyo_take 0:c6b2a8ace823 79
koyo_take 0:c6b2a8ace823 80 int Eeabp1::setLoRaPower(bool on)
koyo_take 0:c6b2a8ace823 81 {
koyo_take 0:c6b2a8ace823 82 int ret;
koyo_take 0:c6b2a8ace823 83
koyo_take 0:c6b2a8ace823 84 if (on) {
koyo_take 0:c6b2a8ace823 85 if (lora_enabled)
koyo_take 0:c6b2a8ace823 86 return 0; /* power is already on, do nothing */
koyo_take 0:c6b2a8ace823 87
koyo_take 0:c6b2a8ace823 88 this->lora_power= 1;
koyo_take 0:c6b2a8ace823 89 this->lora_reset = 1;
koyo_take 0:c6b2a8ace823 90 wait_us(500000);
koyo_take 0:c6b2a8ace823 91 serial->printf("mod set_echo off\r\n"); // ローカルエコー:無効
koyo_take 0:c6b2a8ace823 92 wait(1);
koyo_take 0:c6b2a8ace823 93 flushSerial();
koyo_take 0:c6b2a8ace823 94 serial->printf("mod factory_reset\r\n"); // ファクトリーリセットを行い鍵をリフレッシュ
koyo_take 0:c6b2a8ace823 95 ret = chkSerialCharOk();
koyo_take 0:c6b2a8ace823 96 if (ret != 0)
koyo_take 0:c6b2a8ace823 97 return ret;
koyo_take 0:c6b2a8ace823 98 serial->printf("mod set_echo off\r\n"); // ローカルエコー:無効
koyo_take 0:c6b2a8ace823 99 wait(1);
koyo_take 0:c6b2a8ace823 100 serial->printf("lorawan join otaa\r\n"); // Gatewayに接続(OTAA)
koyo_take 0:c6b2a8ace823 101 ret = chkSerialCharRes('a'); // 成功 ">> accepted" 失敗 ">> unsuccess"
koyo_take 0:c6b2a8ace823 102 if (ret != 0)
koyo_take 0:c6b2a8ace823 103 return ret;
koyo_take 0:c6b2a8ace823 104 serial->printf("lorawan set_dr 2\r\n"); // データレートの設定(11byte)
koyo_take 0:c6b2a8ace823 105 ret = chkSerialCharOk();
koyo_take 0:c6b2a8ace823 106 if (ret != 0)
koyo_take 0:c6b2a8ace823 107 return ret;
koyo_take 0:c6b2a8ace823 108
koyo_take 0:c6b2a8ace823 109 this->lora_enabled = true;
koyo_take 0:c6b2a8ace823 110 } else { /* off */
koyo_take 0:c6b2a8ace823 111 if (!lora_enabled)
koyo_take 0:c6b2a8ace823 112 return 0; /* power is already off, do nothing */
koyo_take 0:c6b2a8ace823 113
koyo_take 0:c6b2a8ace823 114 lora_power= 0;
koyo_take 0:c6b2a8ace823 115 lora_enabled = false;
koyo_take 0:c6b2a8ace823 116 }
koyo_take 0:c6b2a8ace823 117
koyo_take 0:c6b2a8ace823 118 return 0;
koyo_take 0:c6b2a8ace823 119 }
koyo_take 0:c6b2a8ace823 120
koyo_take 0:c6b2a8ace823 121 int Eeabp1::sendLoRaString(const char * format, ...)
koyo_take 0:c6b2a8ace823 122 {
koyo_take 0:c6b2a8ace823 123 char str[lora_msg_max_len+1] = {0x00, };
koyo_take 0:c6b2a8ace823 124 char msg[64];
koyo_take 0:c6b2a8ace823 125 char *p = msg;
koyo_take 0:c6b2a8ace823 126
koyo_take 0:c6b2a8ace823 127 std::va_list arg;
koyo_take 0:c6b2a8ace823 128 va_start(arg, format);
koyo_take 0:c6b2a8ace823 129 vsnprintf(str, sizeof(str), format, arg);
koyo_take 0:c6b2a8ace823 130 va_end(arg);
koyo_take 0:c6b2a8ace823 131
koyo_take 0:c6b2a8ace823 132 p += sprintf(msg, "lorawan tx ucnf 16 ");
koyo_take 0:c6b2a8ace823 133 for (unsigned int i = 0; i < strlen(str); i++) {
koyo_take 0:c6b2a8ace823 134 p += sprintf(p, "%02x", str[i]);
koyo_take 0:c6b2a8ace823 135 }
koyo_take 0:c6b2a8ace823 136 sprintf(p, "\r\n");
koyo_take 0:c6b2a8ace823 137
koyo_take 0:c6b2a8ace823 138 flushSerial();
koyo_take 0:c6b2a8ace823 139 serial->puts(msg);
koyo_take 0:c6b2a8ace823 140
koyo_take 0:c6b2a8ace823 141 return 0;
koyo_take 0:c6b2a8ace823 142 }
koyo_take 0:c6b2a8ace823 143
koyo_take 0:c6b2a8ace823 144 int Eeabp1::sendLoRaBinary(const char *payload, size_t len)
koyo_take 0:c6b2a8ace823 145 {
koyo_take 0:c6b2a8ace823 146 char msg[64];
koyo_take 0:c6b2a8ace823 147 char *p = msg;
koyo_take 0:c6b2a8ace823 148
koyo_take 0:c6b2a8ace823 149 if (lora_msg_max_len < len)
koyo_take 0:c6b2a8ace823 150 return -1;
koyo_take 0:c6b2a8ace823 151
koyo_take 0:c6b2a8ace823 152 p += sprintf(msg, "lorawan tx ucnf 16 ");
koyo_take 0:c6b2a8ace823 153 for (unsigned int i = 0; i < len; i++) {
koyo_take 0:c6b2a8ace823 154 p += sprintf(p, "%02x", payload[i]);
koyo_take 0:c6b2a8ace823 155 }
koyo_take 0:c6b2a8ace823 156 sprintf(p, "\r\n");
koyo_take 0:c6b2a8ace823 157
koyo_take 0:c6b2a8ace823 158 flushSerial();
koyo_take 0:c6b2a8ace823 159 serial->puts(msg);
koyo_take 0:c6b2a8ace823 160
koyo_take 0:c6b2a8ace823 161 return 0;
koyo_take 0:c6b2a8ace823 162 }
koyo_take 0:c6b2a8ace823 163
koyo_take 0:c6b2a8ace823 164 void Eeabp1::setGrovePower(bool on)
koyo_take 0:c6b2a8ace823 165 {
koyo_take 0:c6b2a8ace823 166 if (on) {
koyo_take 0:c6b2a8ace823 167 if (grove_enabled)
koyo_take 0:c6b2a8ace823 168 return; /* power is already on, do nothing */
koyo_take 0:c6b2a8ace823 169
koyo_take 0:c6b2a8ace823 170 grove_power = 1;
koyo_take 0:c6b2a8ace823 171 } else {
koyo_take 0:c6b2a8ace823 172 if (!grove_enabled)
koyo_take 0:c6b2a8ace823 173 return; /* power is already off, do nothing */
koyo_take 0:c6b2a8ace823 174
koyo_take 0:c6b2a8ace823 175 // Grove端子をHiZに
koyo_take 0:c6b2a8ace823 176 grv_sel1g = 1;
koyo_take 0:c6b2a8ace823 177 grv_sel1a = 1;
koyo_take 0:c6b2a8ace823 178 grv_sel2g = 1;
koyo_take 0:c6b2a8ace823 179 grv_sel2a = 1;
koyo_take 0:c6b2a8ace823 180 grove_power = 0;
koyo_take 0:c6b2a8ace823 181 }
koyo_take 0:c6b2a8ace823 182 }
koyo_take 0:c6b2a8ace823 183
koyo_take 0:c6b2a8ace823 184 int Eeabp1::setGrovePortType(EeabGrovePort port, EeabGrovePortType type)
koyo_take 0:c6b2a8ace823 185 {
koyo_take 0:c6b2a8ace823 186 switch (port) {
koyo_take 0:c6b2a8ace823 187 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 188 if (type == GROVE_ANALOG) {
koyo_take 0:c6b2a8ace823 189 grv_sel1g = 1;
koyo_take 0:c6b2a8ace823 190 grv_sel1a = 0;
koyo_take 0:c6b2a8ace823 191 } else {
koyo_take 0:c6b2a8ace823 192 grv_sel1g = 0;
koyo_take 0:c6b2a8ace823 193 grv_sel1a = 1;
koyo_take 0:c6b2a8ace823 194 }
koyo_take 0:c6b2a8ace823 195 break;
koyo_take 0:c6b2a8ace823 196 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 197 if (type == GROVE_ANALOG) {
koyo_take 0:c6b2a8ace823 198 grv_sel2g = 1;
koyo_take 0:c6b2a8ace823 199 grv_sel2a = 0;
koyo_take 0:c6b2a8ace823 200 } else {
koyo_take 0:c6b2a8ace823 201 grv_sel2g = 0;
koyo_take 0:c6b2a8ace823 202 grv_sel2a = 1;
koyo_take 0:c6b2a8ace823 203 }
koyo_take 0:c6b2a8ace823 204 break;
koyo_take 0:c6b2a8ace823 205 default:
koyo_take 0:c6b2a8ace823 206 /* do nothing */
koyo_take 0:c6b2a8ace823 207 break;
koyo_take 0:c6b2a8ace823 208 }
koyo_take 0:c6b2a8ace823 209
koyo_take 0:c6b2a8ace823 210 return 0;
koyo_take 0:c6b2a8ace823 211 }
koyo_take 0:c6b2a8ace823 212
koyo_take 0:c6b2a8ace823 213 int Eeabp1::setGroveDioDirection(EeabGrovePort port, EeabGroveDioDirection dir, Callback<void()> f)
koyo_take 0:c6b2a8ace823 214 {
koyo_take 0:c6b2a8ace823 215 switch (port) {
koyo_take 0:c6b2a8ace823 216 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 217 if(dir == GROVE_DIO_OUT) {
koyo_take 0:c6b2a8ace823 218 if (grv_p1s1di) {
koyo_take 0:c6b2a8ace823 219 delete grv_p1s1di;
koyo_take 0:c6b2a8ace823 220 grv_p1s1di = NULL;
koyo_take 0:c6b2a8ace823 221 }
koyo_take 0:c6b2a8ace823 222 grv_p1s1do = new DigitalOut(P0_13);
koyo_take 0:c6b2a8ace823 223
koyo_take 0:c6b2a8ace823 224 if (grv_p1s2di) {
koyo_take 0:c6b2a8ace823 225 delete grv_p1s2di;
koyo_take 0:c6b2a8ace823 226 grv_p1s2di = NULL;
koyo_take 0:c6b2a8ace823 227 }
koyo_take 0:c6b2a8ace823 228 grv_p1s2do = new DigitalOut(P0_12);
koyo_take 0:c6b2a8ace823 229 } else { /* GROVE_DIO_IN */
koyo_take 0:c6b2a8ace823 230 if (grv_p1s1do) {
koyo_take 0:c6b2a8ace823 231 delete grv_p1s1do;
koyo_take 0:c6b2a8ace823 232 grv_p1s1do = NULL;
koyo_take 0:c6b2a8ace823 233 }
koyo_take 0:c6b2a8ace823 234 grv_p1s1di = new InterruptIn(P0_13);
koyo_take 0:c6b2a8ace823 235 if (f)
koyo_take 0:c6b2a8ace823 236 grv_p1s1di->rise(f);
koyo_take 0:c6b2a8ace823 237
koyo_take 0:c6b2a8ace823 238 if (grv_p1s2do) {
koyo_take 0:c6b2a8ace823 239 delete grv_p1s2do;
koyo_take 0:c6b2a8ace823 240 grv_p1s2do = NULL;
koyo_take 0:c6b2a8ace823 241 }
koyo_take 0:c6b2a8ace823 242 grv_p1s2di = new InterruptIn(P0_12);
koyo_take 0:c6b2a8ace823 243 grv_p1s2di->rise(f);
koyo_take 0:c6b2a8ace823 244 }
koyo_take 0:c6b2a8ace823 245 break;
koyo_take 0:c6b2a8ace823 246 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 247 if(dir == GROVE_DIO_OUT) {
koyo_take 0:c6b2a8ace823 248 if (grv_p2s1di) {
koyo_take 0:c6b2a8ace823 249 delete grv_p2s1di;
koyo_take 0:c6b2a8ace823 250 grv_p2s1di = NULL;
koyo_take 0:c6b2a8ace823 251 }
koyo_take 0:c6b2a8ace823 252 grv_p2s1do = new DigitalOut(P0_15);
koyo_take 0:c6b2a8ace823 253
koyo_take 0:c6b2a8ace823 254 if (grv_p2s2di) {
koyo_take 0:c6b2a8ace823 255 delete grv_p2s2di;
koyo_take 0:c6b2a8ace823 256 grv_p2s2di = NULL;
koyo_take 0:c6b2a8ace823 257 }
koyo_take 0:c6b2a8ace823 258 grv_p2s2do = new DigitalOut(P0_14);
koyo_take 0:c6b2a8ace823 259 } else { /* GROVE_DIO_IN */
koyo_take 0:c6b2a8ace823 260 if (grv_p2s1do) {
koyo_take 0:c6b2a8ace823 261 delete grv_p2s1do;
koyo_take 0:c6b2a8ace823 262 grv_p2s1do = NULL;
koyo_take 0:c6b2a8ace823 263 }
koyo_take 0:c6b2a8ace823 264 grv_p2s1di = new InterruptIn(P0_15);
koyo_take 0:c6b2a8ace823 265 if (f)
koyo_take 0:c6b2a8ace823 266 grv_p2s1di->rise(f);
koyo_take 0:c6b2a8ace823 267
koyo_take 0:c6b2a8ace823 268 if (grv_p2s2do) {
koyo_take 0:c6b2a8ace823 269 delete grv_p2s2do;
koyo_take 0:c6b2a8ace823 270 grv_p2s2do = NULL;
koyo_take 0:c6b2a8ace823 271 }
koyo_take 0:c6b2a8ace823 272 grv_p2s2di = new InterruptIn(P0_14);
koyo_take 0:c6b2a8ace823 273 grv_p2s2di->rise(f);
koyo_take 0:c6b2a8ace823 274 }
koyo_take 0:c6b2a8ace823 275 break;
koyo_take 0:c6b2a8ace823 276 default:
koyo_take 0:c6b2a8ace823 277 /* do nothing */
koyo_take 0:c6b2a8ace823 278 break;
koyo_take 0:c6b2a8ace823 279 }
koyo_take 0:c6b2a8ace823 280
koyo_take 0:c6b2a8ace823 281 return 0;
koyo_take 0:c6b2a8ace823 282 }
koyo_take 0:c6b2a8ace823 283
koyo_take 0:c6b2a8ace823 284 int Eeabp1::setGroveDio(EeabGrovePort port, EeabGroveDio val)
koyo_take 0:c6b2a8ace823 285 {
koyo_take 0:c6b2a8ace823 286 switch (port) {
koyo_take 0:c6b2a8ace823 287 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 288 *grv_p1s1do = val;
koyo_take 0:c6b2a8ace823 289 *grv_p1s2do = val;
koyo_take 0:c6b2a8ace823 290 break;
koyo_take 0:c6b2a8ace823 291 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 292 *grv_p2s1do = val;
koyo_take 0:c6b2a8ace823 293 *grv_p2s2do = val;
koyo_take 0:c6b2a8ace823 294 break;
koyo_take 0:c6b2a8ace823 295 default:
koyo_take 0:c6b2a8ace823 296 break;
koyo_take 0:c6b2a8ace823 297 }
koyo_take 0:c6b2a8ace823 298
koyo_take 0:c6b2a8ace823 299 return 0;
koyo_take 0:c6b2a8ace823 300 }
koyo_take 0:c6b2a8ace823 301
koyo_take 0:c6b2a8ace823 302 int Eeabp1::setGroveDio(EeabGrovePort port, EeabGroveSig sig , EeabGroveDio val)
koyo_take 0:c6b2a8ace823 303 {
koyo_take 0:c6b2a8ace823 304 switch (port) {
koyo_take 0:c6b2a8ace823 305 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 306 (sig == GROVE_SIG1) ? *grv_p1s1do = val : *grv_p1s2do = val;
koyo_take 0:c6b2a8ace823 307 break;
koyo_take 0:c6b2a8ace823 308 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 309 (sig == GROVE_SIG1) ? *grv_p2s1do = val : *grv_p2s2do = val;
koyo_take 0:c6b2a8ace823 310 break;
koyo_take 0:c6b2a8ace823 311 default:
koyo_take 0:c6b2a8ace823 312 break;
koyo_take 0:c6b2a8ace823 313 }
koyo_take 0:c6b2a8ace823 314 return 0;
koyo_take 0:c6b2a8ace823 315 }
koyo_take 0:c6b2a8ace823 316
koyo_take 0:c6b2a8ace823 317
koyo_take 0:c6b2a8ace823 318 int Eeabp1::getGroveDio(EeabGrovePort port, EeabGroveSig sig)
koyo_take 0:c6b2a8ace823 319 {
koyo_take 0:c6b2a8ace823 320 switch (port) {
koyo_take 0:c6b2a8ace823 321 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 322 if (grv_p1s1di == NULL)
koyo_take 0:c6b2a8ace823 323 return -1;
koyo_take 0:c6b2a8ace823 324 return (sig == GROVE_SIG1) ?
koyo_take 0:c6b2a8ace823 325 grv_p1s1di->read() : grv_p1s2di->read();
koyo_take 0:c6b2a8ace823 326 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 327 if (grv_p2s1di == NULL)
koyo_take 0:c6b2a8ace823 328 return -1;
koyo_take 0:c6b2a8ace823 329 return (sig == GROVE_SIG1) ?
koyo_take 0:c6b2a8ace823 330 grv_p2s1di->read() : grv_p2s2di->read();
koyo_take 0:c6b2a8ace823 331 default:
koyo_take 0:c6b2a8ace823 332 break;
koyo_take 0:c6b2a8ace823 333 }
koyo_take 0:c6b2a8ace823 334
koyo_take 0:c6b2a8ace823 335 return -1;
koyo_take 0:c6b2a8ace823 336 }
koyo_take 0:c6b2a8ace823 337
koyo_take 0:c6b2a8ace823 338 float Eeabp1::getGroveAnalog(EeabGrovePort port, EeabGroveSig sig)
koyo_take 0:c6b2a8ace823 339 {
koyo_take 0:c6b2a8ace823 340 switch (port) {
koyo_take 0:c6b2a8ace823 341 case GROVE_CH1:
koyo_take 0:c6b2a8ace823 342 return (sig == GROVE_SIG1) ?
koyo_take 0:c6b2a8ace823 343 grv_p1s1a.read() : grv_p1s2a.read();
koyo_take 0:c6b2a8ace823 344 case GROVE_CH2:
koyo_take 0:c6b2a8ace823 345 return (sig == GROVE_SIG1) ?
koyo_take 0:c6b2a8ace823 346 grv_p2s1a.read() : grv_p2s2a.read();
koyo_take 0:c6b2a8ace823 347 default:
koyo_take 0:c6b2a8ace823 348 break;
koyo_take 0:c6b2a8ace823 349 }
koyo_take 0:c6b2a8ace823 350
koyo_take 0:c6b2a8ace823 351 return -1;
koyo_take 0:c6b2a8ace823 352 }
koyo_take 0:c6b2a8ace823 353
koyo_take 0:c6b2a8ace823 354 int Eeabp1::enableTempHumidSensor(void)
koyo_take 0:c6b2a8ace823 355 {
koyo_take 0:c6b2a8ace823 356 temp_humid_sensor = new Sht31(P0_30, P0_7);
koyo_take 0:c6b2a8ace823 357 return 0;
koyo_take 0:c6b2a8ace823 358 }
koyo_take 0:c6b2a8ace823 359
koyo_take 0:c6b2a8ace823 360 float Eeabp1::getTemp(void)
koyo_take 0:c6b2a8ace823 361 {
koyo_take 0:c6b2a8ace823 362 if (!temp_humid_sensor)
koyo_take 0:c6b2a8ace823 363 return -1;
koyo_take 0:c6b2a8ace823 364
koyo_take 0:c6b2a8ace823 365 return temp_humid_sensor->readTemperature();
koyo_take 0:c6b2a8ace823 366 }
koyo_take 0:c6b2a8ace823 367
koyo_take 0:c6b2a8ace823 368 float Eeabp1::getHumid(void)
koyo_take 0:c6b2a8ace823 369 {
koyo_take 0:c6b2a8ace823 370 if (!temp_humid_sensor)
koyo_take 0:c6b2a8ace823 371 return -1;
koyo_take 0:c6b2a8ace823 372
koyo_take 0:c6b2a8ace823 373 return temp_humid_sensor->readHumidity();
koyo_take 0:c6b2a8ace823 374 }
koyo_take 0:c6b2a8ace823 375
koyo_take 0:c6b2a8ace823 376 int Eeabp1::enableAccelerometer(void)
koyo_take 0:c6b2a8ace823 377 {
koyo_take 0:c6b2a8ace823 378 accelerometer = new ADXL345_I2C(P0_30, P0_7);
koyo_take 0:c6b2a8ace823 379
koyo_take 0:c6b2a8ace823 380 this->debug("Device ID is: 0x%02x\n", accelerometer->getDeviceID());
koyo_take 0:c6b2a8ace823 381 wait(.001);
koyo_take 0:c6b2a8ace823 382
koyo_take 0:c6b2a8ace823 383 // These are here to test whether any of the initialization fails. It will print the failure
koyo_take 0:c6b2a8ace823 384 if (accelerometer->setPowerControl(0x00)) {
koyo_take 0:c6b2a8ace823 385 this->debug("didn't intitialize power control\n");
koyo_take 0:c6b2a8ace823 386 return -1;
koyo_take 0:c6b2a8ace823 387 }
koyo_take 0:c6b2a8ace823 388 wait(.001);
koyo_take 0:c6b2a8ace823 389
koyo_take 0:c6b2a8ace823 390 //Full resolution, +/-16g, 4mg/LSB.
koyo_take 0:c6b2a8ace823 391 if(accelerometer->setDataFormatControl(0x0B)) {
koyo_take 0:c6b2a8ace823 392 this->debug("didn't set data format\n");
koyo_take 0:c6b2a8ace823 393 return -1;
koyo_take 0:c6b2a8ace823 394 }
koyo_take 0:c6b2a8ace823 395 wait(.001);
koyo_take 0:c6b2a8ace823 396
koyo_take 0:c6b2a8ace823 397 //3.2kHz data rate.
koyo_take 0:c6b2a8ace823 398 if(accelerometer->setDataRate(ADXL345_3200HZ)) {
koyo_take 0:c6b2a8ace823 399 this->debug("didn't set data rate\n");
koyo_take 0:c6b2a8ace823 400 return -1;
koyo_take 0:c6b2a8ace823 401 }
koyo_take 0:c6b2a8ace823 402 wait(.001);
koyo_take 0:c6b2a8ace823 403
koyo_take 0:c6b2a8ace823 404 //Measurement mode.
koyo_take 0:c6b2a8ace823 405 if(accelerometer->setPowerControl(MeasurementMode)) {
koyo_take 0:c6b2a8ace823 406 this->debug("didn't set the power control to measurement\n");
koyo_take 0:c6b2a8ace823 407 return -1;
koyo_take 0:c6b2a8ace823 408 }
koyo_take 0:c6b2a8ace823 409
koyo_take 0:c6b2a8ace823 410 return 0;
koyo_take 0:c6b2a8ace823 411 }
koyo_take 0:c6b2a8ace823 412
koyo_take 0:c6b2a8ace823 413 int Eeabp1::getAcc(int *x, int *y, int *z)
koyo_take 0:c6b2a8ace823 414 {
koyo_take 0:c6b2a8ace823 415 int readings[3] = {0, 0, 0};
koyo_take 0:c6b2a8ace823 416 accelerometer->getOutput(readings);
koyo_take 0:c6b2a8ace823 417 *x = readings[0];
koyo_take 0:c6b2a8ace823 418 *y = readings[1];
koyo_take 0:c6b2a8ace823 419 *z = readings[2];
koyo_take 0:c6b2a8ace823 420
koyo_take 0:c6b2a8ace823 421 return 0;
koyo_take 0:c6b2a8ace823 422 }
koyo_take 0:c6b2a8ace823 423
koyo_take 0:c6b2a8ace823 424 /* private functions */
koyo_take 0:c6b2a8ace823 425 void Eeabp1::flushSerial()
koyo_take 0:c6b2a8ace823 426 {
koyo_take 0:c6b2a8ace823 427 while(serial->readable() == true) {
koyo_take 0:c6b2a8ace823 428 serial->getc();
koyo_take 0:c6b2a8ace823 429 wait_us(1000);
koyo_take 0:c6b2a8ace823 430 }
koyo_take 0:c6b2a8ace823 431 }
koyo_take 0:c6b2a8ace823 432
koyo_take 0:c6b2a8ace823 433 int Eeabp1::chkSerialChar(const char ch,uint16_t timeout_ms)
koyo_take 0:c6b2a8ace823 434 {
koyo_take 0:c6b2a8ace823 435 uint32_t timeoutCount = 0;
koyo_take 0:c6b2a8ace823 436
koyo_take 0:c6b2a8ace823 437 while(serial->readable() == false) {
koyo_take 0:c6b2a8ace823 438 wait_us(50);
koyo_take 0:c6b2a8ace823 439 timeoutCount++;
koyo_take 0:c6b2a8ace823 440 if((timeoutCount / 20) >= timeout_ms)
koyo_take 0:c6b2a8ace823 441 return -2;
koyo_take 0:c6b2a8ace823 442 }
koyo_take 0:c6b2a8ace823 443
koyo_take 0:c6b2a8ace823 444 return (serial->getc() == ch) ? 0 : -1;
koyo_take 0:c6b2a8ace823 445 }
koyo_take 0:c6b2a8ace823 446
koyo_take 0:c6b2a8ace823 447 int Eeabp1::waitSerialChar(const char ch,uint16_t timeout_ms)
koyo_take 0:c6b2a8ace823 448 {
koyo_take 0:c6b2a8ace823 449 uint32_t timeoutCount = 0;
koyo_take 0:c6b2a8ace823 450
koyo_take 0:c6b2a8ace823 451 do {
koyo_take 0:c6b2a8ace823 452 while(serial->readable() == false) {
koyo_take 0:c6b2a8ace823 453 wait_us(50);
koyo_take 0:c6b2a8ace823 454 timeoutCount++;
koyo_take 0:c6b2a8ace823 455 if((timeoutCount / 20) >= timeout_ms)
koyo_take 0:c6b2a8ace823 456 return -2;
koyo_take 0:c6b2a8ace823 457 }
koyo_take 0:c6b2a8ace823 458 } while(serial->getc() != ch);
koyo_take 0:c6b2a8ace823 459
koyo_take 0:c6b2a8ace823 460 return 0;
koyo_take 0:c6b2a8ace823 461 }
koyo_take 0:c6b2a8ace823 462
koyo_take 0:c6b2a8ace823 463 int Eeabp1::chkSerialCharOk()
koyo_take 0:c6b2a8ace823 464 {
koyo_take 0:c6b2a8ace823 465 int ret;
koyo_take 0:c6b2a8ace823 466 ret = waitSerialChar('>',4000);
koyo_take 0:c6b2a8ace823 467 if (ret != 0)
koyo_take 0:c6b2a8ace823 468 return __LINE__;
koyo_take 0:c6b2a8ace823 469
koyo_take 0:c6b2a8ace823 470 ret = chkSerialChar('>',2000);
koyo_take 0:c6b2a8ace823 471 if (ret != 0)
koyo_take 0:c6b2a8ace823 472 return __LINE__;
koyo_take 0:c6b2a8ace823 473
koyo_take 0:c6b2a8ace823 474 ret = chkSerialChar(' ',2000);
koyo_take 0:c6b2a8ace823 475 if (ret != 0)
koyo_take 0:c6b2a8ace823 476 return __LINE__;
koyo_take 0:c6b2a8ace823 477
koyo_take 0:c6b2a8ace823 478 ret = chkSerialChar('O',2000);
koyo_take 0:c6b2a8ace823 479 if (ret != 0)
koyo_take 0:c6b2a8ace823 480 return __LINE__;
koyo_take 0:c6b2a8ace823 481
koyo_take 0:c6b2a8ace823 482 ret = chkSerialChar('k',2000);
koyo_take 0:c6b2a8ace823 483 if (ret != 0)
koyo_take 0:c6b2a8ace823 484 return __LINE__;
koyo_take 0:c6b2a8ace823 485
koyo_take 0:c6b2a8ace823 486 ret = waitSerialChar('>',4000);
koyo_take 0:c6b2a8ace823 487 if (ret != 0)
koyo_take 0:c6b2a8ace823 488 return __LINE__;
koyo_take 0:c6b2a8ace823 489
koyo_take 0:c6b2a8ace823 490 wait_us(1000);
koyo_take 0:c6b2a8ace823 491
koyo_take 0:c6b2a8ace823 492 return 0;
koyo_take 0:c6b2a8ace823 493 }
koyo_take 0:c6b2a8ace823 494
koyo_take 0:c6b2a8ace823 495 int Eeabp1::chkSerialCharRes(char chkchr)
koyo_take 0:c6b2a8ace823 496 {
koyo_take 0:c6b2a8ace823 497 int ret;
koyo_take 0:c6b2a8ace823 498 ret = waitSerialChar('>', 10000);
koyo_take 0:c6b2a8ace823 499 if (ret != 0)
koyo_take 0:c6b2a8ace823 500 return __LINE__;
koyo_take 0:c6b2a8ace823 501
koyo_take 0:c6b2a8ace823 502 ret = chkSerialChar('>',2000);
koyo_take 0:c6b2a8ace823 503 if (ret != 0)
koyo_take 0:c6b2a8ace823 504 return __LINE__;
koyo_take 0:c6b2a8ace823 505
koyo_take 0:c6b2a8ace823 506 ret = chkSerialChar(' ',2000);
koyo_take 0:c6b2a8ace823 507 if (ret != 0)
koyo_take 0:c6b2a8ace823 508 return __LINE__;
koyo_take 0:c6b2a8ace823 509
koyo_take 0:c6b2a8ace823 510 ret = chkSerialChar('O',2000);
koyo_take 0:c6b2a8ace823 511 if (ret != 0)
koyo_take 0:c6b2a8ace823 512 return __LINE__;
koyo_take 0:c6b2a8ace823 513
koyo_take 0:c6b2a8ace823 514 ret = chkSerialChar('k',2000);
koyo_take 0:c6b2a8ace823 515 if (ret != 0)
koyo_take 0:c6b2a8ace823 516 return __LINE__;
koyo_take 0:c6b2a8ace823 517
koyo_take 0:c6b2a8ace823 518 ret = waitSerialChar('>',16000);
koyo_take 0:c6b2a8ace823 519 if (ret != 0)
koyo_take 0:c6b2a8ace823 520 return __LINE__;
koyo_take 0:c6b2a8ace823 521
koyo_take 0:c6b2a8ace823 522 ret = chkSerialChar('>',2000);
koyo_take 0:c6b2a8ace823 523 if (ret != 0)
koyo_take 0:c6b2a8ace823 524 return __LINE__;
koyo_take 0:c6b2a8ace823 525
koyo_take 0:c6b2a8ace823 526 ret = chkSerialChar(' ',2000);
koyo_take 0:c6b2a8ace823 527 if (ret != 0)
koyo_take 0:c6b2a8ace823 528 return __LINE__;
koyo_take 0:c6b2a8ace823 529
koyo_take 0:c6b2a8ace823 530 ret = waitSerialChar(chkchr,4000);
koyo_take 0:c6b2a8ace823 531 if (ret != 0)
koyo_take 0:c6b2a8ace823 532 return __LINE__;
koyo_take 0:c6b2a8ace823 533
koyo_take 0:c6b2a8ace823 534 ret = waitSerialChar('>',4000);
koyo_take 0:c6b2a8ace823 535 if (ret != 0)
koyo_take 0:c6b2a8ace823 536 return __LINE__;
koyo_take 0:c6b2a8ace823 537
koyo_take 0:c6b2a8ace823 538 wait_us(1000);
koyo_take 0:c6b2a8ace823 539
koyo_take 0:c6b2a8ace823 540 return 0;
koyo_take 0:c6b2a8ace823 541 }