2013-01-04 03:05:31 +01:00
/* Copyright (C) 2007-2013 B.A.T.M.A.N. contributors:
2010-12-13 11:19:28 +00:00
*
* Marek Lindner
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA
*/
# include "main.h"
# include "ring_buffer.h"
2012-05-12 02:09:35 +02:00
void batadv_ring_buffer_set ( uint8_t lq_recv [ ] , uint8_t * lq_index ,
uint8_t value )
2010-12-13 11:19:28 +00:00
{
lq_recv [ * lq_index ] = value ;
2012-06-03 22:19:17 +02:00
* lq_index = ( * lq_index + 1 ) % BATADV_TQ_GLOBAL_WINDOW_SIZE ;
2010-12-13 11:19:28 +00:00
}
2012-05-12 02:09:35 +02:00
uint8_t batadv_ring_buffer_avg ( const uint8_t lq_recv [ ] )
2010-12-13 11:19:28 +00:00
{
2011-05-14 23:14:50 +02:00
const uint8_t * ptr ;
2010-12-13 11:19:28 +00:00
uint16_t count = 0 , i = 0 , sum = 0 ;
ptr = lq_recv ;
2012-06-03 22:19:17 +02:00
while ( i < BATADV_TQ_GLOBAL_WINDOW_SIZE ) {
2010-12-13 11:19:28 +00:00
if ( * ptr ! = 0 ) {
count + + ;
sum + = * ptr ;
}
i + + ;
ptr + + ;
}
if ( count = = 0 )
return 0 ;
return ( uint8_t ) ( sum / count ) ;
}