初始提交
This commit is contained in:
155
inc/utils/iot_utils.h
Executable file
155
inc/utils/iot_utils.h
Executable file
@@ -0,0 +1,155 @@
|
||||
/****************************************************************************
|
||||
|
||||
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
||||
|
||||
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
||||
be copied by any method or incorporated into another program without
|
||||
the express written consent of Aerospace C.Power. This Information or any portion
|
||||
thereof remains the property of Aerospace C.Power. The Information contained herein
|
||||
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
||||
liability for its use in any way and conveys no license or title under
|
||||
any patent or copyright and makes no representation or warranty that this
|
||||
Information is free from patent or copyright infringement.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef IOT_UTILS_H
|
||||
#define IOT_UTILS_H
|
||||
|
||||
/* exports includes */
|
||||
#include "iot_utils_api.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* iot_mac_addr_hash() - calculate hash value based upon mac address
|
||||
* @add: pointer to mac address to be caculated
|
||||
* @mask: mask to be applied to the calculated value
|
||||
*
|
||||
* return: calculated hash value
|
||||
*/
|
||||
static inline uint32_t iot_mac_addr_hash(uint8_t* addr, uint32_t mask)
|
||||
{
|
||||
uint32_t sum = 0, i = 0;
|
||||
|
||||
while (i < IOT_MAC_ADDR_LEN)
|
||||
sum += addr[i++];
|
||||
|
||||
sum &= mask;
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
/*
|
||||
* iot_meter_addr_hash() - calculate hash value based upon meter address
|
||||
* @add: pointer to meter address to be caculated
|
||||
* @mask: mask to be applied to the calculated value
|
||||
*
|
||||
* return: calculated hash value
|
||||
*/
|
||||
static inline uint32_t iot_meter_addr_hash(uint8_t* addr, uint32_t mask)
|
||||
{
|
||||
uint32_t sum = 0, i = 0;
|
||||
|
||||
while (i < IOT_METER_ADDR_LEN)
|
||||
sum += addr[i++];
|
||||
|
||||
sum &= mask;
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
/*
|
||||
* iot_calc_m_ratio() - calculate the multiplex ratio for r1 * r2
|
||||
* @r1: ratio 1 value
|
||||
* @r2: ratio 2 value
|
||||
*
|
||||
* return: calculated ratio value
|
||||
*/
|
||||
static inline uint8_t iot_calc_m_ratio(uint8_t r1, uint8_t r2)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = (uint8_t)((((uint32_t)(r1)) * ((uint32_t)(r2))) / 100);
|
||||
if (ret > 100)
|
||||
ret = 100;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* iot_calc_gcd() - calculate the greatest common divisor of two values
|
||||
* @a: value 1
|
||||
* @b: value 2
|
||||
*
|
||||
* return: calculated greatest common divisor
|
||||
*/
|
||||
static inline uint32_t iot_calc_gcd(uint16_t a, uint16_t b)
|
||||
{
|
||||
if (a == 0 || b == 0)
|
||||
return 0;
|
||||
|
||||
while (a != b) {
|
||||
if (a > b)
|
||||
a -= b;
|
||||
else
|
||||
b -= a;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
/*
|
||||
* iot_calc_lcm() - calculate the least common multiple of two values
|
||||
* @a: value 1
|
||||
* @b: value 2
|
||||
*
|
||||
* return: calculated least common multiple
|
||||
*/
|
||||
static inline uint32_t iot_calc_lcm(uint16_t a, uint16_t b)
|
||||
{
|
||||
uint32_t tmp1, tmp2;
|
||||
|
||||
if (a == 0 || b == 0)
|
||||
return 0;
|
||||
|
||||
tmp1 = a * b;
|
||||
tmp2 = iot_calc_gcd(a, b);
|
||||
|
||||
return (tmp1 / tmp2);
|
||||
}
|
||||
|
||||
typedef int (*iot_timeout_func)(int);
|
||||
|
||||
/* wait time for fun process */
|
||||
/**
|
||||
* @brief wait_timeout_fun - wait wait_time_ms for fun
|
||||
* @param func_pointer [wait function pointer]
|
||||
* @param arg [obj_func(arg)]
|
||||
* @param target_value [wait return flag]
|
||||
* @param wait_time_ms [wait time (ms)]
|
||||
* @return [ERR_OK or ERR_TIMEOVER]
|
||||
*/
|
||||
uint8_t iot_wait_timeout_fun(iot_timeout_func obj_func, \
|
||||
int arg, int target_value, uint32_t wait_time_ms);
|
||||
|
||||
typedef int (*iot_timeout_func2)(void *);
|
||||
/* wait time for fun process */
|
||||
/**
|
||||
* @brief iot_wait_timeout_fun2 - wait wait_time_ms for fun
|
||||
* @param func_pointer [wait function pointer]
|
||||
* @param arg [obj_func(arg)]
|
||||
* @param target_value [wait return flag]
|
||||
* @param wait_time_ms [wait time (ms)]
|
||||
* @return [ERR_OK or ERR_TIMEOVER]
|
||||
*/
|
||||
uint8_t iot_wait_timeout_fun2(iot_timeout_func2 obj_func, \
|
||||
void *arg, int target_value, uint32_t wait_time_ms);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* IOT_UTILS_H */
|
Reference in New Issue
Block a user