POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel

Dependencies:   mbed vt100

Committer:
Rhyme
Date:
Tue Dec 12 06:53:12 2017 +0000
Revision:
13:88ee926c56ae
Parent:
0:f0de320e23ac
MCU Reset Reason Attribute added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:f0de320e23ac 1 /**
Rhyme 0:f0de320e23ac 2 * Copyright 2015 Afero, Inc.
Rhyme 0:f0de320e23ac 3 *
Rhyme 0:f0de320e23ac 4 * Licensed under the Apache License, Version 2.0 (the "License");
Rhyme 0:f0de320e23ac 5 * you may not use this file except in compliance with the License.
Rhyme 0:f0de320e23ac 6 * You may obtain a copy of the License at
Rhyme 0:f0de320e23ac 7 *
Rhyme 0:f0de320e23ac 8 * http://www.apache.org/licenses/LICENSE-2.0
Rhyme 0:f0de320e23ac 9 *
Rhyme 0:f0de320e23ac 10 * Unless required by applicable law or agreed to in writing, software
Rhyme 0:f0de320e23ac 11 * distributed under the License is distributed on an "AS IS" BASIS,
Rhyme 0:f0de320e23ac 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Rhyme 0:f0de320e23ac 13 * See the License for the specific language governing permissions and
Rhyme 0:f0de320e23ac 14 * limitations under the License.
Rhyme 0:f0de320e23ac 15 */
Rhyme 0:f0de320e23ac 16
Rhyme 0:f0de320e23ac 17 #ifndef AFLIB_H__
Rhyme 0:f0de320e23ac 18 #define AFLIB_H__
Rhyme 0:f0de320e23ac 19
Rhyme 0:f0de320e23ac 20 #include "mbed.h"
Rhyme 0:f0de320e23ac 21 #include "iafLib.h"
Rhyme 0:f0de320e23ac 22 #include "SPI.h"
Rhyme 0:f0de320e23ac 23 #include "Command.h"
Rhyme 0:f0de320e23ac 24 #include "StatusCommand.h"
Rhyme 0:f0de320e23ac 25 #include "afSPI.h"
Rhyme 0:f0de320e23ac 26 // #include "WatchDogWrapper.hpp"
Rhyme 0:f0de320e23ac 27
Rhyme 0:f0de320e23ac 28 #define STATE_IDLE 0
Rhyme 0:f0de320e23ac 29 #define STATE_STATUS_SYNC 1
Rhyme 0:f0de320e23ac 30 #define STATE_STATUS_ACK 3
Rhyme 0:f0de320e23ac 31 #define STATE_SEND_BYTES 4
Rhyme 0:f0de320e23ac 32 #define STATE_RECV_BYTES 5
Rhyme 0:f0de320e23ac 33 #define STATE_CMD_COMPLETE 6
Rhyme 0:f0de320e23ac 34
Rhyme 0:f0de320e23ac 35 #define SPI_FRAME_LEN 16
Rhyme 0:f0de320e23ac 36
Rhyme 0:f0de320e23ac 37 #define REQUEST_QUEUE_SIZE 10
Rhyme 0:f0de320e23ac 38
Rhyme 0:f0de320e23ac 39 typedef struct {
Rhyme 0:f0de320e23ac 40 uint8_t messageType;
Rhyme 0:f0de320e23ac 41 uint16_t attrId;
Rhyme 0:f0de320e23ac 42 uint8_t requestId;
Rhyme 0:f0de320e23ac 43 uint16_t valueLen;
Rhyme 0:f0de320e23ac 44 uint8_t *p_value;
Rhyme 0:f0de320e23ac 45 } request_t;
Rhyme 0:f0de320e23ac 46
Rhyme 0:f0de320e23ac 47 class afLib : public iafLib {
Rhyme 0:f0de320e23ac 48 public:
Rhyme 0:f0de320e23ac 49 afLib(PinName mcuInterrupt, isr isrWrapper,
Rhyme 0:f0de320e23ac 50 onAttributeSet attrSet, onAttributeSetComplete attrSetComplete, afSPI *theSPI);
Rhyme 0:f0de320e23ac 51 //wsugi 20161128
Rhyme 0:f0de320e23ac 52 ~afLib();
Rhyme 0:f0de320e23ac 53 //wsugi 20161128
Rhyme 0:f0de320e23ac 54
Rhyme 0:f0de320e23ac 55 // motoo tanaka 20171116
Rhyme 0:f0de320e23ac 56 virtual int getRequestId(void) ;
Rhyme 0:f0de320e23ac 57 // motoo tanaka 20171116
Rhyme 0:f0de320e23ac 58
Rhyme 0:f0de320e23ac 59 virtual void loop(void);
Rhyme 0:f0de320e23ac 60
Rhyme 0:f0de320e23ac 61 virtual int getAttribute(const uint16_t attrId);
Rhyme 0:f0de320e23ac 62
Rhyme 0:f0de320e23ac 63 virtual int setAttributeBool(const uint16_t attrId, const bool value);
Rhyme 0:f0de320e23ac 64
Rhyme 0:f0de320e23ac 65 virtual int setAttribute8(const uint16_t attrId, const int8_t value);
Rhyme 0:f0de320e23ac 66
Rhyme 0:f0de320e23ac 67 virtual int setAttribute16(const uint16_t attrId, const int16_t value);
Rhyme 0:f0de320e23ac 68
Rhyme 0:f0de320e23ac 69 virtual int setAttribute32(const uint16_t attrId, const int32_t value);
Rhyme 0:f0de320e23ac 70
Rhyme 0:f0de320e23ac 71 virtual int setAttribute64(const uint16_t attrId, const int64_t value);
Rhyme 0:f0de320e23ac 72
Rhyme 0:f0de320e23ac 73 virtual int setAttribute(const uint16_t attrId, const string &value);
Rhyme 0:f0de320e23ac 74
Rhyme 0:f0de320e23ac 75 virtual int setAttribute(const uint16_t attrId, const uint16_t valueLen, const char *value);
Rhyme 0:f0de320e23ac 76
Rhyme 0:f0de320e23ac 77 virtual int setAttribute(const uint16_t attrId, const uint16_t valueLen, const uint8_t *value);
Rhyme 0:f0de320e23ac 78
Rhyme 0:f0de320e23ac 79 virtual int setAttributeComplete(uint8_t requestId, const uint16_t attrId, const uint16_t valueLen, const uint8_t *value);
Rhyme 0:f0de320e23ac 80
Rhyme 0:f0de320e23ac 81 virtual bool isIdle();
Rhyme 0:f0de320e23ac 82
Rhyme 0:f0de320e23ac 83 virtual void mcuISR();
Rhyme 0:f0de320e23ac 84
Rhyme 0:f0de320e23ac 85 private:
Rhyme 0:f0de320e23ac 86 Timeout deathWish;
Rhyme 0:f0de320e23ac 87 Timer *checkLastSync;
Rhyme 0:f0de320e23ac 88 static void kick_the_bucket();
Rhyme 0:f0de320e23ac 89 afSPI *_theSPI;
Rhyme 0:f0de320e23ac 90
Rhyme 0:f0de320e23ac 91 //SPISettings _spiSettings;
Rhyme 0:f0de320e23ac 92 volatile int _interrupts_pending;
Rhyme 0:f0de320e23ac 93 int _state;
Rhyme 0:f0de320e23ac 94 uint16_t _bytesToSend;
Rhyme 0:f0de320e23ac 95 uint16_t _bytesToRecv;
Rhyme 0:f0de320e23ac 96 uint8_t _requestId;
Rhyme 0:f0de320e23ac 97 uint16_t _outstandingSetGetAttrId;
Rhyme 0:f0de320e23ac 98
Rhyme 0:f0de320e23ac 99 // Application Callbacks.
Rhyme 0:f0de320e23ac 100 onAttributeSet _onAttrSet;
Rhyme 0:f0de320e23ac 101 onAttributeSetComplete _onAttrSetComplete;
Rhyme 0:f0de320e23ac 102
Rhyme 0:f0de320e23ac 103 Command *_writeCmd;
Rhyme 0:f0de320e23ac 104 uint16_t _writeBufferLen;
Rhyme 0:f0de320e23ac 105 uint8_t *_writeBuffer;
Rhyme 0:f0de320e23ac 106
Rhyme 0:f0de320e23ac 107 Command *_readCmd;
Rhyme 0:f0de320e23ac 108 uint16_t _readBufferLen;
Rhyme 0:f0de320e23ac 109 uint8_t *_readBuffer;
Rhyme 0:f0de320e23ac 110
Rhyme 0:f0de320e23ac 111 int _writeCmdOffset;
Rhyme 0:f0de320e23ac 112 int _readCmdOffset;
Rhyme 0:f0de320e23ac 113
Rhyme 0:f0de320e23ac 114 StatusCommand *_txStatus;
Rhyme 0:f0de320e23ac 115 StatusCommand *_rxStatus;
Rhyme 0:f0de320e23ac 116
Rhyme 0:f0de320e23ac 117 request_t _request;
Rhyme 0:f0de320e23ac 118 request_t _requestQueue[REQUEST_QUEUE_SIZE];
Rhyme 0:f0de320e23ac 119
Rhyme 0:f0de320e23ac 120 #ifdef ATTRIBUTE_CLI
Rhyme 0:f0de320e23ac 121 int parseCommand(const char *cmd);
Rhyme 0:f0de320e23ac 122 #endif
Rhyme 0:f0de320e23ac 123
Rhyme 0:f0de320e23ac 124 void sendCommand(void);
Rhyme 0:f0de320e23ac 125
Rhyme 0:f0de320e23ac 126 void runStateMachine(void);
Rhyme 0:f0de320e23ac 127
Rhyme 0:f0de320e23ac 128 void printState(int state);
Rhyme 0:f0de320e23ac 129
Rhyme 0:f0de320e23ac 130 //void beginSPI();
Rhyme 0:f0de320e23ac 131
Rhyme 0:f0de320e23ac 132 //void endSPI();
Rhyme 0:f0de320e23ac 133
Rhyme 0:f0de320e23ac 134 int exchangeStatus(StatusCommand *tx, StatusCommand *rx);
Rhyme 0:f0de320e23ac 135
Rhyme 0:f0de320e23ac 136 bool inSync(StatusCommand *tx, StatusCommand *rx);
Rhyme 0:f0de320e23ac 137
Rhyme 0:f0de320e23ac 138 int writeStatus(StatusCommand *c);
Rhyme 0:f0de320e23ac 139
Rhyme 0:f0de320e23ac 140 void sendBytes();
Rhyme 0:f0de320e23ac 141
Rhyme 0:f0de320e23ac 142 void recvBytes();
Rhyme 0:f0de320e23ac 143
Rhyme 0:f0de320e23ac 144 void dumpBytes(char *label, int len, uint8_t *bytes);
Rhyme 0:f0de320e23ac 145
Rhyme 0:f0de320e23ac 146 void updateIntsPending(int amount);
Rhyme 0:f0de320e23ac 147
Rhyme 0:f0de320e23ac 148 void queueInit(void);
Rhyme 0:f0de320e23ac 149
Rhyme 0:f0de320e23ac 150 int queuePut(uint8_t messageType, uint8_t requestId, const uint16_t attributeId, uint16_t valueLen, const uint8_t *value);
Rhyme 0:f0de320e23ac 151
Rhyme 0:f0de320e23ac 152 int queueGet(uint8_t *messageType, uint8_t *requestId, uint16_t *attributeId, uint16_t *valueLen, uint8_t **value);
Rhyme 0:f0de320e23ac 153
Rhyme 0:f0de320e23ac 154 int doGetAttribute(uint8_t requestId, uint16_t attrId);
Rhyme 0:f0de320e23ac 155
Rhyme 0:f0de320e23ac 156 int doSetAttribute(uint8_t requestId, uint16_t attrId, uint16_t valueLen, uint8_t *value);
Rhyme 0:f0de320e23ac 157
Rhyme 0:f0de320e23ac 158 int doUpdateAttribute(uint8_t requestId, uint16_t attrId, uint8_t status, uint16_t valueLen, uint8_t *value);
Rhyme 0:f0de320e23ac 159
Rhyme 0:f0de320e23ac 160 void onStateIdle(void);
Rhyme 0:f0de320e23ac 161 void onStateSync(void);
Rhyme 0:f0de320e23ac 162 void onStateAck(void);
Rhyme 0:f0de320e23ac 163 void onStateSendBytes(void);
Rhyme 0:f0de320e23ac 164 void onStateRecvBytes(void);
Rhyme 0:f0de320e23ac 165 void onStateCmdComplete(void);
Rhyme 0:f0de320e23ac 166 void printTransaction(uint8_t *rbytes, int len);
Rhyme 0:f0de320e23ac 167 InterruptIn fco;
Rhyme 0:f0de320e23ac 168 };
Rhyme 0:f0de320e23ac 169
Rhyme 0:f0de320e23ac 170 #endif // AFLIB_H__