nnn

Fork of Buffer by Sam Grove

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?

UserRevisionLine numberNew 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>;