at v3.7 51 lines 1.3 kB view raw
1/* Copyright (C) 2007-2012 B.A.T.M.A.N. contributors: 2 * 3 * Marek Lindner 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of version 2 of the GNU General Public 7 * License as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 17 * 02110-1301, USA 18 */ 19 20#include "main.h" 21#include "ring_buffer.h" 22 23void batadv_ring_buffer_set(uint8_t lq_recv[], uint8_t *lq_index, 24 uint8_t value) 25{ 26 lq_recv[*lq_index] = value; 27 *lq_index = (*lq_index + 1) % BATADV_TQ_GLOBAL_WINDOW_SIZE; 28} 29 30uint8_t batadv_ring_buffer_avg(const uint8_t lq_recv[]) 31{ 32 const uint8_t *ptr; 33 uint16_t count = 0, i = 0, sum = 0; 34 35 ptr = lq_recv; 36 37 while (i < BATADV_TQ_GLOBAL_WINDOW_SIZE) { 38 if (*ptr != 0) { 39 count++; 40 sum += *ptr; 41 } 42 43 i++; 44 ptr++; 45 } 46 47 if (count == 0) 48 return 0; 49 50 return (uint8_t)(sum / count); 51}