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:
wataloh
Date:
Tue Jan 24 10:00:28 2017 +0000
Revision:
2:dfe671e31221
Parent:
1:b2a9a6f2c30e
Child:
4:b38e09f24711
latest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wataloh 0:20bce0dcc921 1 #include "AferoCommHndlr.h"
wataloh 0:20bce0dcc921 2
wataloh 1:b2a9a6f2c30e 3 Necochan *Necochan::ref = NULL;
wataloh 1:b2a9a6f2c30e 4
wataloh 1:b2a9a6f2c30e 5 Necochan::Necochan()
wataloh 1:b2a9a6f2c30e 6 {
wataloh 1:b2a9a6f2c30e 7 if(ref==NULL)
wataloh 1:b2a9a6f2c30e 8 {
wataloh 1:b2a9a6f2c30e 9 ref = this;
wataloh 1:b2a9a6f2c30e 10 }
wataloh 1:b2a9a6f2c30e 11 out = new DigitalOut(PTB8,1);
wataloh 1:b2a9a6f2c30e 12 }
wataloh 1:b2a9a6f2c30e 13
wataloh 1:b2a9a6f2c30e 14 void Necochan::release()
wataloh 1:b2a9a6f2c30e 15 {
wataloh 1:b2a9a6f2c30e 16 DigitalOut *p = ref->out;
wataloh 1:b2a9a6f2c30e 17 *p = 1;
wataloh 1:b2a9a6f2c30e 18 }
wataloh 1:b2a9a6f2c30e 19
wataloh 1:b2a9a6f2c30e 20 void Necochan::push()
wataloh 1:b2a9a6f2c30e 21 {
wataloh 1:b2a9a6f2c30e 22 SERIAL_PRINT_DBG("push meow\n");
wataloh 1:b2a9a6f2c30e 23 *out = 0;
wataloh 1:b2a9a6f2c30e 24 timeout.attach(&release,1);
wataloh 1:b2a9a6f2c30e 25 }
wataloh 1:b2a9a6f2c30e 26
wataloh 0:20bce0dcc921 27 static AferoCommHndlr *self = NULL;
wataloh 0:20bce0dcc921 28
wataloh 1:b2a9a6f2c30e 29 AferoCommHndlr::AferoCommHndlr() : flowControlEnabled(false)
wataloh 0:20bce0dcc921 30 {
wataloh 1:b2a9a6f2c30e 31 necochan = new Necochan();
wataloh 0:20bce0dcc921 32 }
wataloh 0:20bce0dcc921 33
wataloh 0:20bce0dcc921 34 void
wataloh 0:20bce0dcc921 35 AferoCommHndlr::loop()
wataloh 0:20bce0dcc921 36 {
wataloh 0:20bce0dcc921 37 piafLib->loop();
wataloh 0:20bce0dcc921 38 todoQ->loop();
wataloh 0:20bce0dcc921 39 }
wataloh 0:20bce0dcc921 40
wataloh 0:20bce0dcc921 41 AferoCommHndlr*
wataloh 0:20bce0dcc921 42 AferoCommHndlr::create(Timer *timer, mbedSPI *spi)
wataloh 0:20bce0dcc921 43 {
wataloh 0:20bce0dcc921 44 SERIAL_PRINT_DBG("HELLO\n");
wataloh 0:20bce0dcc921 45 self = new AferoCommHndlr();
wataloh 0:20bce0dcc921 46 self->timer = timer;
wataloh 1:b2a9a6f2c30e 47 self->piafLib = iafLib::create((PinName)PINS::ASR_1::SPI::SR,
wataloh 0:20bce0dcc921 48 AferoCommHndlr::fco_irq_fall,
wataloh 0:20bce0dcc921 49 AferoCommHndlr::myOnAttributeSet,
wataloh 0:20bce0dcc921 50 AferoCommHndlr::myOnAttributeSetComplete, spi);
wataloh 0:20bce0dcc921 51 self->todoQ = ToDoQ::create(AferoCommHndlr::onGetTodo);
wataloh 0:20bce0dcc921 52 SERIAL_PRINT_DBG("AferoCommHndlr init done\n");
wataloh 1:b2a9a6f2c30e 53 self->piafLib->setAttribute8(1,1);
wataloh 1:b2a9a6f2c30e 54
wataloh 0:20bce0dcc921 55 return self;
wataloh 0:20bce0dcc921 56 }
wataloh 0:20bce0dcc921 57
wataloh 0:20bce0dcc921 58 void
wataloh 0:20bce0dcc921 59 AferoCommHndlr::myOnAttributeSet(
wataloh 0:20bce0dcc921 60 const uint8_t requestId,
wataloh 0:20bce0dcc921 61 const uint16_t attributeId,
wataloh 0:20bce0dcc921 62 const uint16_t valueLen,
wataloh 0:20bce0dcc921 63 const uint8_t *value)
wataloh 0:20bce0dcc921 64 {
wataloh 0:20bce0dcc921 65 self->piafLib->setAttributeComplete(requestId, attributeId, valueLen, value);
wataloh 0:20bce0dcc921 66 }
wataloh 0:20bce0dcc921 67
wataloh 0:20bce0dcc921 68 void
wataloh 0:20bce0dcc921 69 AferoCommHndlr::myOnAttributeSetComplete(
wataloh 0:20bce0dcc921 70 const uint8_t requestId,
wataloh 0:20bce0dcc921 71 const uint16_t attributeId,
wataloh 0:20bce0dcc921 72 const uint16_t valueLen,
wataloh 0:20bce0dcc921 73 const uint8_t *value)
wataloh 0:20bce0dcc921 74 {
wataloh 2:dfe671e31221 75 // uint8_t *buf = new uint8_t[valueLen+1];
wataloh 2:dfe671e31221 76 // memset(buf,'\0',valueLen+1);
wataloh 2:dfe671e31221 77 // memcpy(buf, value, valueLen);
wataloh 2:dfe671e31221 78 // SERIAL_PRINT_DBG("attr id:%d value:%s\n",attributeId,buf);
wataloh 2:dfe671e31221 79 // delete[] buf;
wataloh 2:dfe671e31221 80 // buf = NULL;
wataloh 1:b2a9a6f2c30e 81
wataloh 2:dfe671e31221 82 if(attributeId==2)
wataloh 2:dfe671e31221 83 {
wataloh 2:dfe671e31221 84 PREFERENCES::CRC32.ui32 = *((uint32_t*)value);
wataloh 2:dfe671e31221 85 }
wataloh 2:dfe671e31221 86 else if(attributeId==4)
wataloh 2:dfe671e31221 87 {
wataloh 2:dfe671e31221 88 SERIAL_PRINT_DBG("PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER]=%ld\n", *((int32_t*)value));
wataloh 2:dfe671e31221 89 PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER] = *((int32_t*)value) < 5 ? 5 : *((int32_t*)value);
wataloh 2:dfe671e31221 90 }
wataloh 2:dfe671e31221 91 else if(attributeId==5)
wataloh 2:dfe671e31221 92 {
wataloh 2:dfe671e31221 93 SERIAL_PRINT_DBG("PREFERENCES::SENSING_INTERVAL[SENSORS::COLOR]=%ld\n", *((int32_t*)value));
wataloh 2:dfe671e31221 94 PREFERENCES::SENSING_INTERVAL[SENSORS::COLOR] = *((int32_t*)value) < 5 ? 5 : *((int32_t*)value);
wataloh 2:dfe671e31221 95 }
wataloh 2:dfe671e31221 96 else if(attributeId==6)
wataloh 2:dfe671e31221 97 {
wataloh 2:dfe671e31221 98 SERIAL_PRINT_DBG("PREFERENCES::SENSING_INTERVAL[SENSORS::PRESSURE]=%ld\n", *((int32_t*)value));
wataloh 2:dfe671e31221 99 PREFERENCES::SENSING_INTERVAL[SENSORS::PRESSURE] = *((int32_t*)value) < 5 ? 5 : *((int32_t*)value);
wataloh 2:dfe671e31221 100 }
wataloh 2:dfe671e31221 101 else if(attributeId==7)
wataloh 2:dfe671e31221 102 {
wataloh 2:dfe671e31221 103 SERIAL_PRINT_DBG("PREFERENCES::SENSING_INTERVAL[SENSORS::CURRENT_TRANS]=%ld\n", *((int32_t*)value));
wataloh 2:dfe671e31221 104 PREFERENCES::SENSING_INTERVAL[SENSORS::CURRENT_TRANS] = *((int32_t*)value) < 5 ? 5 : *((int32_t*)value);
wataloh 2:dfe671e31221 105 }
wataloh 2:dfe671e31221 106 else if(attributeId==8)
wataloh 2:dfe671e31221 107 {
wataloh 2:dfe671e31221 108 SERIAL_PRINT_DBG("PREFERENCES::SENSING_INTERVAL[SENSORS::TEMPERATURE]=%ld\n", *((int32_t*)value));
wataloh 2:dfe671e31221 109 PREFERENCES::SENSING_INTERVAL[SENSORS::TEMPERATURE] = *((int32_t*)value) < 5 ? 5 : *((int32_t*)value);
wataloh 2:dfe671e31221 110 }
wataloh 2:dfe671e31221 111 else if(attributeId==9)
wataloh 2:dfe671e31221 112 {
wataloh 2:dfe671e31221 113 SERIAL_PRINT_DBG("time stamp:%ld\n", *((uint32_t*)value));
wataloh 2:dfe671e31221 114 RTC_Handler::getInstance()->setUTC(*((uint32_t*)value));
wataloh 2:dfe671e31221 115 }
wataloh 2:dfe671e31221 116 else if(attributeId==1024)
wataloh 1:b2a9a6f2c30e 117 {
wataloh 1:b2a9a6f2c30e 118 self->necochan->push();
wataloh 1:b2a9a6f2c30e 119 }
wataloh 0:20bce0dcc921 120 }
wataloh 0:20bce0dcc921 121
wataloh 0:20bce0dcc921 122 void
wataloh 0:20bce0dcc921 123 AferoCommHndlr::fco_irq_fall()
wataloh 0:20bce0dcc921 124 {
wataloh 0:20bce0dcc921 125 if(self->piafLib)
wataloh 0:20bce0dcc921 126 {
wataloh 0:20bce0dcc921 127 self->piafLib->mcuISR();
wataloh 0:20bce0dcc921 128 }
wataloh 0:20bce0dcc921 129 }
wataloh 0:20bce0dcc921 130
wataloh 0:20bce0dcc921 131 void
wataloh 0:20bce0dcc921 132 AferoCommHndlr::onGetTodo(ToDo *todo)
wataloh 0:20bce0dcc921 133 {
wataloh 0:20bce0dcc921 134 char buf[255];
wataloh 0:20bce0dcc921 135 memset(buf,'\0',sizeof(buf));
wataloh 0:20bce0dcc921 136 if(todo!=NULL)
wataloh 0:20bce0dcc921 137 {
wataloh 2:dfe671e31221 138 if(PREFERENCES::FLOW_CONTROL==true)
wataloh 1:b2a9a6f2c30e 139 {
wataloh 2:dfe671e31221 140 PREFERENCES::_crc32 crc32;
wataloh 2:dfe671e31221 141 todo->toBASE64(buf,&crc32);
wataloh 2:dfe671e31221 142 self->piafLib->setAttribute(ATTR_ID_SENSE_VAL,strlen(buf),buf);
wataloh 2:dfe671e31221 143 self->piafLib->setAttribute64(3,crc32.ui32);
wataloh 1:b2a9a6f2c30e 144 }
wataloh 1:b2a9a6f2c30e 145 else
wataloh 2:dfe671e31221 146 {
wataloh 1:b2a9a6f2c30e 147 todo->toJSON(buf);
wataloh 1:b2a9a6f2c30e 148 SERIAL_PRINT_DBG("%s\n",buf);
wataloh 1:b2a9a6f2c30e 149 self->piafLib->setAttribute(ATTR_ID_SENSE_VAL,strlen(buf),buf);
wataloh 1:b2a9a6f2c30e 150 }
wataloh 0:20bce0dcc921 151 }
wataloh 0:20bce0dcc921 152 }