/ bf16-brd-control.c
bf16-brd-control.c
  1  #include "bf16-brd-control.h"
  2  #include "miner.h"
  3  
  4  #define BV(x)  (1 << x)
  5  
  6  static uint32_t ctrl_read(uint8_t gpio, uint8_t reg)
  7  {
  8  	gpio_rq_t rq;
  9  
 10  	rq.gpioIndex = gpio;
 11  	rq.regIndex = reg;
 12  	gpio_read_ctrl(&rq);
 13  
 14  	return rq.data;
 15  }
 16  
 17  static int8_t ctrl_write(uint8_t gpio, uint8_t reg, uint32_t data)
 18  {
 19  	gpio_rq_t rq;
 20  
 21  	rq.gpioIndex = gpio;
 22  	rq.regIndex = reg;
 23  	rq.data = data;
 24  	return gpio_write_ctrl(&rq);
 25  }
 26  
 27  void brd_init(void)
 28  {
 29  	uint32_t data = ctrl_read(GPIO0_INDEX, OE_REG_INDEX);
 30  	data &= ~(BV(CH1_MSP_RST_PIN) | BV(LED_GREEN_PIN));
 31  	ctrl_write(GPIO0_INDEX, OE_REG_INDEX, data);
 32  
 33  	data = ctrl_read(GPIO1_INDEX, OE_REG_INDEX);
 34  	data &= ~(BV(LED_RED_PIN) | BV(CH2_MSP_RST_PIN) | BV(CH1_SPI_RES_PIN));
 35  	ctrl_write(GPIO1_INDEX, OE_REG_INDEX, data);
 36  
 37  	data = ctrl_read(GPIO2_INDEX, OE_REG_INDEX);
 38  	data &= ~(BV(BUZZER_PIN) | BV(CH2_SPI_RES_PIN));
 39  	ctrl_write(GPIO2_INDEX, OE_REG_INDEX, data);
 40  }
 41  
 42  int get_hw_ver(void)
 43  {
 44  	uint32_t data1 = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX);
 45  	uint32_t data2 = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX);
 46  
 47  	uint8_t result = BIT_STATE(data1, BRD_VER0_PIN);
 48  	result |= BIT_STATE(data1, BRD_VER1_PIN) ? 2 : 0;
 49  	result |= BIT_STATE(data1, BRD_VER2_PIN) ? 4 : 0;
 50  	result |= BIT_STATE(data2, BRD_VER3_PIN) ? 8 : 0;
 51  
 52  	return result;
 53  }
 54  
 55  int get_btn_fr(void)
 56  {
 57  	uint32_t data = ctrl_read(GPIO2_INDEX, DATAIN_REG_INDEX);
 58  	return BIT_INV_STATE(data, BRD_BUT1_PIN);
 59  }
 60  
 61  int get_btn_discovery(void)
 62  {
 63  	uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX);
 64  	return BIT_INV_STATE(data, BRD_BUT2_PIN);
 65  }
 66  
 67  int get_ch1_det(void)
 68  {
 69  	uint32_t data = ctrl_read(GPIO0_INDEX, DATAIN_REG_INDEX);
 70  	return BIT_INV_STATE(data, BRD_DET1_PIN);
 71  }
 72  
 73  int get_ch2_det(void)
 74  {
 75  	uint32_t data = ctrl_read(GPIO1_INDEX, DATAIN_REG_INDEX);
 76  	return BIT_INV_STATE(data, BRD_DET2_PIN);
 77  }
 78  
 79  static uint8_t _direct_state_reg_index(uint8_t state)
 80  {
 81  	return (state != 0) ? DATASET_REG_INDEX : DATACLR_REG_INDEX;
 82  }
 83  
 84  static uint8_t _inverse_state_reg_index(uint8_t state)
 85  {
 86  	return (state != 0) ? DATACLR_REG_INDEX : DATASET_REG_INDEX;
 87  }
 88  
 89  int8_t set_buzzer(uint8_t state)
 90  {
 91  	return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(BUZZER_PIN));
 92  }
 93  
 94  int8_t set_led_green(uint8_t state)
 95  {
 96  	return ctrl_write(GPIO0_INDEX, _direct_state_reg_index(state), BV(LED_GREEN_PIN));
 97  }
 98  
 99  int8_t set_led_red(uint8_t state)
100  {
101  	return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(LED_RED_PIN));
102  }
103  
104  int8_t set_ch1_rst(uint8_t state)
105  {
106  	return ctrl_write(GPIO0_INDEX, _inverse_state_reg_index(state), BV(CH1_MSP_RST_PIN));
107  }
108  
109  int8_t set_ch2_rst(uint8_t state)
110  {
111  	return ctrl_write(GPIO1_INDEX, _inverse_state_reg_index(state), BV(CH2_MSP_RST_PIN));
112  }
113  
114  int8_t set_ch1_spi(uint8_t state)
115  {
116  	return ctrl_write(GPIO2_INDEX, _direct_state_reg_index(state), BV(CH1_SPI_RES_PIN));
117  }
118  
119  int8_t set_ch2_spi(uint8_t state)
120  {
121  	return ctrl_write(GPIO1_INDEX, _direct_state_reg_index(state), BV(CH2_SPI_RES_PIN));
122  }