nnn
Fork of Buffer by
MyBuffer.cpp@7:80d967704f0c, 2017-10-11 (annotated)
- Committer:
- aurorapso2
- Date:
- Wed Oct 11 12:49:03 2017 +0000
- Revision:
- 7:80d967704f0c
- Parent:
- 6:89564915f2a7
change a little
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sam_grove | 6:89564915f2a7 | 1 | |
sam_grove | 6:89564915f2a7 | 2 | /** |
sam_grove | 6:89564915f2a7 | 3 | * @file Buffer.cpp |
sam_grove | 6:89564915f2a7 | 4 | * @brief Software Buffer - Templated Ring Buffer for most data types |
sam_grove | 6:89564915f2a7 | 5 | * @author sam grove |
sam_grove | 6:89564915f2a7 | 6 | * @version 1.0 |
sam_grove | 6:89564915f2a7 | 7 | * @see |
sam_grove | 6:89564915f2a7 | 8 | * |
sam_grove | 6:89564915f2a7 | 9 | * Copyright (c) 2013 |
sam_grove | 6:89564915f2a7 | 10 | * |
sam_grove | 6:89564915f2a7 | 11 | * Licensed under the Apache License, Version 2.0 (the "License"); |
sam_grove | 6:89564915f2a7 | 12 | * you may not use this file except in compliance with the License. |
sam_grove | 6:89564915f2a7 | 13 | * You may obtain a copy of the License at |
sam_grove | 6:89564915f2a7 | 14 | * |
sam_grove | 6:89564915f2a7 | 15 | * http://www.apache.org/licenses/LICENSE-2.0 |
sam_grove | 6:89564915f2a7 | 16 | * |
sam_grove | 6:89564915f2a7 | 17 | * Unless required by applicable law or agreed to in writing, software |
sam_grove | 6:89564915f2a7 | 18 | * distributed under the License is distributed on an "AS IS" BASIS, |
sam_grove | 6:89564915f2a7 | 19 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
sam_grove | 6:89564915f2a7 | 20 | * See the License for the specific language governing permissions and |
sam_grove | 6:89564915f2a7 | 21 | * limitations under the License. |
sam_grove | 6:89564915f2a7 | 22 | */ |
sam_grove | 6:89564915f2a7 | 23 | |
aurorapso2 | 7:80d967704f0c | 24 | /*void parseCmpt(int token, unsigned char* payloadBuf, int payloadLen) |
aurorapso2 | 7:80d967704f0c | 25 | { |
aurorapso2 | 7:80d967704f0c | 26 | float data[3]; |
aurorapso2 | 7:80d967704f0c | 27 | switch(token){ |
aurorapso2 | 7:80d967704f0c | 28 | case 0x51: |
aurorapso2 | 7:80d967704f0c | 29 | for (int i = 0; i < 3; ++i) |
aurorapso2 | 7:80d967704f0c | 30 | { |
aurorapso2 | 7:80d967704f0c | 31 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
aurorapso2 | 7:80d967704f0c | 32 | data[i] = data[i] * 16 * 9.8 / 32768; |
aurorapso2 | 7:80d967704f0c | 33 | } |
aurorapso2 | 7:80d967704f0c | 34 | //pc.printf("Ax=%.2f\tAy=%.2f\tAz=%.2f\r\n", data[0], data[1], data[2]); |
aurorapso2 | 7:80d967704f0c | 35 | break; |
aurorapso2 | 7:80d967704f0c | 36 | case 0x52: |
aurorapso2 | 7:80d967704f0c | 37 | for (int i = 0; i < 3; ++i) |
aurorapso2 | 7:80d967704f0c | 38 | { |
aurorapso2 | 7:80d967704f0c | 39 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
aurorapso2 | 7:80d967704f0c | 40 | data[i] = data[i] * 2000 / 32768; |
aurorapso2 | 7:80d967704f0c | 41 | } |
aurorapso2 | 7:80d967704f0c | 42 | //pc.printf("Wx=%.2f\tWy=%.2f\tWz=%.2f\r\n", data[0], data[1], data[2]); |
aurorapso2 | 7:80d967704f0c | 43 | break; |
aurorapso2 | 7:80d967704f0c | 44 | case 0x53: |
aurorapso2 | 7:80d967704f0c | 45 | for (int i = 0; i < 3; ++i) |
aurorapso2 | 7:80d967704f0c | 46 | { |
aurorapso2 | 7:80d967704f0c | 47 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
aurorapso2 | 7:80d967704f0c | 48 | data[i] = data[i] * 180 / 32768; |
aurorapso2 | 7:80d967704f0c | 49 | } |
aurorapso2 | 7:80d967704f0c | 50 | pc.printf("Roll=%.2f\tPitch=%.2f\tYaw=%.2f\r\n", data[0], data[1], data[2]); |
aurorapso2 | 7:80d967704f0c | 51 | break; |
aurorapso2 | 7:80d967704f0c | 52 | case 0x54: |
aurorapso2 | 7:80d967704f0c | 53 | for (int i = 0; i < 3; ++i) |
aurorapso2 | 7:80d967704f0c | 54 | { |
aurorapso2 | 7:80d967704f0c | 55 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
aurorapso2 | 7:80d967704f0c | 56 | } |
aurorapso2 | 7:80d967704f0c | 57 | //pc.printf("Hx=%.2f\tHy=%.2f\tHz=%.2f\r\n", data[0], data[1], data[2]); |
aurorapso2 | 7:80d967704f0c | 58 | break; |
aurorapso2 | 7:80d967704f0c | 59 | } |
aurorapso2 | 7:80d967704f0c | 60 | } |
aurorapso2 | 7:80d967704f0c | 61 | |
aurorapso2 | 7:80d967704f0c | 62 | void parseInput(const char* data, int len) |
aurorapso2 | 7:80d967704f0c | 63 | { |
aurorapso2 | 7:80d967704f0c | 64 | for (int i = 0; i < len; ++i) |
aurorapso2 | 7:80d967704f0c | 65 | { |
aurorapso2 | 7:80d967704f0c | 66 | unsigned char ch = data[i], sum; |
aurorapso2 | 7:80d967704f0c | 67 | switch(state){ |
aurorapso2 | 7:80d967704f0c | 68 | case 0: |
aurorapso2 | 7:80d967704f0c | 69 | if(ch == 0x55) |
aurorapso2 | 7:80d967704f0c | 70 | state = 1; |
aurorapso2 | 7:80d967704f0c | 71 | break; |
aurorapso2 | 7:80d967704f0c | 72 | case 1: |
aurorapso2 | 7:80d967704f0c | 73 | token = ch; |
aurorapso2 | 7:80d967704f0c | 74 | if(0x51 <= token && token <= 0x54){ |
aurorapso2 | 7:80d967704f0c | 75 | payloadLen = 8; |
aurorapso2 | 7:80d967704f0c | 76 | recvLen = 0; |
aurorapso2 | 7:80d967704f0c | 77 | state = 2; |
aurorapso2 | 7:80d967704f0c | 78 | }else{ |
aurorapso2 | 7:80d967704f0c | 79 | pc.printf("%s %x\r\n", "unknown token", token); |
aurorapso2 | 7:80d967704f0c | 80 | state = 0; |
aurorapso2 | 7:80d967704f0c | 81 | } |
aurorapso2 | 7:80d967704f0c | 82 | break; |
aurorapso2 | 7:80d967704f0c | 83 | case 2: |
aurorapso2 | 7:80d967704f0c | 84 | payloadBuf[recvLen++] = ch; |
aurorapso2 | 7:80d967704f0c | 85 | if(recvLen == payloadLen){ |
aurorapso2 | 7:80d967704f0c | 86 | state = 3; |
aurorapso2 | 7:80d967704f0c | 87 | } |
aurorapso2 | 7:80d967704f0c | 88 | break; |
aurorapso2 | 7:80d967704f0c | 89 | case 3: |
aurorapso2 | 7:80d967704f0c | 90 | sum = 0x55; |
aurorapso2 | 7:80d967704f0c | 91 | sum += token; |
aurorapso2 | 7:80d967704f0c | 92 | for (int i = 0; i < payloadLen; ++i) |
aurorapso2 | 7:80d967704f0c | 93 | { |
aurorapso2 | 7:80d967704f0c | 94 | sum += payloadBuf[i]; |
aurorapso2 | 7:80d967704f0c | 95 | } |
aurorapso2 | 7:80d967704f0c | 96 | if(sum != ch){ |
aurorapso2 | 7:80d967704f0c | 97 | pc.printf("wrong checksum\r\n"); |
aurorapso2 | 7:80d967704f0c | 98 | }else{ |
aurorapso2 | 7:80d967704f0c | 99 | parseCmpt(token, payloadBuf, payloadLen); |
aurorapso2 | 7:80d967704f0c | 100 | // myled = !myled; |
aurorapso2 | 7:80d967704f0c | 101 | } |
aurorapso2 | 7:80d967704f0c | 102 | state = 0; |
aurorapso2 | 7:80d967704f0c | 103 | break; |
aurorapso2 | 7:80d967704f0c | 104 | } |
aurorapso2 | 7:80d967704f0c | 105 | } |
aurorapso2 | 7:80d967704f0c | 106 | }*/ |
aurorapso2 | 7:80d967704f0c | 107 | |
sam_grove | 6:89564915f2a7 | 108 | #include "MyBuffer.h" |
sam_grove | 6:89564915f2a7 | 109 | |
sam_grove | 6:89564915f2a7 | 110 | template <class T> |
sam_grove | 6:89564915f2a7 | 111 | MyBuffer<T>::MyBuffer(uint32_t size) |
sam_grove | 6:89564915f2a7 | 112 | { |
sam_grove | 6:89564915f2a7 | 113 | _buf = new T [size]; |
sam_grove | 6:89564915f2a7 | 114 | _size = size; |
sam_grove | 6:89564915f2a7 | 115 | clear(); |
sam_grove | 6:89564915f2a7 | 116 | |
sam_grove | 6:89564915f2a7 | 117 | return; |
sam_grove | 6:89564915f2a7 | 118 | } |
sam_grove | 6:89564915f2a7 | 119 | |
sam_grove | 6:89564915f2a7 | 120 | template <class T> |
sam_grove | 6:89564915f2a7 | 121 | MyBuffer<T>::~MyBuffer() |
sam_grove | 6:89564915f2a7 | 122 | { |
sam_grove | 6:89564915f2a7 | 123 | delete [] _buf; |
sam_grove | 6:89564915f2a7 | 124 | |
sam_grove | 6:89564915f2a7 | 125 | return; |
sam_grove | 6:89564915f2a7 | 126 | } |
sam_grove | 6:89564915f2a7 | 127 | |
sam_grove | 6:89564915f2a7 | 128 | template <class T> |
sam_grove | 6:89564915f2a7 | 129 | uint32_t MyBuffer<T>::getSize() |
sam_grove | 6:89564915f2a7 | 130 | { |
sam_grove | 6:89564915f2a7 | 131 | return this->_size; |
sam_grove | 6:89564915f2a7 | 132 | } |
sam_grove | 6:89564915f2a7 | 133 | |
sam_grove | 6:89564915f2a7 | 134 | template <class T> |
sam_grove | 6:89564915f2a7 | 135 | void MyBuffer<T>::clear(void) |
sam_grove | 6:89564915f2a7 | 136 | { |
sam_grove | 6:89564915f2a7 | 137 | _wloc = 0; |
sam_grove | 6:89564915f2a7 | 138 | _rloc = 0; |
sam_grove | 6:89564915f2a7 | 139 | memset(_buf, 0, _size); |
sam_grove | 6:89564915f2a7 | 140 | |
sam_grove | 6:89564915f2a7 | 141 | return; |
sam_grove | 6:89564915f2a7 | 142 | } |
sam_grove | 6:89564915f2a7 | 143 | |
sam_grove | 6:89564915f2a7 | 144 | template <class T> |
sam_grove | 6:89564915f2a7 | 145 | uint32_t MyBuffer<T>::peek(char c) |
sam_grove | 6:89564915f2a7 | 146 | { |
sam_grove | 6:89564915f2a7 | 147 | return 1; |
sam_grove | 6:89564915f2a7 | 148 | } |
sam_grove | 6:89564915f2a7 | 149 | |
sam_grove | 6:89564915f2a7 | 150 | // make the linker aware of some possible types |
sam_grove | 6:89564915f2a7 | 151 | template class MyBuffer<uint8_t>; |
sam_grove | 6:89564915f2a7 | 152 | template class MyBuffer<int8_t>; |
sam_grove | 6:89564915f2a7 | 153 | template class MyBuffer<uint16_t>; |
sam_grove | 6:89564915f2a7 | 154 | template class MyBuffer<int16_t>; |
sam_grove | 6:89564915f2a7 | 155 | template class MyBuffer<uint32_t>; |
sam_grove | 6:89564915f2a7 | 156 | template class MyBuffer<int32_t>; |
sam_grove | 6:89564915f2a7 | 157 | template class MyBuffer<uint64_t>; |
sam_grove | 6:89564915f2a7 | 158 | template class MyBuffer<int64_t>; |
sam_grove | 6:89564915f2a7 | 159 | template class MyBuffer<char>; |
sam_grove | 6:89564915f2a7 | 160 | template class MyBuffer<wchar_t>; |