All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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
 
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
}
 
enum  le_onoff_t { LE_OFF = 0, LE_ON = 1 }
 

Detailed Description

Legato Basic Type and Constant Definitions include file.

Copyright (C) Sierra Wireless, Inc. 2014. All rights reserved. Use of this work is subject to license.

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:

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.":

const char message[] = "Hello world!";
const char* charPtr;
int i;
for (i = 0; i < sizeof(message); i++)
{
if (message[i] == 'w')
{
charPtr = &message[i];
}
}
printf("The 'w' is at index %zu.\n", INDEX_OF_ARRAY_MEMBER(message, charPtr));
#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:

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

Will print 13 on a 32-bit target.

But this example is incorrect:

const char message[] = "Hello world!";
const char* messagePtr = &message;
size_t x = NUM_ARRAY_MEMBERS(messagePtr); // NO! BAD PROGRAMMER! BAD!
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:

const char name[] = STRINGIZE(foo);

Is seen by the compiler as

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:

const char name[] = STRINGIZE(NAME);

then compiling it using the gcc -c command makes it equivalent to the example above:

$ gcc -c -DNAME=foo file.c
#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.
Enumerator
LE_OK 

Successful.

LE_NOT_FOUND 

Referenced item does not exist or could not be found.

LE_NOT_POSSIBLE 

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 or unavailable.