Orefatoi
/
afero_poc15_171201
POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel
afLib/afLib.h@13:88ee926c56ae, 2017-12-12 (annotated)
- 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?
User | Revision | Line number | New 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__ |