156 lines
3.9 KiB
C
Executable File
156 lines
3.9 KiB
C
Executable File
/****************************************************************************
|
|
|
|
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 */
|