Skip to content
11 changes: 4 additions & 7 deletions examples/enumerate.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,17 @@ This example shows how to enumerate the attached devices.

int main( void )
{
char *error = NULL;
if ( !tempered_init( &error ) )
char error[256];
if ( !tempered_init( error, sizeof(error) ) )
{
fprintf( stderr, "%s\n", error );
free( error );
return 1;
}

struct tempered_device_list *list = tempered_enumerate( &error );
struct tempered_device_list *list = tempered_enumerate( error, sizeof(error) );
if ( list == NULL )
{
fprintf( stderr, "%s\n", error );
free( error );
}
else
{
Expand All @@ -39,10 +37,9 @@ int main( void )
tempered_free_device_list( list );
}

if ( !tempered_exit( &error ) )
if ( !tempered_exit( error, sizeof(error) ) )
{
fprintf( stderr, "%s\n", error );
free( error );
return 1;
}
return 0;
Expand Down
16 changes: 6 additions & 10 deletions examples/read-all.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,11 @@ void read_device( struct tempered_device_list *dev )
dev->interface_number,
dev->type_name
);
char *error = NULL;
tempered_device *device = tempered_open( dev, &error );
char error[256];
tempered_device *device = tempered_open( dev, error, sizeof(error) );
if ( device == NULL )
{
printf( "\tOpen failed, error: %s\n", error );
free( error );
return;
}
printf(
Expand Down Expand Up @@ -96,15 +95,14 @@ void read_device( struct tempered_device_list *dev )

int main( void )
{
char *error = NULL;
if ( !tempered_init( &error ) )
char error[256];
if ( !tempered_init( error, sizeof(error) ) )
{
fprintf( stderr, "Failed to initialize libtempered: %s\n", error );
free( error );
return 1;
}

struct tempered_device_list *list = tempered_enumerate( &error );
struct tempered_device_list *list = tempered_enumerate( error, sizeof(error) );
if ( list == NULL )
{
if ( error == NULL )
Expand All @@ -114,7 +112,6 @@ int main( void )
else
{
fprintf( stderr, "Failed to enumerate devices: %s\n", error );
free( error );
}
}
else
Expand All @@ -127,10 +124,9 @@ int main( void )
tempered_free_device_list( list );
}

if ( !tempered_exit( &error ) )
if ( !tempered_exit( error, sizeof(error) ) )
{
fprintf( stderr, "Failed to shut down libtempered: %s\n", error );
free( error );
return 1;
}
return 0;
Expand Down
29 changes: 9 additions & 20 deletions examples/read-repeat.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ void read_device_sensor( tempered_device *device, int sensor )
void read_repeatedly( tempered_device *device )
{
int i;
for ( i = 0; i < 10; i++ )
for ( i = 0; i < 500; i++ )
{
if ( i > 0 )
{
sleep( 5 );
sleep( 1 );
}
if ( !tempered_read_sensors( device ) )
{
Expand All @@ -82,19 +82,11 @@ void read_repeatedly( tempered_device *device )
/** Open the device with the given device path. */
tempered_device* open_device( char *dev_path )
{
char *error = NULL;
struct tempered_device_list *list = tempered_enumerate( &error );
char error[256];
struct tempered_device_list *list = tempered_enumerate( error, sizeof(error) );
if ( list == NULL )
{
if ( error == NULL )
{
printf( "No devices were found.\n" );
}
else
{
fprintf( stderr, "Failed to enumerate devices: %s\n", error );
free( error );
}
fprintf( stderr, "Failed to enumerate devices: %s\n", error );
return NULL;
}
tempered_device *device = NULL;
Expand All @@ -105,7 +97,7 @@ tempered_device* open_device( char *dev_path )
if ( strcmp( dev->path, dev_path ) == 0 )
{
found = true;
device = tempered_open( dev, &error );
device = tempered_open( dev, error, sizeof(error) );
break;
}
}
Expand All @@ -118,7 +110,6 @@ tempered_device* open_device( char *dev_path )
stderr, "Opening %s failed, error: %s\n",
dev_path, error
);
free( error );
}
else
{
Expand All @@ -135,11 +126,10 @@ int main( int argc, char *argv[] )
fprintf( stderr, "Usage: read-repeat <device>\n" );
return 1;
}
char *error = NULL;
if ( !tempered_init( &error ) )
char error[256];
if ( !tempered_init( error, sizeof(error) ) )
{
fprintf( stderr, "Failed to initialize libtempered: %s\n", error );
free( error );
return 1;
}

Expand All @@ -150,10 +140,9 @@ int main( int argc, char *argv[] )
tempered_close( device );
}

if ( !tempered_exit( &error ) )
if ( !tempered_exit( error, sizeof(error) ) )
{
fprintf( stderr, "Failed to shut down libtempered: %s\n", error );
free( error );
return 1;
}
return 0;
Expand Down
2 changes: 2 additions & 0 deletions libtempered/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ endif()

if (BUILD_SHARED_LIB)
add_library(tempered-shared SHARED ${libtempered_FILES})
target_link_libraries(tempered-shared ${HIDAPI_LINK_LIBS})
set_target_properties(tempered-shared PROPERTIES
OUTPUT_NAME tempered
SOVERSION 0
Expand All @@ -22,6 +23,7 @@ endif()

if (BUILD_STATIC_LIB)
add_library(tempered-static STATIC ${libtempered_FILES})
target_link_libraries(tempered-static ${HIDAPI_LINK_LIBS})
set_target_properties(tempered-static PROPERTIES
OUTPUT_NAME tempered
)
Expand Down
78 changes: 61 additions & 17 deletions libtempered/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,59 @@ void tempered_set_error( tempered_device *device, char *error )
}

/** Initialize the TEMPered library. */
bool tempered_init( char **error )
bool tempered_init( char *error, size_t err_size )
{
return temper_type_init( error );
if ( error == NULL ) //don't need to handle error messages
{
return temper_type_init( NULL );
}

char *err;
if ( !temper_type_init( &err ) )
{
snprintf(error, err_size, "%s", err);
free(err); //free the damn thing

return false;
}
return true;
}

/** Finalize the TEMPered library. */
bool tempered_exit( char **error )
bool tempered_exit( char *error, size_t err_size )
{
return temper_type_exit( error );
if ( error == NULL ) //don't need to handle error messages
{
return temper_type_init( NULL );
}

char *err;
if ( !temper_type_exit( &err ) )
{
snprintf(error, err_size, "%s", err);
free(err); //free the damn thing

return false;
}
return true;
}

/** Enumerate the TEMPer devices. */
struct tempered_device_list* tempered_enumerate( char **error )
struct tempered_device_list* tempered_enumerate( char *error, size_t err_size )
{
return temper_type_enumerate( error );
if ( error == NULL ) //don't need to handle error messages
{
return temper_type_enumerate( NULL );
}

char *err;
struct tempered_device_list *list = temper_type_enumerate( &err );
if ( list == NULL )
{
snprintf(error, err_size, "%s", err);
free(err); //free the damn thing
}
return list;
}

/** Free the memory used by the given device list. */
Expand Down Expand Up @@ -95,13 +133,13 @@ static bool tempered_open__find_subtype( tempered_device *device )
}

/** Open a given device from the list. */
tempered_device* tempered_open( struct tempered_device_list *list, char **error )
tempered_device* tempered_open( struct tempered_device_list *list, char *error, size_t err_size )
{
if ( list == NULL )
{
if ( error != NULL )
{
*error = strdup( "Invalid device given." );
snprintf( error, err_size, "Invalid device given." );
}
return NULL;
}
Expand All @@ -112,15 +150,15 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( error != NULL )
{
*error = strdup( "Invalid device given (type not found)." );
snprintf( error, err_size, "Invalid device given (type not found)." );
}
return NULL;
}
if ( type->open == NULL )
{
if ( error != NULL )
{
*error = strdup( "Device type has no open method." );
snprintf( error, err_size, "Device type has no open method." );
}
return NULL;
}
Expand All @@ -129,7 +167,7 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( error != NULL )
{
*error = strdup( "Could not allocate memory for the device." );
snprintf( error, err_size, "Could not allocate memory for the device." );
}
return NULL;
}
Expand All @@ -142,7 +180,7 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( error != NULL )
{
*error = strdup( "Could not allocate memory for the path." );
snprintf( error, err_size, "Could not allocate memory for the path." );
}
free( device );
return NULL;
Expand All @@ -153,11 +191,13 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( device->error != NULL )
{
*error = device->error;
snprintf( error, err_size,
"Type-specific device open failed with error: %s", device->error
);
}
else
{
*error = strdup(
snprintf( error, err_size,
"Type-specific device open failed with no error message."
);
}
Expand All @@ -174,7 +214,8 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( error != NULL )
{
*error = device->error;
snprintf( error, err_size, "%s", device->error );
free( device->error );
device->error = NULL;
}
tempered_close( device );
Expand All @@ -188,12 +229,15 @@ tempered_device* tempered_open( struct tempered_device_list *list, char **error
{
if ( device->error != NULL )
{
*error = device->error;
snprintf( error, err_size,
"Type-specific device open failed with error: %s", device->error
);
free( device->error );
device->error = NULL;
}
else
{
*error = strdup(
snprintf( error, err_size,
"Type-specific device open failed with no error message."
);
}
Expand Down
Loading