This repository has been archived on 2026-02-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
can/Inc/mmr_can_util.h
T
Stefano Calabretti 4d5c1934a4 Scs (#3)
* Add send scs

* Create scs dict

* Fix compilation errors

* Fix compile error

* Change default include

* Add Timer SCS manager

* Remove unused files

* Fix bugs

* Add documentation

* Add SCS manager

bozza

* Refactor

* Use same naming convention

* Add tick provider

* Update header

* Fix header bit translation

* Test HandleNext OK

* Remove linting

* Remove indents

* Add documentation

* Improve docs

* Remove pointer

* Remove mailbox

* Remove useless comment

* Add newline

* Fix compile errors

* Separate scs entries from manager

* Refactor

* Fix include guards

Co-authored-by: nicolagutierrez <nicolagutierrez.ng@gmail.com>
2022-02-23 21:08:47 +01:00

84 lines
1.8 KiB
C

/**
* @file mmr_can_util.h
* @brief
* Utility functions and macros.
*/
#ifndef INC_MMR_CAN_UTIL_H_
#define INC_MMR_CAN_UTIL_H_
#include <stdint.h>
#include <string.h>
/**
* @brief
* Returns the size of the given array.
*
* This only works on static arrays declared
* within the current scope, that is:
* int main() {
* int arr[] = {1, 2, 3};
* int len = sizeofarray(arr);
* }
*/
#define sizeofarray(array) \
(sizeof(array) / sizeof(*(array)))
/**
* @brief
* Returns the length of a statically, non const ptr, declared
* string.
* That is:
* int main() {
* char str[] = "abc";
* int len = stringArrayLength(str);
* }
*/
#define stringArrayLength(array) \
stringBufferLength((array), sizeofarray(array))
/**
* @brief
* Returns the length of a string buffer.
* Its format must be in bytes, so it could be:
* const char*
* char*
* uint8_t*
* etc...
*/
#define stringBufferLength(pbuffer, maxLen) \
strnlen((const char*)(pbuffer), maxLen)
/**
* @brief
* Returns the minimum between the
* two given values.
* E.g. min(1, 2) == 1 // true
*/
#define min(a, b) ((a) < (b) ? a : b)
#define mask(value, bits) (value & bits)
#define convertTo(resultType, lvalue) (*interpretAs(resultType*, &(lvalue)))
#define interpretAs(resultType, lvalue) ((resultType)(lvalue))
/**
* @brief
* Represents the result of an asynchronous computation
*
* Either
* - Error: the computation resulted in error
* - Pending: the computation is still undergoing
* - Completed: the computation has completed successfully
* and its results can be read
*
* Asynchronous logic can be easily implemented using State Machines
*/
typedef enum {
MMR_ASYNC_RESULT_ERROR,
MMR_ASYNC_RESULT_PENDING,
MMR_ASYNC_RESULT_COMPLETED,
} MmrAsyncResult;
#endif /* INC_MMR_CAN_UTIL_H_ */