platform_hw_config.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "platform_hw_config.h"
  2. #include "ZuluSCSI_platform.h"
  3. #include "ZuluSCSI_config.h"
  4. HardwareConfig g_hw_config;
  5. S2S_CFG_TYPE hw_config_selected_device()
  6. {
  7. return g_hw_config.device_type();
  8. };
  9. bool hw_config_is_active()
  10. {
  11. return g_hw_config.is_active();
  12. }
  13. void hw_config_init_gpios()
  14. {
  15. g_hw_config.init_gpios();
  16. }
  17. void hw_config_init_state()
  18. {
  19. g_hw_config.init_state();
  20. }
  21. void HardwareConfig::init_gpios()
  22. {
  23. // SCSI ID dip switch
  24. gpio_init(DIPSW_SCSI_ID_BIT_PORT, GPIO_MODE_IPD, 0, DIPSW_SCSI_ID_BIT_PINS);
  25. // Device select BCD rotary dip switch
  26. gpio_init(DIPROT_DEVICE_SEL_BIT_PORT, GPIO_MODE_IPD, 0, DIPROT_DEVICE_SEL_BIT_PINS);
  27. // Direct/Raw Mode Select
  28. gpio_init(DIPSW_DIRECT_MODE_PORT, GPIO_MODE_IPD, 0, DIPSW_DIRECT_MODE_PIN);
  29. LED_EJECT_OFF();
  30. gpio_init(LED_EJECT_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, LED_EJECT_PIN);
  31. }
  32. void HardwareConfig::init_state()
  33. {
  34. m_is_active = RESET == gpio_input_bit_get(DIPSW_DIRECT_MODE_PORT, DIPSW_DIRECT_MODE_PIN);
  35. m_scsi_id = (gpio_input_port_get(DIPSW_SCSI_ID_BIT_PORT) & DIPSW_SCSI_ID_BIT_PINS) >> DIPSW_SCSI_ID_BIT_SHIFT;
  36. uint8_t rotary_select = (gpio_input_port_get(DIPROT_DEVICE_SEL_BIT_PORT) & DIPROT_DEVICE_SEL_BIT_PINS) >> DIPROT_DEVICE_SEL_BIT_SHIFT;
  37. switch (rotary_select)
  38. {
  39. case 0:
  40. m_device_type = S2S_CFG_FIXED;
  41. break;
  42. case 1:
  43. m_device_type = S2S_CFG_SEQUENTIAL;
  44. break;
  45. case 2:
  46. m_device_type = S2S_CFG_OPTICAL;
  47. break;
  48. case 3:
  49. m_device_type = S2S_CFG_MO;
  50. break;
  51. default:
  52. m_device_type = S2S_CFG_FIXED;
  53. }
  54. if (m_device_type == S2S_CFG_OPTICAL)
  55. {
  56. m_blocksize = DEFAULT_BLOCKSIZE_OPTICAL;
  57. }
  58. else
  59. {
  60. m_blocksize = RAW_FALLBACK_BLOCKSIZE;
  61. }
  62. }