boards/arm/stm32l4/nucleo-l476rg/src/stm32_appinit.c
/****************************************************************************
 * Name: board_app_initialize
 *
 * Description:
 *   Perform application specific initialization.  This function is never
 *   called directly from application code, but only indirectly via the
 *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
 *
 * Input Parameters:
 *   arg - The boardctl() argument is passed to the board_app_initialize()
 *         implementation without modification.  The argument has no
 *         meaning to NuttX; the meaning of the argument is a contract
 *         between the board-specific initialization logic and the
 *         matching application logic.  The value could be such things as a
 *         mode enumeration value, a set of DIP switch switch settings, a
 *         pointer to configuration data read from a file or serial FLASH,
 *         or whatever you would like to do with it.  Every implementation
 *         should accept zero/NULL as a default configuration.
 *
 * Returned Value:
 *   Zero (OK) is returned on success; a negated errno value is returned on
 *   any failure to indicate the nature of the failure.
 *
 ****************************************************************************/
board_app_initialize
Description:
Perform application specific initialization.  This function is never
called directly from application code, but only indirectly via the
(non-standard) boardctl() interface using the command BOARDIOC_INIT.

Input Parameters:
arg - The boardctl() argument is passed to the board_app_initialize()
implementation without modification.  The argument has no
meaning to NuttX; the meaning of the argument is a contract
between the board-specific initialization logic and the
matching application logic.  The value could be such things as a
mode enumeration value, a set of DIP switch switch settings, a
pointer to configuration data read from a file or serial FLASH,
or whatever you would like to do with it.  Every implementation
should accept zero/NULL as a default configuration.

Returned Value:
Zero (OK) is returned on success; a negated errno value is returned on
any failure to indicate the nature of the failure.
board_app_initialize Description : Perform application specific initialization . This function is never called directly from application code but only indirectly via the ( non - standard ) boardctl () interface using the command BOARDIOC_INIT . Input Parameters : arg - The boardctl () argument is passed to the board_app_initialize () implementation without modification . The argument has no meaning to NuttX ; the meaning of the argument is a contract between the board - specific initialization logic and the matching application logic . The value could be such things as a mode enumeration value a set of DIP switch switch settings a pointer to configuration data read from a file or serial FLASH or whatever you would like to do with it . Every implementation should accept zero / NULL as a default configuration . Returned Value : Zero ( OK ) is returned on success ; a negated errno value is returned on any failure to indicate the nature of the failure .
int board_app_initialize(uintptr_t arg)
{
#ifdef HAVE_RTC_DRIVER
  FAR struct rtc_lowerhalf_s *rtclower;
#endif
#if defined(CONFIG_I2C) && defined(CONFIG_SYSTEM_I2CTOOL)
  stm32_i2ctool();
#endif
#ifdef CONFIG_SENSORS_QENCODER
  int index;
  char buf[9];
#endif
  int ret = OK;
#ifdef HAVE_PROC
  syslog(LOG_INFO, "Mounting procfs to /proc\n");
  ret = nx_mount(NULL, CONFIG_NSH_PROC_MOUNTPOINT, "procfs", 0, NULL);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to mount the PROC filesystem: %d\n", ret);
      return ret;
    }
#endif
#ifdef HAVE_RTC_DRIVER
  rtclower = stm32l4_rtc_lowerhalf();
  if (!rtclower)
    {
      serr("ERROR: Failed to instantiate the RTC lower-half driver\n");
      return -ENOMEM;
    }
  else
    {
      ret = rtc_initialize(0, rtclower);
      if (ret < 0)
        {
          serr("ERROR: Failed to bind/register the RTC driver: %d\n", ret);
          return ret;
        }
    }
#endif
#ifdef HAVE_MMCSD_SDIO
  g_sdio = sdio_initialize(CONFIG_NSH_MMCSDSLOTNO);
  if (!g_sdio)
    {
      syslog(LOG_ERR, "ERROR: Failed to initialize SDIO slot %d\n",
             CONFIG_NSH_MMCSDSLOTNO);
      return -ENODEV;
    }
  ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, g_sdio);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to bind SDIO to the MMC/SD driver: %d\n",
             ret);
      return ret;
    }
  sdio_mediachange(g_sdio, true);
  syslog(LOG_INFO, "[boot] Initialized SDIO\n");
#endif
#ifdef CONFIG_SENSORS_AS726X
  ret = stm32_as726xinitialize("/dev/spectr0");
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize AS726X, error %d\n", ret);
      return ret;
    }
#endif
#ifdef CONFIG_SENSORS_BMP180
  ret = stm32_bmp180initialize("/dev/press0");
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize BMP180, error %d\n", ret);
      return ret;
    }
#endif
#ifdef CONFIG_PWM
  ret = stm32l4_pwm_setup();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: stm32l4_pwm_setup() failed: %d\n", ret);
    }
#endif
#ifdef CONFIG_ADC
  ret = stm32l4_adc_setup();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: stm32l4_adc_setup failed: %d\n", ret);
    }
#endif
#ifdef CONFIG_CAN
  ret = stm32l4_can_setup();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: stm32l4_can_setup failed: %d\n", ret);
      return ret;
    }
#endif
#ifdef HAVE_MMCSD_SPI
  ret = stm32l4_mmcsd_initialize(MMCSD_MINOR);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize SD slot %d: %d\n", ret);
      return ret;
    }
#endif
#ifdef CONFIG_AJOYSTICK
  ret = board_ajoy_initialize();
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the joystick driver: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_TIMER
  ret = board_timer_driver_initialize("/dev/timer0", 2);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the timer driver: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_SENSORS_QENCODER
  index = 0;
#ifdef CONFIG_STM32L4_TIM1_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 1);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_STM32L4_TIM2_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 2);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_STM32L4_TIM3_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 3);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_STM32L4_TIM4_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 4);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_STM32L4_TIM5_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 5);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#ifdef CONFIG_STM32L4_TIM8_QE
  sprintf(buf, "/dev/qe%d", index++);
  ret = stm32l4_qencoder_initialize(buf, 8);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to register the qencoder: %d\n",
             ret);
      return ret;
    }
#endif
#endif 
#ifdef CONFIG_SENSORS_HTS221
  ret = stm32l4_hts221_initialize("/dev/hts221");
  if (ret < 0)
    {
      serr("ERROR: Failed to initialize HTC221 driver: %d\n", ret);
    }
#endif
#ifdef CONFIG_SENSORS_LSM6DSL
  ret = stm32l4_lsm6dsl_initialize("/dev/lsm6dsl0");
  if (ret < 0)
    {
      serr("ERROR: Failed to initialize LSM6DSL driver: %d\n", ret);
    }
#endif
#ifdef CONFIG_SENSORS_LSM303AGR
  ret = stm32l4_lsm303agr_initialize("/dev/lsm303mag0");
  if (ret < 0)
    {
      serr("ERROR: Failed to initialize LSM303AGR driver: %d\n", ret);
    }
#endif
#ifdef CONFIG_DEV_GPIO
  ret = stm32l4_gpio_initialize();
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
      return ret;
    }
#endif
#ifdef CONFIG_WL_CC1101
  ret = stm32l4_cc1101_initialize();
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: stm32l4_cc1101_initialize failed: %d\n",
             ret);
      return ret;
    }
#endif
  return ret;
}
int board_app_initialize ( uintptr_t arg ) { #ifdef HAVE_RTC_DRIVER FAR struct rtc_lowerhalf_s * rtclower ; #endif #if defined ( CONFIG_I2C ) && defined ( CONFIG_SYSTEM_I2CTOOL ) stm32_i2ctool ( ) ; #endif #ifdef CONFIG_SENSORS_QENCODER int index ; char buf [ 9 ] ; #endif int ret = OK ; #ifdef HAVE_PROC syslog ( LOG_INFO , " \n " ) ; ret = nx_mount ( NULL , CONFIG_NSH_PROC_MOUNTPOINT , " " , 0 , NULL ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef HAVE_RTC_DRIVER rtclower = stm32l4_rtc_lowerhalf ( ) ; if ( ! rtclower ) { serr ( " \n " ) ; return - ENOMEM ; } else { ret = rtc_initialize ( 0 , rtclower ) ; if ( ret < 0 ) { serr ( " \n " , ret ) ; return ret ; } } #endif #ifdef HAVE_MMCSD_SDIO g_sdio = sdio_initialize ( CONFIG_NSH_MMCSDSLOTNO ) ; if ( ! g_sdio ) { syslog ( LOG_ERR , " \n " , CONFIG_NSH_MMCSDSLOTNO ) ; return - ENODEV ; } ret = mmcsd_slotinitialize ( CONFIG_NSH_MMCSDMINOR , g_sdio ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } sdio_mediachange ( g_sdio , true ) ; syslog ( LOG_INFO , " \n " ) ; #endif #ifdef CONFIG_SENSORS_AS726X ret = stm32_as726xinitialize ( " " ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_SENSORS_BMP180 ret = stm32_bmp180initialize ( " " ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_PWM ret = stm32l4_pwm_setup ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; } #endif #ifdef CONFIG_ADC ret = stm32l4_adc_setup ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; } #endif #ifdef CONFIG_CAN ret = stm32l4_can_setup ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef HAVE_MMCSD_SPI ret = stm32l4_mmcsd_initialize ( MMCSD_MINOR ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_AJOYSTICK ret = board_ajoy_initialize ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_TIMER ret = board_timer_driver_initialize ( " " , 2 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_SENSORS_QENCODER index = 0 ; #ifdef CONFIG_STM32L4_TIM1_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 1 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_STM32L4_TIM2_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 2 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_STM32L4_TIM3_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 3 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_STM32L4_TIM4_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 4 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_STM32L4_TIM5_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 5 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_STM32L4_TIM8_QE sprintf ( buf , " " , index ++ ) ; ret = stm32l4_qencoder_initialize ( buf , 8 ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #endif #ifdef CONFIG_SENSORS_HTS221 ret = stm32l4_hts221_initialize ( " " ) ; if ( ret < 0 ) { serr ( " \n " , ret ) ; } #endif #ifdef CONFIG_SENSORS_LSM6DSL ret = stm32l4_lsm6dsl_initialize ( " " ) ; if ( ret < 0 ) { serr ( " \n " , ret ) ; } #endif #ifdef CONFIG_SENSORS_LSM303AGR ret = stm32l4_lsm303agr_initialize ( " " ) ; if ( ret < 0 ) { serr ( " \n " , ret ) ; } #endif #ifdef CONFIG_DEV_GPIO ret = stm32l4_gpio_initialize ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif #ifdef CONFIG_WL_CC1101 ret = stm32l4_cc1101_initialize ( ) ; if ( ret < 0 ) { syslog ( LOG_ERR , " \n " , ret ) ; return ret ; } #endif return ret ; }
Name: board_app_initialize
 Description:
   Perform application specific initialization.
Name : board_app_initialize Description : Perform application specific initialization .
/* Mount the proc filesystem */ /* Instantiate the STM32L4 lower-half RTC driver */ /* Bind the lower half driver and register the combined RTC driver
       * as /dev/rtc0
       */ /* First, get an instance of the SDIO interface */ /* Now bind the SDIO interface to the MMC/SD driver */ /* Then let's guess and say that there is a card in the slot. There is no
   * card detect GPIO.
   */ /* Initialize PWM and register the PWM device. */ /* Initialize ADC and register the ADC driver. */ /* Initialize MMC and register the MMC driver. */ /* Initialize and register the joystick driver */ /* Initialize and register the timer driver */ /* Initialize and register the qencoder driver */ /* CONFIG_SENSORS_QENCODER */ /* Initialize and register the cc1101 radio */