le_basics.h File Reference

Go to the source code of this file.

Macros

#define CONTAINER_OF(memberPtr, type, member)   ((type*)(((uint8_t*)(memberPtr))-((size_t)(&(((type*)0)->member)))))
 
#define NUM_ARRAY_MEMBERS(array)   (sizeof(array) / sizeof((array)[0]))
 
#define INDEX_OF_ARRAY_MEMBER(array, memberPtr)   ((((size_t)memberPtr) - ((size_t)array)) / sizeof(*(memberPtr)))
 
#define STRINGIZE(x)   STRINGIZE_EXPAND(x)
 
#define STRINGIZE_EXPAND(x)   #x
 
#define LE_SHARED   __attribute__((visibility ("default")))
 
#define __is_identifier(x)   1
 
#define __has_warning(x)   0
 
#define LE_NONNULL
 
#define LE_NULLABLE
 
Bit Masks

Single byte bit definitions that can be used for bit masking.

#define BIT0   0x01
 
#define BIT1   0x02
 
#define BIT2   0x04
 
#define BIT3   0x08
 
#define BIT4   0x10
 
#define BIT5   0x20
 
#define BIT6   0x40
 
#define BIT7   0x80
 

Enumerations

enum  le_result_t {
  LE_OK = 0, LE_NOT_FOUND = -1, LE_NOT_POSSIBLE = -2, LE_OUT_OF_RANGE = -3,
  LE_NO_MEMORY = -4, LE_NOT_PERMITTED = -5, LE_FAULT = -6, LE_COMM_ERROR = -7,
  LE_TIMEOUT = -8, LE_OVERFLOW = -9, LE_UNDERFLOW = -10, LE_WOULD_BLOCK = -11,
  LE_DEADLOCK = -12, LE_FORMAT_ERROR = -13, LE_DUPLICATE = -14, LE_BAD_PARAMETER = -15,
  LE_CLOSED = -16, LE_BUSY = -17, LE_UNSUPPORTED = -18, LE_IO_ERROR = -19,
  LE_NOT_IMPLEMENTED = -20, LE_UNAVAILABLE = -21, LE_TERMINATED = -22
}
 
enum  le_onoff_t { LE_OFF = 0, LE_ON = 1 }
 

Detailed Description

Legato Basic Type and Constant Definitions include file.

Macro Definition Documentation

#define CONTAINER_OF (   memberPtr,
  type,
  member 
)    ((type*)(((uint8_t*)(memberPtr))-((size_t)(&(((type*)0)->member)))))

Find the address of a containing structure or union, based on the address of one of its members.

If countPtr points to the count member of an object type my_class_t, then a pointer to that object should use this:

1 my_class_t* myObjPtr = CONTAINER_OF(countPtr, my_class_t, count);
#define INDEX_OF_ARRAY_MEMBER (   array,
  memberPtr 
)    ((((size_t)memberPtr) - ((size_t)array)) / sizeof(*(memberPtr)))

Computes the index of a member within an array.

This code sample prints out "The 'w' is at index 6.":

1 const char message[] = "Hello world!";
2 const char* charPtr;
3 int i;
4 
5 for (i = 0; i < sizeof(message); i++)
6 {
7  if (message[i] == 'w')
8  {
9  charPtr = &message[i];
10  }
11 }
12 
13 printf("The 'w' is at index %zu.\n", INDEX_OF_ARRAY_MEMBER(message, charPtr));
#define LE_SHARED   __attribute__((visibility ("default")))

Macro used to declare that a symbol should be shared outside the dynamic shared object in which it is defined.

This can be used with either a declaration or a definition.

E.g., with a declaration (perhaps in a header file):

1 LE_SHARED void my_Function();

E.g., with a definition (in a .c file):

1 LE_SHARED void my_OtherFunction()
2 {
3  LE_INFO("Hello world.");
4 }
#define NUM_ARRAY_MEMBERS (   array)    (sizeof(array) / sizeof((array)[0]))

Computes number of members in an array at compile time.

Warning
Does NOT work for pointers to arrays.

Here's a code sample:

1 const char message[] = "Hello world!";
2 
3 size_t x = NUM_ARRAY_MEMBERS(message);
4 
5 printf("%lu\n", x);

Will print 13 on a 32-bit target.

But this example is incorrect:

1 const char message[] = "Hello world!";
2 const char* messagePtr = &message;
3 
4 size_t x = NUM_ARRAY_MEMBERS(messagePtr); // NO! BAD PROGRAMMER! BAD!
5 
6 printf("%lu\n", x);
#define STRINGIZE (   x)    STRINGIZE_EXPAND(x)

This function takes the characters as an argument and puts quotes around them.

Code sample:

1 const char name[] = STRINGIZE(foo);

Is seen by the compiler as

1 const char name[] = "foo";

The STRINGIZE() macro function passes names like macro definitions on the compiler's command-line. If the above code were changed to:

1 const char name[] = STRINGIZE(NAME);

then compiling it using the following command line makes it equivalent to the example above:

1 $ gcc -c -DNAME=foo file.c

The -DNAME=foo defines a macro called NAME with a value foo. The C preprocessor then replaces STRINGIZE(NAME) with "foo".

#define STRINGIZE_EXPAND (   x)    #x

Helper macro for STRINGIZE(x).

Enumeration Type Documentation

enum le_onoff_t

ON/OFF type.

Standard result codes.

Note
All error codes are negative integers. They allow functions with signed integers to return non-negative values when successful or standard error codes on failure.
Deprecated:
the result code LE_NOT_POSSIBLE is scheduled to be removed.
Enumerator
LE_OK 

Successful.

LE_NOT_FOUND 

Referenced item does not exist or could not be found.

LE_NOT_POSSIBLE 
Deprecated:
It is not possible to perform the requested action.
LE_OUT_OF_RANGE 

An index or other value is out of range.

LE_NO_MEMORY 

Insufficient memory is available.

LE_NOT_PERMITTED 

Current user does not have permission to perform requested action.

LE_FAULT 

Unspecified internal error.

LE_COMM_ERROR 

Communications error.

LE_TIMEOUT 

A time-out occurred.

LE_OVERFLOW 

An overflow occurred or would have occurred.

LE_UNDERFLOW 

An underflow occurred or would have occurred.

LE_WOULD_BLOCK 

Would have blocked if non-blocking behaviour was not requested.

LE_DEADLOCK 

Would have caused a deadlock.

LE_FORMAT_ERROR 

Format error.

LE_DUPLICATE 

Duplicate entry found or operation already performed.

LE_BAD_PARAMETER 

Parameter is invalid.

LE_CLOSED 

The resource is closed.

LE_BUSY 

The resource is busy.

LE_UNSUPPORTED 

The underlying resource does not support this operation.

LE_IO_ERROR 

An IO operation failed.

LE_NOT_IMPLEMENTED 

Unimplemented functionality.

LE_UNAVAILABLE 

A transient or temporary loss of a service or resource.

LE_TERMINATED 

The process, operation, data stream, session, etc. has stopped.