summaryrefslogtreecommitdiff
path: root/Src/main-hs.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/main-hs.c')
-rw-r--r--Src/main-hs.c62
1 files changed, 55 insertions, 7 deletions
diff --git a/Src/main-hs.c b/Src/main-hs.c
index d26674b..8645848 100644
--- a/Src/main-hs.c
+++ b/Src/main-hs.c
@@ -64,7 +64,7 @@ UART_HandleTypeDef huart1;
device_info_t *device_info[BUS_DEVICE_LIMIT] = {NULL};
subscription_info_t* subs_info[BUS_DEVICE_LIMIT];
uint32_t allocated[4]={0};
-/* uint8_t dev_sts[128] = {OFFLINE}; */
+uint8_t dev_sts[BUS_DEVICE_LIMIT] = {OFFLINE};
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@@ -72,10 +72,12 @@ void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_USART1_UART_Init(void);
+
/* USER CODE BEGIN PFP */
bool decode_subscriptions_callback(pb_istream_t *istream, const pb_field_t *field, void **args);
-int handshake(uint32_t i2c_addr);
-
+hs_status_t handshake(uint32_t i2c_addr);
+bool todo_hs_or_not_todo_hs(uint8_t i2c_addr);
+state_t get_state_from_hs_status(uint16_t device_addr, hs_status_t hs_status);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@@ -126,8 +128,13 @@ int main(void)
#endif /* MASTER */
#endif /* TESTING_ENABLE */
- for (int i=0; i < 0x10; i++)
- handshake(i);
+ hs_status_t hs_status;
+ for (int curr_addr=0; curr_addr < 10; curr_addr++) {
+ if (todo_hs_or_not_todo_hs(curr_addr)) {
+ hs_status = handshake(curr_addr);
+ dev_sts[GET_IDX_FROM_ADDR(curr_addr)] = get_state_from_hs_status(curr_addr, hs_status);
+ }
+ }
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
@@ -135,6 +142,7 @@ int main(void)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
+
}
/* USER CODE END 3 */
}
@@ -272,7 +280,7 @@ static void MX_GPIO_Init(void)
}
/* USER CODE BEGIN 4 */
-int handshake(uint32_t i2c_addr)
+hs_status_t handshake(uint32_t i2c_addr)
{
/* Handshake variables */
@@ -568,7 +576,7 @@ __DEBUG_BLOCK_END:
__asm__("nop");
#endif
- return 1;
+ return hs_sts;
}
bool decode_subscriptions_callback(pb_istream_t *istream, const pb_field_t *field, void **args)
@@ -602,6 +610,46 @@ bool decode_subscriptions_callback(pb_istream_t *istream, const pb_field_t *fiel
subs.i2c_address;
return true;
}
+
+bool todo_hs_or_not_todo_hs(uint8_t i2c_addr)
+{
+ uint8_t device_idx = GET_IDX_FROM_ADDR(i2c_addr);
+ state_t device_curr_state = dev_sts[device_idx];
+ bool do_hs = false;
+ switch(device_curr_state) {
+ case NO_HS:
+ case CONNECTED:
+ case FAILED:
+ case OFFLINE:
+ do_hs = true;
+ break;
+ case REGISTERED:
+ case NO_DATA:
+ do_hs = false;
+ break;
+ }
+ return do_hs;
+}
+
+state_t get_state_from_hs_status(uint16_t device_addr, hs_status_t hs_status)
+{
+ state_t device_state = OFFLINE;
+ switch(hs_status) {
+ case IDLE:
+ case HS_FAILED:
+ device_state = OFFLINE;
+ break;
+ case HS_MDR_ACK:
+ case HS_MDR_CTS:
+ case HS_MDR_MDR:
+ device_state = FAILED;
+ break;
+ case HS_REGISTERED:
+ device_state = REGISTERED;
+ break;
+ }
+ return device_state;
+}
/* USER CODE END 4 */
/**