int sim_bringup()

in boards/sim/sim/sim/src/sim_bringup.c [99:573]


int sim_bringup(void)
{
#ifdef CONFIG_ONESHOT
  struct oneshot_lowerhalf_s *oneshot;
#endif
#ifdef CONFIG_RAMMTD
  uint8_t *ramstart;
#endif
#if !defined(CONFIG_DISABLE_MOUNTPOINT) && defined(CONFIG_BLK_RPMSG_SERVER)
  uint8_t *ramdiskstart;
#endif
#ifdef CONFIG_SIM_I2CBUS
  struct i2c_master_s *i2cbus;
#endif
#ifdef CONFIG_MPU60X0_I2C
  struct mpu_config_s *mpu_config;
#endif
#ifdef CONFIG_SIM_SPI
  struct spi_dev_s *spidev;
#endif
  int ret = OK;

#ifdef CONFIG_FS_BINFS
  /* Mount the binfs file system */

  ret = nx_mount(NULL, "/bin", "binfs", 0, NULL);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: Failed to mount binfs at /bin: %d\n", ret);
    }
#endif

#ifdef CONFIG_FS_PROCFS
  /* Mount the procfs file system */

  ret = nx_mount(NULL, SIM_PROCFS_MOUNTPOINT, "procfs", 0, NULL);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: Failed to mount procfs at %s: %d\n",
             SIM_PROCFS_MOUNTPOINT, ret);
    }
#endif

#ifdef CONFIG_FS_TMPFS
  /* Mount the tmpfs file system */

  ret = nx_mount(NULL, CONFIG_LIBC_TMPDIR, "tmpfs", 0, NULL);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: Failed to mount tmpfs at %s: %d\n",
             CONFIG_LIBC_TMPDIR, ret);
    }
#endif

#ifdef CONFIG_LIBC_ZONEINFO_ROMFS
  /* Mount the TZ database */

  sim_zoneinfo(3);
#endif

#ifdef CONFIG_EXAMPLES_GPIO
  /* Initialize simulated GPIO drivers */

  sim_gpio_initialize();
#endif

#ifdef CONFIG_RAMMTD
  /* Create a RAM MTD device if configured */

  ramstart = kmm_malloc(128 * 1024);
  if (ramstart == NULL)
    {
      syslog(LOG_ERR, "ERROR: Allocation for RAM MTD failed\n");
    }
  else
    {
      /* Initialized the RAM MTD */

      struct mtd_dev_s *mtd = rammtd_initialize(ramstart, 128 * 1024);
      if (mtd == NULL)
        {
          syslog(LOG_ERR, "ERROR: rammtd_initialize failed\n");
          kmm_free(ramstart);
        }
      else
        {
          /* Erase the RAM MTD */

          ret = mtd->ioctl(mtd, MTDIOC_BULKERASE, 0);
          if (ret < 0)
            {
              syslog(LOG_ERR, "ERROR: IOCTL MTDIOC_BULKERASE failed\n");
            }

          /* Register the MTD driver so that it can be accessed from the
           * VFS.
           */

          ret = register_mtddriver("/dev/rammtd", mtd, 0755, NULL);
          if (ret < 0)
            {
              syslog(LOG_ERR, "ERROR: Failed to register MTD driver: %d\n",
                     ret);
            }

#if defined(CONFIG_MTD_SMART) && defined(CONFIG_FS_SMARTFS)
          /* Initialize a SMART Flash block device and bind it to the MTD
           * device.
           */

          smart_initialize(0, mtd, NULL);

#elif defined(CONFIG_FS_SPIFFS)
          /* Mount the SPIFFS file system */

          ret = nx_mount("/dev/rammtd", "/mnt/spiffs", "spiffs", 0, NULL);
          if (ret < 0)
            {
              syslog(LOG_ERR,
                     "ERROR: Failed to mount SPIFFS at /mnt/spiffs: %d\n",
                     ret);
            }

#elif defined(CONFIG_FS_LITTLEFS)
          /* Mount the LittleFS file system */

          ret = nx_mount("/dev/rammtd", "/mnt/lfs", "littlefs", 0,
                         "forceformat");
          if (ret < 0)
            {
              syslog(LOG_ERR,
                     "ERROR: Failed to mount LittleFS at /mnt/lfs: %d\n",
                     ret);
            }

#elif defined(CONFIG_FS_NXFFS)
          /* Initialize to provide NXFFS on the MTD interface */

          ret = nxffs_initialize(mtd);
          if (ret < 0)
            {
              syslog(LOG_ERR, "ERROR: NXFFS initialization failed: %d\n",
                     ret);
            }
#endif
        }
    }
#endif

#if !defined(CONFIG_DISABLE_MOUNTPOINT) && defined(CONFIG_BLK_RPMSG_SERVER)
  ramdiskstart = kmm_malloc(512 * 2048);
  ret = ramdisk_register(1, ramdiskstart, 2048, 512,
                         RDFLAG_WRENABLED | RDFLAG_FUNLINK);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: Failed to register ramdisk: %d\n", ret);
    }
#endif

#ifdef CONFIG_ONESHOT
  /* Get an instance of the simulated oneshot timer */

  oneshot = oneshot_initialize(0, 0);
  if (oneshot == NULL)
    {
      syslog(LOG_ERR, "ERROR: oneshot_initialize failed\n");
    }
  else
    {
#ifdef CONFIG_CPULOAD_ONESHOT
      /* Configure the oneshot timer to support CPU load measurement */

      nxsched_oneshot_extclk(oneshot);

#else
      /* Initialize the simulated oneshot driver */

      ret = oneshot_register("/dev/oneshot", oneshot);
      if (ret < 0)
        {
          syslog(LOG_ERR,
                 "ERROR: Failed to register oneshot at /dev/oneshot: %d\n",
                 ret);
        }
#endif
    }
#endif

#ifdef CONFIG_INPUT_AJOYSTICK
  /* Initialize the simulated analog joystick input device */

  sim_ajoy_initialize();
#endif

#ifdef CONFIG_VIDEO_FB
  /* Initialize and register the simulated framebuffer driver */

#  ifdef CONFIG_VNCSERVER
  ret = vnc_fb_register(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: vnc_fb_register() failed: %d\n", ret);
    }
#  else
  ret = fb_register(0, 0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: fb_register() failed: %d\n", ret);
    }
#  endif
#endif

#ifdef CONFIG_SIM_CAMERA
  /* Initialize and register the simulated video driver */

  sim_camera_initialize();

  ret = capture_initialize(CONFIG_SIM_CAMERA_DEV_PATH);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: capture_initialize() failed: %d\n", ret);
    }

#endif

#ifdef CONFIG_LCD

  ret = board_lcd_initialize();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: board_lcd_initialize() failed: %d\n", ret);
    }

#  ifdef CONFIG_LCD_DEV

  ret = lcddev_register(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: lcddev_register() failed: %d\n", ret);
    }

#  endif

#endif

#ifdef CONFIG_SIM_TOUCHSCREEN
  /* Initialize the touchscreen */

  ret = sim_tsc_initialize(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_tsc_initialize failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_SIM_KEYBOARD
  /* Initialize the keyboard */

  ret = sim_kbd_initialize();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_kbd_initialize failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_IEEE802154_LOOPBACK
  /* Initialize and register the IEEE802.15.4 MAC network loop device */

  ret = ieee8021514_loopback();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: ieee8021514_loopback() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_PKTRADIO_LOOPBACK
  /* Initialize and register the IEEE802.15.4 MAC network loop device */

  ret = pktradio_loopback();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: pktradio_loopback() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_BLUETOOTH_NULL
  /* Register the NULL Bluetooth network device */

  ret = btnull_register();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: btnull_register() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_SIM_HCISOCKET
  /* Register the Host Bluetooth network device via HCI socket */

  ret = sim_bthcisock_register(CONFIG_SIM_HCISOCKET_DEVID);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_bthcisock_register() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_SIM_I2CBUS
  /* Initialize the i2c master bus device */

  i2cbus = sim_i2cbus_initialize(CONFIG_SIM_I2CBUS_ID);
  if (i2cbus == NULL)
    {
      syslog(LOG_ERR, "ERROR: sim_i2cbus_initialize failed.\n");
    }
#if defined(CONFIG_SYSTEM_I2CTOOL) || defined(CONFIG_MPU60X0_I2C)
  else
    {
      ret = i2c_register(i2cbus, 0);
      if (ret < 0)
        {
          syslog(LOG_ERR, "ERROR: Failed to register I2C%d driver: %d\n",
                 0, ret);
          sim_i2cbus_uninitialize(i2cbus);
        }

#ifdef CONFIG_MPU60X0_I2C
      mpu_config = kmm_zalloc(sizeof(struct mpu_config_s));
      if (mpu_config == NULL)
        {
          syslog(LOG_ERR, "ERROR: Failed to allocate mpu60x0 driver\n");
        }
      else
        {
          mpu_config->i2c = i2cbus;
          mpu_config->addr = 0x68;
          mpu60x0_register("/dev/imu0", mpu_config);
        }
#endif
    }
#endif
#endif

#ifdef CONFIG_SIM_SPI
  spidev = sim_spi_initialize(CONFIG_SIM_SPIDEV_NAME);
  if (spidev == NULL)
    {
      syslog(LOG_ERR, "ERROR: sim_spi_initialize failed.\n");
    }
#ifdef CONFIG_SYSTEM_SPITOOL
  else
    {
      ret = spi_register(spidev, 0);
      if (ret < 0)
        {
          syslog(LOG_ERR, "ERROR: Failed to register SPI%d driver: %d\n",
                 0, ret);
          sim_spi_uninitialize(spidev);
        }
    }
#endif /* CONFIG_SYSTEM_SPITOOL */
#endif /* CONFIG_SIM_SPI */

#if defined(CONFIG_INPUT_BUTTONS_LOWER) && defined(CONFIG_SIM_BUTTONS)
  ret = btn_lower_initialize("/dev/buttons");
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_MOTOR_FOC_DUMMY
  /* Setup FOC device */

  ret = sim_foc_setup();
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_foc_setup() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_RPTUN
#  ifdef CONFIG_SIM_RPMSG_MASTER
  sim_rptun_init("server-proxy", "proxy",
                 SIM_RPTUN_MASTER | SIM_RPTUN_NOBOOT);
#  else
  sim_rptun_init("server-proxy", "server", SIM_RPTUN_SLAVE);
#  endif
#endif

#ifdef CONFIG_RPMSG_VIRTIO_LITE
#  ifdef CONFIG_SIM_RPMSG_MASTER
  sim_rpmsg_virtio_init("server-proxy", "proxy", true);
#  else
  sim_rpmsg_virtio_init("server-proxy", "server", false);
#  endif
#endif

#ifdef CONFIG_RPMSG_PORT_UART
#  ifdef CONFIG_SIM_RPMSG_MASTER
  sim_rpmsg_port_uart_init("server", "proxy", "/dev/ttyVS0");
#  else
  sim_rpmsg_port_uart_init("proxy", "server", "/dev/ttyVS0");
#  endif
#endif

#ifdef CONFIG_DEV_RPMSG
  rpmsgdev_register("server", "/dev/console", "/dev/server-console", 0);
  rpmsgdev_register("server", "/dev/null", "/dev/server-null", 0);
  rpmsgdev_register("server", "/dev/ttyUSB0", "/dev/ttyUSB0", 0);
#endif

#ifdef CONFIG_BLK_RPMSG
  rpmsgblk_register("server", "/dev/ram1", NULL);
#endif

#ifdef CONFIG_RPMSGMTD
  rpmsgmtd_register("server", "/dev/rammtd", NULL);
#endif

#ifdef CONFIG_SIM_WTGAHRS2_UARTN
#if CONFIG_SIM_WTGAHRS2_UARTN == 0
  wtgahrs2_initialize(CONFIG_SIM_UART0_NAME, 0);
#elif CONFIG_SIM_WTGAHRS2_UARTN == 1
  wtgahrs2_initialize(CONFIG_SIM_UART1_NAME, 1);
#elif CONFIG_SIM_WTGAHRS2_UARTN == 2
  wtgahrs2_initialize(CONFIG_SIM_UART2_NAME, 2);
#elif CONFIG_SIM_WTGAHRS2_UARTN == 3
  wtgahrs2_initialize(CONFIG_SIM_UART3_NAME, 3);
#endif
#endif

#ifdef CONFIG_RC_DUMMY
  rc_dummy_initialize(0);
#endif

#if defined(CONFIG_USBADB) && \
    !defined(CONFIG_USBADB_COMPOSITE) && \
    !defined(CONFIG_BOARDCTL_USBDEVCTRL)
  usbdev_adb_initialize();
#endif

#if defined(CONFIG_USBMTP) && !defined(CONFIG_USBMTP_COMPOSITE)
  usbdev_mtp_initialize();
#endif

#if defined(CONFIG_RNDIS) && !defined(CONFIG_RNDIS_COMPOSITE)
  /* Set up a MAC address for the RNDIS device. */

  uint8_t mac[6];
  mac[0] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 5)) & 0xff;
  mac[1] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 4)) & 0xff;
  mac[2] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 3)) & 0xff;
  mac[3] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 2)) & 0xff;
  mac[4] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 1)) & 0xff;
  mac[5] = (CONFIG_SIM_RNDIS_MACADDR >> (8 * 0)) & 0xff;
  usbdev_rndis_initialize(mac);
#endif

#ifdef CONFIG_SIM_CANDEV_CHAR
  ret = sim_canchar_initialize(CONFIG_SIM_CANDEV_CHAR_IDX, 0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_canchar_initialize() failed: %d\n", ret);
    }
#endif

#ifdef CONFIG_SIM_CANDEV_SOCK
  ret = sim_cansock_initialize(CONFIG_SIM_CANDEV_SOCK_IDX);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: sim_cansock_initialize() failed: %d\n", ret);
    }
#endif

  return ret;
}