diff --git a/api/mraa/common.h b/api/mraa/common.h index b91d8ef..72ce90c 100644 --- a/api/mraa/common.h +++ b/api/mraa/common.h @@ -207,7 +207,8 @@ mraa_result_t mraa_init() __attribute__((constructor)); * De-Initilise MRAA * * This is not a strict requirement but useful to test memory leaks and for - * people who like super clean code. + * people who like super clean code. If dynamically loading & unloading + * libmraa you need to call this before unloading the library. */ void mraa_deinit(); @@ -234,6 +235,15 @@ unsigned int mraa_adc_raw_bits(); */ unsigned int mraa_adc_supported_bits(); + +/** + * Sets the log level to use from 0-7 where 7 is very verbose. These are the + * syslog log levels, see syslog(3) for more information on the levels. + * + * @return Result of operation + */ +mraa_result_t mraa_set_log_level(int level); + #ifdef __cplusplus } #endif diff --git a/api/mraa/common.hpp b/api/mraa/common.hpp index 328e886..9da75ac 100644 --- a/api/mraa/common.hpp +++ b/api/mraa/common.hpp @@ -116,4 +116,15 @@ unsigned int adcSupportedBits() return mraa_adc_supported_bits(); } +/** + * Sets the log level to use from 0-7 where 7 is very verbose. These are the + * syslog log levels, see syslog(3) for more information on the levels. + * + * @return Result of operation + */ +mraa_result_t setLogLevel(int level) +{ + return mraa_set_log_level(level); +} + } diff --git a/examples/hellomraa.c b/examples/hellomraa.c index 70fff49..f4cf5d5 100644 --- a/examples/hellomraa.c +++ b/examples/hellomraa.c @@ -22,15 +22,22 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "stdio.h" +#include +#include //! [Interesting] #include "mraa.h" int main(int argc, char **argv) { + mraa_result_t ret; + + ret = mraa_set_log_level(LOG_DEBUG); + fprintf(stdout, "hello mraa\n Version: %s\n", mraa_get_version()); + mraa_deinit(); - return 0; + + return ret; } //! [Interesting] diff --git a/include/mraa_internal_types.h b/include/mraa_internal_types.h index e92c1f0..efe0a09 100644 --- a/include/mraa_internal_types.h +++ b/include/mraa_internal_types.h @@ -27,6 +27,11 @@ #include "common.h" +// general status failures for internal functions +#define MRAA_PLATFORM_NO_INIT -3 +#define MRAA_IO_SETUP_FAILURE -2 +#define MRAA_NO_SUCH_IO -1 + /** * A structure representing a gpio pin. */ diff --git a/src/aio/aio.c b/src/aio/aio.c index 51d374a..8613352 100644 --- a/src/aio/aio.c +++ b/src/aio/aio.c @@ -47,8 +47,8 @@ aio_get_valid_fp(mraa_aio_context dev) dev->adc_in_fp = open(file_path, O_RDONLY); if (dev->adc_in_fp == -1) { - fprintf(stderr, "Failed to open Analog input raw file %s for " - "reading!\n", file_path); + syslog(LOG_ERR, "Failed to open Analog input raw file %s for " + "reading!", file_path); return MRAA_ERROR_INVALID_RESOURCE; } @@ -67,16 +67,16 @@ mraa_aio_init(unsigned int aio_channel) int checked_pin = mraa_setup_aio(aio_channel); if (checked_pin < 0) { switch (checked_pin) { - case -1: - fprintf(stderr, "Invalid analog input channel %d specified\n", + case MRAA_NO_SUCH_IO: + syslog(LOG_ERR, "Invalid analog input channel %d specified", aio_channel); return NULL; - case -2: - fprintf(stderr, "Failed to set-up analog input channel %d " - "multiplexer\n", aio_channel); + case MRAA_IO_SETUP_FAILURE: + syslog(LOG_ERR, "Failed to set-up analog input channel %d " + "multiplexer", aio_channel); return NULL; - case -3: - fprintf(stderr, "Platform not initialised"); + case MRAA_PLATFORM_NO_INIT: + syslog(LOG_ERR, "Platform not initialised"); return NULL; default: return NULL; @@ -86,7 +86,7 @@ mraa_aio_init(unsigned int aio_channel) //Create ADC device connected to specified channel mraa_aio_context dev = malloc(sizeof(struct _aio)); if (dev == NULL) { - fprintf(stderr, "Insufficient memory for specified Analog input channel " + syslog(LOG_ERR, "Insufficient memory for specified Analog input channel " "%d\n", aio_channel); return NULL; } @@ -123,7 +123,7 @@ mraa_aio_read(mraa_aio_context dev) lseek(dev->adc_in_fp, 0, SEEK_SET); if (read(dev->adc_in_fp, buffer, sizeof(buffer)) < 1) { - fprintf(stderr, "Failed to read a sensible value\n"); + syslog(LOG_ERR, "Failed to read a sensible value"); } lseek(dev->adc_in_fp, 0, SEEK_SET); @@ -131,10 +131,10 @@ mraa_aio_read(mraa_aio_context dev) char *end; unsigned int analog_value = (unsigned int) strtoul(buffer, &end, 10); if (end == &buffer[0]) { - fprintf(stderr, "%s is not a decimal number\n", buffer); + syslog(LOG_ERR, "%s is not a decimal number", buffer); } else if (errno != 0) { - fprintf(stderr, "errno was set\n"); + syslog(LOG_ERR, "errno was set"); } if (dev->value_bit != raw_bits) { @@ -164,11 +164,11 @@ mraa_result_t mraa_aio_set_bit(mraa_aio_context dev, int bits) { if (dev == NULL) { - fprintf(stderr, "AIO Device not valid\n"); + syslog(LOG_ERR, "AIO Device not valid"); return MRAA_ERROR_INVALID_RESOURCE; } if (bits < 1) { - fprintf(stderr, "AIO Device not valid\n"); + syslog(LOG_ERR, "AIO Device not valid"); return MRAA_ERROR_INVALID_PARAMETER; } dev->value_bit = bits; @@ -179,7 +179,7 @@ int mraa_aio_get_bit(mraa_aio_context dev) { if (dev == NULL) { - fprintf(stderr, "AIO Device not valid\n"); + syslog(LOG_ERR, "AIO Device not valid"); return 0; } return dev->value_bit; diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index ec71531..896e688 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -101,12 +101,12 @@ mraa_gpio_init_raw(int pin) } else { int export = open(SYSFS_CLASS_GPIO "/export", O_WRONLY); if (export == -1) { - fprintf(stderr, "Failed to open export for writing!\n"); + syslog(LOG_ERR, "Failed to open export for writing"); return NULL; } length = snprintf(bu, sizeof(bu), "%d", dev->pin); if (write(export, bu, length*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to export\n"); + syslog(LOG_ERR, "Failed to write to export"); close(export); return NULL; } @@ -190,11 +190,11 @@ mraa_gpio_interrupt_handler(void* arg) PyObject *ret; arglist = Py_BuildValue("(i)", dev->isr_args); if (arglist == NULL) { - fprintf(stdout, "Py_BuildValue NULL\n"); + syslog(LOG_ERR, "Py_BuildValue NULL"); } else { ret = PyEval_CallObject((PyObject*)dev->isr, arglist); if (ret == NULL) { - fprintf(stdout, "PyEval_CallObject failed\n"); + syslog(LOG_ERR, "PyEval_CallObject failed"); } else { Py_DECREF(ret); } @@ -229,7 +229,7 @@ mraa_gpio_edge_mode(mraa_gpio_context dev, gpio_edge_t mode) int edge = open(filepath, O_RDWR); if (edge == -1) { - fprintf(stderr, "Failed to open edge for writing!\n"); + syslog(LOG_ERR, "Failed to open edge for writing"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -253,7 +253,7 @@ mraa_gpio_edge_mode(mraa_gpio_context dev, gpio_edge_t mode) return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; } if (write(edge, bu, length*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to edge\n"); + syslog(LOG_ERR, "Failed to write to edge"); close(edge); return MRAA_ERROR_INVALID_RESOURCE; } @@ -339,7 +339,7 @@ mraa_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode) int drive = open(filepath, O_WRONLY); if (drive == -1) { - fprintf(stderr, "Failed to open drive for writing!\n"); + syslog(LOG_ERR, "Failed to open drive for writing"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -363,7 +363,7 @@ mraa_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode) return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; } if (write(drive, bu, length*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to drive mode!\n"); + syslog(LOG_ERR, "Failed to write to drive mode"); close(drive); return MRAA_ERROR_INVALID_RESOURCE; @@ -432,7 +432,7 @@ mraa_gpio_read(mraa_gpio_context dev) { if (dev->value_fp == -1) { if (mraa_gpio_get_valfp(dev) != MRAA_SUCCESS) { - fprintf(stderr, "Failed to get value file pointer\n"); + syslog(LOG_ERR, "Failed to get value file pointer"); } } else { @@ -441,7 +441,7 @@ mraa_gpio_read(mraa_gpio_context dev) } char bu[2]; if (read(dev->value_fp, bu, 2*sizeof(char)) != 2) { - fprintf(stderr, "Failed to read a sensible value from sysfs"); + syslog(LOG_ERR, "Failed to read a sensible value from sysfs"); } lseek(dev->value_fp, 0, SEEK_SET); int ret = strtol(bu, NULL, 10); @@ -485,14 +485,14 @@ mraa_gpio_unexport_force(mraa_gpio_context dev) { int unexport = open(SYSFS_CLASS_GPIO "/unexport", O_WRONLY); if (unexport == -1) { - fprintf(stderr, "Failed to open unexport for writing!\n"); + syslog(LOG_ERR, "Failed to open unexport for writing"); return MRAA_ERROR_INVALID_RESOURCE; } char bu[MAX_SIZE]; int length = snprintf(bu, sizeof(bu), "%d", dev->pin); if (write(unexport, bu, length*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to unexport\n"); + syslog(LOG_ERR, "Failed to write to unexport"); close(unexport); return MRAA_ERROR_INVALID_RESOURCE; } @@ -550,7 +550,7 @@ mraa_gpio_use_mmaped(mraa_gpio_context dev, mraa_boolean_t mmap_en) int fd; fd = open(mmp->mem_dev, O_RDWR); if (fd < 1) { - fprintf(stderr, "Unable to open memory device\n"); + syslog(LOG_ERR, "Unable to open memory device"); return MRAA_ERROR_INVALID_RESOURCE; } dev->reg_sz = mmp->mem_sz; diff --git a/src/i2c/i2c.c b/src/i2c/i2c.c index 7a0724b..c53aeda 100644 --- a/src/i2c/i2c.c +++ b/src/i2c/i2c.c @@ -32,14 +32,14 @@ mraa_i2c_init(int bus) int checked_pin = mraa_setup_i2c(bus); if (checked_pin < 0) { switch(checked_pin) { - case -1: - fprintf(stderr, "No i2c on board\n"); + case MRAA_NO_SUCH_IO: + syslog(LOG_ERR, "No i2c on board"); return NULL; - case -2: - fprintf(stderr, "Failed to set-up i2c multiplexer!\n"); + case MRAA_IO_SETUP_FAILURE: + syslog(LOG_ERR, "Failed to set-up i2c multiplexer"); return NULL; - case -3: - fprintf(stderr, "Platform Not Initialised\n"); + case MRAA_PLATFORM_NO_INIT: + syslog(LOG_ERR, "Platform Not Initialised"); return NULL; default: return NULL; } @@ -61,7 +61,7 @@ mraa_i2c_init_raw(unsigned int bus) char filepath[32]; snprintf(filepath, 32, "/dev/i2c-%u", bus); if ((dev->fh = open(filepath, O_RDWR)) < 1) { - fprintf(stderr, "Failed to open requested i2c port %s\n", filepath); + syslog(LOG_ERR, "Failed to open requested i2c port %s", filepath); } if (advance_func->i2c_init_post != NULL) { @@ -106,7 +106,7 @@ mraa_result_t mraa_i2c_write(mraa_i2c_context dev, const uint8_t* data, int length) { if (i2c_smbus_write_i2c_block_data(dev->fh, data[0], length-1, (uint8_t*) data+1) < 0) { - fprintf(stderr, "Failed to write to i2c\n"); + syslog(LOG_ERR, "Failed to write to i2c"); return MRAA_ERROR_INVALID_HANDLE; } return MRAA_SUCCESS; @@ -116,7 +116,7 @@ mraa_result_t mraa_i2c_write_byte(mraa_i2c_context dev, const uint8_t data) { if (i2c_smbus_write_byte(dev->fh, data) < 0) { - fprintf(stderr, "Failed to write to i2c\n"); + syslog(LOG_ERR, "Failed to write to i2c"); return MRAA_ERROR_INVALID_HANDLE; } return MRAA_SUCCESS; @@ -127,7 +127,7 @@ mraa_i2c_address(mraa_i2c_context dev, int addr) { dev->addr = addr; if (ioctl(dev->fh, I2C_SLAVE_FORCE, addr) < 0) { - fprintf(stderr, "Failed to set slave address %d\n", addr); + syslog(LOG_ERR, "Failed to set slave address %d", addr); return MRAA_ERROR_INVALID_HANDLE; } return MRAA_SUCCESS; diff --git a/src/intel_edison_fab_c.c b/src/intel_edison_fab_c.c index e4b385a..bdecb2c 100644 --- a/src/intel_edison_fab_c.c +++ b/src/intel_edison_fab_c.c @@ -62,7 +62,7 @@ mraa_intel_edison_pinmode_change(int sysfs, int mode) snprintf(buffer, MAX_SIZE, SYSFS_PINMODE_PATH "%i/current_pinmux",sysfs); int modef = open(buffer, O_WRONLY); if (modef == -1) { - fprintf(stderr, "Failed to open SoC pinmode for opening\n"); + syslog(LOG_ERR, "Failed to open SoC pinmode for opening"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -120,7 +120,7 @@ mraa_result_t mraa_intel_edison_i2c_init_pre(unsigned int bus) { if(bus != 6) { - fprintf(stderr, "Edison: You can use that bus, ERR\n"); + syslog(LOG_ERR, "Edison: You can't use that bus :/"); return MRAA_ERROR_INVALID_RESOURCE; } mraa_gpio_write(tristate, 0); @@ -201,12 +201,13 @@ mraa_intel_edison_aio_get_fp(mraa_aio_context dev) char file_path[64]= ""; snprintf(file_path, 64, "/sys/bus/iio/devices/iio:device1/in_voltage%d_raw", - dev->channel ); + dev->channel ); dev->adc_in_fp = open(file_path, O_RDONLY); if (dev->adc_in_fp == -1) { - fprintf(stderr, "Failed to open Analog input raw file %s for " - "reading!\n", file_path); return( MRAA_ERROR_INVALID_RESOURCE); + syslog(LOG_ERR, "Failed to open Analog input raw file %s for " + "reading!", file_path); + return MRAA_ERROR_INVALID_RESOURCE; } return MRAA_SUCCESS; @@ -216,7 +217,7 @@ mraa_result_t mraa_intel_edison_aio_init_pre(unsigned int aio) { if (aio > plat->aio_count) { - fprintf(stderr, "Invalid analog input channel\n"); + syslog(LOG_ERR, "Invalid analog input channel"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -340,8 +341,8 @@ mraa_intel_edison_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mode) pullup_e = mraa_gpio_init_raw(pullup_map[dev->phy_pin]); mraa_result_t sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_IN); if(sta != MRAA_SUCCESS) { - fprintf(stderr, "MRAA: Edison: Failed to set gpio mode-pullup\n"); - return MRAA_ERROR_INVALID_RESOURCE; + syslog(LOG_ERR, "Edison: Failed to set gpio mode-pullup"); + return MRAA_ERROR_INVALID_RESOURCE; } int value = -1; @@ -364,7 +365,7 @@ mraa_intel_edison_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mode) sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_OUT); sta = mraa_gpio_write(pullup_e, value); if (sta != MRAA_SUCCESS) { - fprintf(stderr, "MRAA: Edison: Error Setting pullup"); + syslog(LOG_ERR, "Edison: Error Setting pullup"); return sta; } } @@ -401,8 +402,8 @@ mraa_intel_edison_fab_c() tristate = mraa_gpio_init_raw(214); if (tristate == NULL) { - fprintf(stderr, "Intel Edison Failed to initialise Arduino board TriState,\ - check i2c devices! FATAL\n"); + syslog(LOG_CRIT, "Intel Edison Failed to initialise Arduino board TriState,\ + check i2c devices! FATAL\n"); return NULL; } mraa_gpio_dir(tristate, MRAA_GPIO_OUT); @@ -634,8 +635,7 @@ mraa_intel_edison_fab_c() b->spi_bus[0].sclk = 13; int il; - - for(il =0; il < MRAA_INTEL_EDISON_PINCOUNT; il++) { + for (il =0; il < MRAA_INTEL_EDISON_PINCOUNT; il++) { pinmodes[il].gpio.sysfs = -1; pinmodes[il].gpio.mode = -1; pinmodes[il].pwm.sysfs = -1; diff --git a/src/intel_galileo_rev_g.c b/src/intel_galileo_rev_g.c index 9e6af08..1f8322c 100644 --- a/src/intel_galileo_rev_g.c +++ b/src/intel_galileo_rev_g.c @@ -84,7 +84,7 @@ mraa_intel_galileo_gen2_pwm_period_replace(mraa_pwm_context dev, int period) int period_f = open(bu, O_RDWR); if (period_f == -1) { - fprintf(stderr, "Failed to open period for writing!\n"); + syslog(LOG_ERR, "Failed to open period for writing!"); return MRAA_ERROR_INVALID_RESOURCE; } char out[MAX_SIZE]; @@ -109,9 +109,9 @@ mraa_intel_galileo_gen2_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mod mraa_gpio_context pullup_e; pullup_e = mraa_gpio_init_raw(pullup_map[dev->phy_pin]); mraa_result_t sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_IN); - if(sta != MRAA_SUCCESS) { - fprintf(stderr, "MRAA: Galileo Gen 2: Failed to set gpio pullup\n"); - return MRAA_ERROR_INVALID_RESOURCE; + if (sta != MRAA_SUCCESS) { + syslog(LOG_ERR, "Galileo Gen 2: Failed to set gpio pullup"); + return MRAA_ERROR_INVALID_RESOURCE; } char filepath[MAX_SIZE]; @@ -119,7 +119,7 @@ mraa_intel_galileo_gen2_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mod int drive = open(filepath, O_WRONLY); if (drive == -1) { - fprintf(stderr, "Failed to open drive for writing!\n"); + syslog(LOG_ERR, "Failed to open drive for writing"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -147,7 +147,7 @@ mraa_intel_galileo_gen2_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mod return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED; } if (write(drive, bu, length*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to drive mode!\n"); + syslog(LOG_ERR, "Failed to write to drive mode"); close(drive); return MRAA_ERROR_INVALID_RESOURCE; } @@ -155,7 +155,7 @@ mraa_intel_galileo_gen2_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mod sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_OUT); sta = mraa_gpio_write(pullup_e, value); if (sta != MRAA_SUCCESS) { - fprintf(stderr, "MRAA: Galileo Gen 2: Error Setting pullup"); + syslog(LOG_ERR, "Galileo Gen 2: Error Setting pullup"); return sta; } } diff --git a/src/mraa.c b/src/mraa.c index 527fd89..9c6c3d5 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -45,12 +45,28 @@ mraa_get_version() return gVERSION; } +mraa_result_t +mraa_set_log_level(int level) +{ + if (level <= 7 && level >= 0) { + setlogmask(LOG_UPTO(level)); + return MRAA_SUCCESS; + } + return MRAA_ERROR_INVALID_PARAMETER; +} + mraa_result_t __attribute__((constructor)) mraa_init() { - /** Once more board definitions have been added, - * A method for detecting them will need to be devised. - */ +#ifdef DEBUG + setlogmask(LOG_UPTO(LOG_DEBUG)); +#else + setlogmask(LOG_UPTO(LOG_NOTICE)); +#endif + + openlog("libmraa", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); + syslog(LOG_DEBUG, "libmraa initialised by user %d", getuid()); + if (plat != NULL) { return MRAA_ERROR_PLATFORM_ALREADY_INITIALISED; } @@ -96,9 +112,10 @@ mraa_init() break; default: plat = mraa_intel_galileo_rev_d(); - fprintf(stderr, "Platform not found, initialising MRAA_INTEL_GALILEO_GEN1\n"); + syslog(LOG_ERR, "Platform not found, initialising MRAA_INTEL_GALILEO_GEN1"); } + syslog(LOG_NOTICE, "libmraa initialised for platform %d", platform_type); return MRAA_SUCCESS; } @@ -107,6 +124,7 @@ mraa_deinit() { free(plat->pins); free(plat); + closelog(); } int @@ -145,17 +163,17 @@ unsigned int mraa_setup_gpio(int pin) { if (plat == NULL) - return -1; + return MRAA_PLATFORM_NO_INIT; if (pin < 0 || pin > plat->phy_pin_count) - return -1; + return MRAA_NO_SUCH_IO; if(plat->pins[pin].capabilites.gpio != 1) - return -1; + return MRAA_NO_SUCH_IO; if (plat->pins[pin].gpio.mux_total > 0) if (mraa_setup_mux_mapped(plat->pins[pin].gpio) != MRAA_SUCCESS) - return -1; + return MRAA_NO_SUCH_IO; return plat->pins[pin].gpio.pinmap; } @@ -163,19 +181,19 @@ unsigned int mraa_setup_aio(int aio) { if (plat == NULL) - return -3; + return MRAA_PLATFORM_NO_INIT; if (aio < 0 || aio > plat->aio_count) - return -1; + return MRAA_NO_SUCH_IO; int pin = aio + plat->gpio_count; if (plat->pins[pin].capabilites.aio != 1) - return -1; + return MRAA_NO_SUCH_IO; if (plat->pins[pin].aio.mux_total > 0) if (mraa_setup_mux_mapped(plat->pins[pin].aio) != MRAA_SUCCESS) - return -1; + return MRAA_NO_SUCH_IO; return plat->pins[pin].aio.pinmap; } @@ -183,31 +201,31 @@ unsigned int mraa_setup_i2c(int bus) { if (plat == NULL) - return -3; + return MRAA_PLATFORM_NO_INIT; if (plat->i2c_bus_count == 0) { - fprintf(stderr, "No i2c buses defined in platform"); - return -1; + syslog(LOG_ERR, "No i2c buses defined in platform"); + return MRAA_NO_SUCH_IO; } if (bus >= plat->i2c_bus_count) { - fprintf(stderr, "Above i2c bus count"); - return -1; + syslog(LOG_ERR, "Above i2c bus count"); + return MRAA_NO_SUCH_IO; } if (plat->i2c_bus[bus].bus_id == -1) { - fprintf(stderr, "Platform not currently allowed for mraa use\n"); - return -1; + syslog(LOG_ERR, "Platform not currently allowed for mraa use"); + return MRAA_NO_SUCH_IO; } int pos = plat->i2c_bus[bus].sda; if (plat->pins[pos].i2c.mux_total > 0) if (mraa_setup_mux_mapped(plat->pins[pos].i2c) != MRAA_SUCCESS) - return -2; + return MRAA_IO_SETUP_FAILURE; pos = plat->i2c_bus[bus].scl; if (plat->pins[pos].i2c.mux_total > 0) if (mraa_setup_mux_mapped(plat->pins[pos].i2c) != MRAA_SUCCESS) - return -2; + return MRAA_IO_SETUP_FAILURE; return plat->i2c_bus[bus].bus_id; } @@ -219,14 +237,14 @@ mraa_setup_spi(int bus) return NULL; if (plat->spi_bus_count >! 0) { - fprintf(stderr, "No spi buses defined in platform"); + syslog(LOG_ERR, "No spi buses defined in platform"); return NULL; } if (plat->spi_bus_count == 1) { bus = plat->def_spi_bus; } if (bus >= plat->spi_bus_count) { - fprintf(stderr, "Above spi bus count"); + syslog(LOG_ERR, "Above spi bus count"); return NULL; } @@ -287,49 +305,51 @@ void mraa_result_print(mraa_result_t result) { switch (result) { - case MRAA_SUCCESS: fprintf(stderr, "MRAA: SUCCESS\n"); - break; + case MRAA_SUCCESS: + fprintf(stdout, "MRAA: SUCCESS\n"); + break; case MRAA_ERROR_FEATURE_NOT_IMPLEMENTED: - fprintf(stderr, "MRAA: Feature not implemented.\n"); - break; + fprintf(stdout, "MRAA: Feature not implemented.\n"); + break; case MRAA_ERROR_FEATURE_NOT_SUPPORTED: - fprintf(stderr, "MRAA: Feature not supported by Hardware.\n"); - break; + fprintf(stdout, "MRAA: Feature not supported by Hardware.\n"); + break; case MRAA_ERROR_INVALID_VERBOSITY_LEVEL: - fprintf(stderr, "MRAA: Invalid verbosity level.\n"); - break; + fprintf(stdout, "MRAA: Invalid verbosity level.\n"); + break; case MRAA_ERROR_INVALID_PARAMETER: - fprintf(stderr, "MRAA: Invalid parameter.\n"); - break; + fprintf(stdout, "MRAA: Invalid parameter.\n"); + break; case MRAA_ERROR_INVALID_HANDLE: - fprintf(stderr, "MRAA: Invalid Handle.\n"); - break; + fprintf(stdout, "MRAA: Invalid Handle.\n"); + break; case MRAA_ERROR_NO_RESOURCES: - fprintf(stderr, "MRAA: No resources.\n"); - break; + fprintf(stdout, "MRAA: No resources.\n"); + break; case MRAA_ERROR_INVALID_RESOURCE: - fprintf(stderr, "MRAA: Invalid resource.\n"); - break; + fprintf(stdout, "MRAA: Invalid resource.\n"); + break; case MRAA_ERROR_INVALID_QUEUE_TYPE: - fprintf(stderr, "MRAA: Invalid Queue Type.\n"); - break; + fprintf(stdout, "MRAA: Invalid Queue Type.\n"); + break; case MRAA_ERROR_NO_DATA_AVAILABLE: - fprintf(stderr, "MRAA: No Data available.\n"); - break; + fprintf(stdout, "MRAA: No Data available.\n"); + break; case MRAA_ERROR_INVALID_PLATFORM: - fprintf(stderr, "MRAA: Platform not recognised.\n"); - break; + fprintf(stdout, "MRAA: Platform not recognised.\n"); + break; case MRAA_ERROR_PLATFORM_NOT_INITIALISED: - fprintf(stderr, "MRAA: Platform not initialised.\n"); - break; + fprintf(stdout, "MRAA: Platform not initialised.\n"); + break; case MRAA_ERROR_PLATFORM_ALREADY_INITIALISED: - fprintf(stderr, "MRAA: Platform already initialised.\n"); - break; + fprintf(stdout, "MRAA: Platform already initialised.\n"); + break; case MRAA_ERROR_UNSPECIFIED: - fprintf(stderr, "MRAA: Unspecified Error.\n"); - break; - default: fprintf(stderr, "MRAA: Unrecognised error.\n"); - break; + fprintf(stdout, "MRAA: Unspecified Error.\n"); + break; + default: + fprintf(stdout, "MRAA: Unrecognised error.\n"); + break; } } diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index 56e8694..13dc493 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -56,7 +56,7 @@ mraa_pwm_write_period(mraa_pwm_context dev, int period) int period_f = open(bu, O_RDWR); if (period_f == -1) { - fprintf(stderr, "Failed to open period for writing!\n"); + syslog(LOG_ERR, "Failed to open period for writing"); return MRAA_ERROR_INVALID_RESOURCE; } char out[MAX_SIZE]; @@ -92,7 +92,7 @@ mraa_pwm_read_period(mraa_pwm_context dev) int period_f = open(bu, O_RDWR); if (period_f == -1) { - fprintf(stderr, "Failed to open period for reading!\n"); + syslog(LOG_ERR, "Failed to open period for reading"); return 0; } off_t size = lseek(period_f, 0, SEEK_END); @@ -161,14 +161,14 @@ mraa_pwm_init_raw(int chipin, int pin) snprintf(directory, MAX_SIZE, SYSFS_PWM "/pwmchip%d/pwm%d", dev->chipid, dev->pin); struct stat dir; if (stat(directory, &dir) == 0 && S_ISDIR(dir.st_mode)) { - fprintf(stderr, "PWM Pin already exporting, continuing.\n"); + syslog(LOG_NOTICE, "PWM Pin already exporting, continuing"); dev->owner = 0; // Not Owner } else { char buffer[MAX_SIZE]; snprintf(buffer, MAX_SIZE, "/sys/class/pwm/pwmchip%d/export", dev->chipid); int export_f = open(buffer, O_WRONLY); if (export_f == -1) { - fprintf(stderr, "Failed to open export for writing!\n"); + syslog(LOG_ERR, "Failed to open export for writing"); free(dev); return NULL; } @@ -176,7 +176,7 @@ mraa_pwm_init_raw(int chipin, int pin) char out[MAX_SIZE]; int size = snprintf(out, MAX_SIZE, "%d", dev->pin); if (write(export_f, out, size*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to export! Potentially already enabled\n"); + syslog(LOG_WARNING, "Failed to write to export! Potentially already enabled"); close(export_f); return NULL; } @@ -251,13 +251,13 @@ mraa_pwm_enable(mraa_pwm_context dev, int enable) int enable_f = open(bu, O_RDWR); if (enable_f == -1) { - fprintf(stderr, "Failed to open enable for writing!\n"); + syslog(LOG_ERR, "Failed to open enable for writing"); return MRAA_ERROR_INVALID_RESOURCE; } char out[2]; int size = snprintf(out, sizeof(out), "%d", enable); if (write(enable_f, out, size * sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to enable!\n"); + syslog(LOG_ERR, "Failed to write to enable"); close(enable_f); return MRAA_ERROR_INVALID_RESOURCE; } @@ -273,14 +273,14 @@ mraa_pwm_unexport_force(mraa_pwm_context dev) int unexport_f = open(filepath, O_WRONLY); if (unexport_f == -1) { - fprintf(stderr, "Failed to open unexport for writing!\n"); + syslog(LOG_ERR, "Failed to open unexport for writing"); return MRAA_ERROR_INVALID_RESOURCE; } char out[MAX_SIZE]; int size = snprintf(out, MAX_SIZE, "%d", dev->pin); if (write(unexport_f, out, size*sizeof(char)) == -1) { - fprintf(stderr, "Failed to write to unexport!\n"); + syslog(LOG_ERR, "Failed to write to unexport"); close(unexport_f); return MRAA_ERROR_INVALID_RESOURCE; } diff --git a/src/spi/spi.c b/src/spi/spi.c index 45f4e76..78611ac 100644 --- a/src/spi/spi.c +++ b/src/spi/spi.c @@ -58,8 +58,8 @@ mraa_spi_init(int bus) } mraa_spi_bus_t *spi = mraa_setup_spi(bus); - if(bus < 0) { - fprintf(stderr, "Failed. SPI platform Error\n"); + if (bus < 0) { + syslog(LOG_ERR, "Failed. SPI platform Error"); return NULL; } mraa_spi_context dev = (mraa_spi_context) malloc(sizeof(struct _spi)); @@ -70,7 +70,7 @@ mraa_spi_init(int bus) dev->devfd = open(path, O_RDWR); if (dev->devfd < 0) { - fprintf(stderr, "Failed opening SPI Device. bus:%s\n", path); + syslog(LOG_ERR, "Failed opening SPI Device. bus:%s", path); free(dev); return NULL; } @@ -113,7 +113,7 @@ mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode) } if (ioctl (dev->devfd, SPI_IOC_WR_MODE, &spi_mode) < 0) { - fprintf(stderr, "Failed to set spi mode\n"); + syslog(LOG_ERR, "Failed to set spi mode"); return MRAA_ERROR_INVALID_RESOURCE; } @@ -136,7 +136,7 @@ mraa_spi_lsbmode(mraa_spi_context dev, mraa_boolean_t lsb) lsb_mode = 1; } if (ioctl (dev->devfd, SPI_IOC_WR_LSB_FIRST, &lsb_mode) < 0) { - fprintf(stderr, "Failed to set bit order\n"); + syslog(LOG_ERR, "Failed to set bit order"); return MRAA_ERROR_INVALID_RESOURCE; } dev->lsb = lsb; @@ -166,7 +166,7 @@ mraa_spi_write(mraa_spi_context dev, uint8_t data) msg.delay_usecs = 0; msg.len = length; if (ioctl(dev->devfd, SPI_IOC_MESSAGE(1), &msg) < 0) { - fprintf(stderr, "Failed to perform dev transfer\n"); + syslog(LOG_ERR, "Failed to perform dev transfer"); return -1; } return recv; @@ -187,7 +187,7 @@ mraa_spi_write_buf(mraa_spi_context dev, uint8_t* data, int length) msg.delay_usecs = 0; msg.len = length; if (ioctl(dev->devfd, SPI_IOC_MESSAGE(1), &msg) < 0) { - fprintf(stderr, "Failed to perform dev transfer\n"); + syslog(LOG_ERR, "Failed to perform dev transfer"); return NULL; } return recv;