wifi test

Dependencies:   X_NUCLEO_IKS01A2 mbed-http

Committer:
JMF
Date:
Wed Sep 05 14:28:24 2018 +0000
Revision:
0:24d3eb812fd4
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:24d3eb812fd4 1
JMF 0:24d3eb812fd4 2 /**
JMF 0:24d3eb812fd4 3 * @file Buffer.h
JMF 0:24d3eb812fd4 4 * @brief Software Buffer - Templated Ring Buffer for most data types
JMF 0:24d3eb812fd4 5 * @author sam grove
JMF 0:24d3eb812fd4 6 * @version 1.0
JMF 0:24d3eb812fd4 7 * @see
JMF 0:24d3eb812fd4 8 *
JMF 0:24d3eb812fd4 9 * Copyright (c) 2013
JMF 0:24d3eb812fd4 10 *
JMF 0:24d3eb812fd4 11 * Licensed under the Apache License, Version 2.0 (the "License");
JMF 0:24d3eb812fd4 12 * you may not use this file except in compliance with the License.
JMF 0:24d3eb812fd4 13 * You may obtain a copy of the License at
JMF 0:24d3eb812fd4 14 *
JMF 0:24d3eb812fd4 15 * http://www.apache.org/licenses/LICENSE-2.0
JMF 0:24d3eb812fd4 16 *
JMF 0:24d3eb812fd4 17 * Unless required by applicable law or agreed to in writing, software
JMF 0:24d3eb812fd4 18 * distributed under the License is distributed on an "AS IS" BASIS,
JMF 0:24d3eb812fd4 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JMF 0:24d3eb812fd4 20 * See the License for the specific language governing permissions and
JMF 0:24d3eb812fd4 21 * limitations under the License.
JMF 0:24d3eb812fd4 22 */
JMF 0:24d3eb812fd4 23
JMF 0:24d3eb812fd4 24 #ifndef MYBUFFER_H
JMF 0:24d3eb812fd4 25 #define MYBUFFER_H
JMF 0:24d3eb812fd4 26
JMF 0:24d3eb812fd4 27 #include <stdint.h>
JMF 0:24d3eb812fd4 28 #include <string.h>
JMF 0:24d3eb812fd4 29
JMF 0:24d3eb812fd4 30 /** A templated software ring buffer
JMF 0:24d3eb812fd4 31 *
JMF 0:24d3eb812fd4 32 * Example:
JMF 0:24d3eb812fd4 33 * @code
JMF 0:24d3eb812fd4 34 * #include "mbed.h"
JMF 0:24d3eb812fd4 35 * #include "MyBuffer.h"
JMF 0:24d3eb812fd4 36 *
JMF 0:24d3eb812fd4 37 * MyBuffer <char> buf;
JMF 0:24d3eb812fd4 38 *
JMF 0:24d3eb812fd4 39 * int main()
JMF 0:24d3eb812fd4 40 * {
JMF 0:24d3eb812fd4 41 * buf = 'a';
JMF 0:24d3eb812fd4 42 * buf.put('b');
JMF 0:24d3eb812fd4 43 * char *head = buf.head();
JMF 0:24d3eb812fd4 44 * puts(head);
JMF 0:24d3eb812fd4 45 *
JMF 0:24d3eb812fd4 46 * char whats_in_there[2] = {0};
JMF 0:24d3eb812fd4 47 * int pos = 0;
JMF 0:24d3eb812fd4 48 *
JMF 0:24d3eb812fd4 49 * while(buf.available())
JMF 0:24d3eb812fd4 50 * {
JMF 0:24d3eb812fd4 51 * whats_in_there[pos++] = buf;
JMF 0:24d3eb812fd4 52 * }
JMF 0:24d3eb812fd4 53 * printf("%c %c\n", whats_in_there[0], whats_in_there[1]);
JMF 0:24d3eb812fd4 54 * buf.clear();
JMF 0:24d3eb812fd4 55 * error("done\n\n\n");
JMF 0:24d3eb812fd4 56 * }
JMF 0:24d3eb812fd4 57 * @endcode
JMF 0:24d3eb812fd4 58 */
JMF 0:24d3eb812fd4 59
JMF 0:24d3eb812fd4 60 template <typename T>
JMF 0:24d3eb812fd4 61 class MyBuffer {
JMF 0:24d3eb812fd4 62 private:
JMF 0:24d3eb812fd4 63 T *_buf;
JMF 0:24d3eb812fd4 64 volatile uint32_t _wloc;
JMF 0:24d3eb812fd4 65 volatile uint32_t _rloc;
JMF 0:24d3eb812fd4 66 uint32_t _size;
JMF 0:24d3eb812fd4 67
JMF 0:24d3eb812fd4 68 public:
JMF 0:24d3eb812fd4 69 /** Create a Buffer and allocate memory for it
JMF 0:24d3eb812fd4 70 * @param size The size of the buffer
JMF 0:24d3eb812fd4 71 */
JMF 0:24d3eb812fd4 72 MyBuffer(uint32_t size = 0x100);
JMF 0:24d3eb812fd4 73
JMF 0:24d3eb812fd4 74 /** Get the size of the ring buffer
JMF 0:24d3eb812fd4 75 * @return the size of the ring buffer
JMF 0:24d3eb812fd4 76 */
JMF 0:24d3eb812fd4 77 uint32_t getSize();
JMF 0:24d3eb812fd4 78 uint32_t getNbAvailable();
JMF 0:24d3eb812fd4 79
JMF 0:24d3eb812fd4 80 /** Destry a Buffer and release it's allocated memory
JMF 0:24d3eb812fd4 81 */
JMF 0:24d3eb812fd4 82 ~MyBuffer();
JMF 0:24d3eb812fd4 83
JMF 0:24d3eb812fd4 84 /** Add a data element into the buffer
JMF 0:24d3eb812fd4 85 * @param data Something to add to the buffer
JMF 0:24d3eb812fd4 86 */
JMF 0:24d3eb812fd4 87 void put(T data);
JMF 0:24d3eb812fd4 88
JMF 0:24d3eb812fd4 89 /** Remove a data element from the buffer
JMF 0:24d3eb812fd4 90 * @return Pull the oldest element from the buffer
JMF 0:24d3eb812fd4 91 */
JMF 0:24d3eb812fd4 92 T get(void);
JMF 0:24d3eb812fd4 93
JMF 0:24d3eb812fd4 94 /** Get the address to the head of the buffer
JMF 0:24d3eb812fd4 95 * @return The address of element 0 in the buffer
JMF 0:24d3eb812fd4 96 */
JMF 0:24d3eb812fd4 97 T *head(void);
JMF 0:24d3eb812fd4 98
JMF 0:24d3eb812fd4 99 /** Reset the buffer to 0. Useful if using head() to parse packeted data
JMF 0:24d3eb812fd4 100 */
JMF 0:24d3eb812fd4 101 void clear(void);
JMF 0:24d3eb812fd4 102
JMF 0:24d3eb812fd4 103 /** Determine if anything is readable in the buffer
JMF 0:24d3eb812fd4 104 * @return 1 if something can be read, 0 otherwise
JMF 0:24d3eb812fd4 105 */
JMF 0:24d3eb812fd4 106 uint32_t available(void);
JMF 0:24d3eb812fd4 107
JMF 0:24d3eb812fd4 108 /** Overloaded operator for writing to the buffer
JMF 0:24d3eb812fd4 109 * @param data Something to put in the buffer
JMF 0:24d3eb812fd4 110 * @return
JMF 0:24d3eb812fd4 111 */
JMF 0:24d3eb812fd4 112 MyBuffer &operator= (T data)
JMF 0:24d3eb812fd4 113 {
JMF 0:24d3eb812fd4 114 put(data);
JMF 0:24d3eb812fd4 115 return *this;
JMF 0:24d3eb812fd4 116 }
JMF 0:24d3eb812fd4 117
JMF 0:24d3eb812fd4 118 /** Overloaded operator for reading from the buffer
JMF 0:24d3eb812fd4 119 * @return Pull the oldest element from the buffer
JMF 0:24d3eb812fd4 120 */
JMF 0:24d3eb812fd4 121 operator int(void)
JMF 0:24d3eb812fd4 122 {
JMF 0:24d3eb812fd4 123 return get();
JMF 0:24d3eb812fd4 124 }
JMF 0:24d3eb812fd4 125
JMF 0:24d3eb812fd4 126 uint32_t peek(char c);
JMF 0:24d3eb812fd4 127
JMF 0:24d3eb812fd4 128 };
JMF 0:24d3eb812fd4 129
JMF 0:24d3eb812fd4 130 template <class T>
JMF 0:24d3eb812fd4 131 inline void MyBuffer<T>::put(T data)
JMF 0:24d3eb812fd4 132 {
JMF 0:24d3eb812fd4 133 _buf[_wloc++] = data;
JMF 0:24d3eb812fd4 134 _wloc %= (_size - 1);
JMF 0:24d3eb812fd4 135
JMF 0:24d3eb812fd4 136 return;
JMF 0:24d3eb812fd4 137 }
JMF 0:24d3eb812fd4 138
JMF 0:24d3eb812fd4 139 template <class T>
JMF 0:24d3eb812fd4 140 inline T MyBuffer<T>::get(void)
JMF 0:24d3eb812fd4 141 {
JMF 0:24d3eb812fd4 142 T data_pos = _buf[_rloc++];
JMF 0:24d3eb812fd4 143 _rloc %= (_size - 1);
JMF 0:24d3eb812fd4 144
JMF 0:24d3eb812fd4 145 return data_pos;
JMF 0:24d3eb812fd4 146 }
JMF 0:24d3eb812fd4 147
JMF 0:24d3eb812fd4 148 template <class T>
JMF 0:24d3eb812fd4 149 inline T *MyBuffer<T>::head(void)
JMF 0:24d3eb812fd4 150 {
JMF 0:24d3eb812fd4 151 T *data_pos = &_buf[0];
JMF 0:24d3eb812fd4 152
JMF 0:24d3eb812fd4 153 return data_pos;
JMF 0:24d3eb812fd4 154 }
JMF 0:24d3eb812fd4 155
JMF 0:24d3eb812fd4 156 template <class T>
JMF 0:24d3eb812fd4 157 inline uint32_t MyBuffer<T>::available(void)
JMF 0:24d3eb812fd4 158 {
JMF 0:24d3eb812fd4 159 return (_wloc == _rloc) ? 0 : 1;
JMF 0:24d3eb812fd4 160 //return 1;
JMF 0:24d3eb812fd4 161 }
JMF 0:24d3eb812fd4 162
JMF 0:24d3eb812fd4 163 #endif
JMF 0:24d3eb812fd4 164