mraa_init() { if (plat != NULL) { return MRAA_ERROR_PLATFORM_ALREADY_INITIALISED; } uid_t proc_euid = geteuid(); struct passwd* proc_user = getpwuid(proc_euid); #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_NOTICE, "libmraa version %s initialised by user '%s' with EUID %d", mraa_get_version(), (proc_user != NULL) ? proc_user->pw_name : "<unknown>", proc_euid); #ifdef SWIGPYTHON // Initialise python threads, this allows use to grab the GIL when we are // required to do so Py_InitializeEx(0); PyEval_InitThreads(); #endif advance_func = (mraa_adv_func_t*) malloc(sizeof(mraa_adv_func_t)); memset(advance_func, 0, sizeof(mraa_adv_func_t)); #if defined(X86PLAT) // Use runtime x86 platform detection platform_type = mraa_x86_platform(); #elif defined(ARMPLAT) // Use runtime ARM platform detection platform_type = mraa_arm_platform(); #else #error mraa_ARCH NOTHING #endif if (plat == NULL) { printf("mraa: FATAL error, failed to initialise platform\n"); return MRAA_ERROR_PLATFORM_NOT_INITIALISED; } syslog(LOG_INFO, "libmraa initialised for platform '%s' of type %d", mraa_get_platform_name(), platform_type); return MRAA_SUCCESS; }
mraa_init() { if (plat != NULL) { return MRAA_ERROR_PLATFORM_ALREADY_INITIALISED; } #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()); #ifdef SWIGPYTHON // Initialise python threads, this allows use to grab the GIL when we are // required to do so Py_InitializeEx(0); PyEval_InitThreads(); #endif advance_func = (mraa_adv_func_t*) malloc(sizeof(mraa_adv_func_t)); memset(advance_func, 0, sizeof(mraa_adv_func_t)); #ifdef X86PLAT // Use runtime x86 platform detection platform_type = mraa_x86_platform(); #elif ARMPLAT // Use runtime ARM platform detection platform_type = mraa_arm_platform(); #else #error mraa_ARCH NOTHING #endif if (plat == NULL) { printf("mraa: FATAL error, failed to initialise platform\n"); return MRAA_ERROR_PLATFORM_NOT_INITIALISED; } syslog(LOG_INFO, "libmraa initialised for platform %d", platform_type); return MRAA_SUCCESS; }
/** * Whilst the actual mraa init function is now called imraa_init, it's only * callable externally if IMRAA is enabled */ mraa_result_t imraa_init() { if (plat != NULL) { return MRAA_SUCCESS; } uid_t proc_euid = geteuid(); struct passwd* proc_user = getpwuid(proc_euid); #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_NOTICE, "libmraa version %s initialised by user '%s' with EUID %d", mraa_get_version(), (proc_user != NULL) ? proc_user->pw_name : "<unknown>", proc_euid); mraa_platform_t platform_type; #if defined(X86PLAT) // Use runtime x86 platform detection platform_type = mraa_x86_platform(); #elif defined(ARMPLAT) // Use runtime ARM platform detection platform_type = mraa_arm_platform(); #elif defined(MOCKPLAT) // Use mock platform platform_type = mraa_mock_platform(); #else #error mraa_ARCH NOTHING #endif if (plat != NULL) { plat->platform_type = platform_type; } else { platform_name = NULL; } // Create null base platform if one doesn't already exist if (plat == NULL) { plat = (mraa_board_t*) calloc(1, sizeof(mraa_board_t)); if (plat != NULL) { plat->platform_type = MRAA_NULL_PLATFORM; plat->platform_name = "Unknown platform"; } } #if defined(USBPLAT) // Now detect sub platform, note this is not an else since we could be in // an error case and fall through to MRAA_ERROR_PLATFORM_NOT_INITIALISED if (plat != NULL) { mraa_platform_t usb_platform_type = mraa_usb_platform_extender(plat); // if we have no known platform just replace usb platform with platform if (plat->platform_type == MRAA_UNKNOWN_PLATFORM && usb_platform_type != MRAA_UNKNOWN_PLATFORM) { plat->platform_type = usb_platform_type; } } if (plat == NULL) { printf("mraa: FATAL error, failed to initialise platform\n"); return MRAA_ERROR_PLATFORM_NOT_INITIALISED; } #endif #if defined(IMRAA) const char* subplatform_lockfile = "/tmp/imraa.lock"; mraa_add_from_lockfile(subplatform_lockfile); #endif // Look for IIO devices mraa_iio_detect(); if (plat != NULL) { int length = strlen(plat->platform_name) + 1; if (mraa_has_sub_platform()) { // Account for ' + ' chars length += strlen(plat->sub_platform->platform_name) + 3; } platform_name = calloc(length, sizeof(char)); if (mraa_has_sub_platform()) { snprintf(platform_name, length, "%s + %s", plat->platform_name, plat->sub_platform->platform_name); } else { strncpy(platform_name, plat->platform_name, length); } } lang_func = (mraa_lang_func_t*) calloc(1, sizeof(mraa_lang_func_t)); if (lang_func == NULL) { return MRAA_ERROR_NO_RESOURCES; } syslog(LOG_NOTICE, "libmraa initialised for platform '%s' of type %d", mraa_get_platform_name(), mraa_get_platform_type()); return MRAA_SUCCESS; }