diff options
| author | ThomasintAnker <thomasintanker1@gmail.com> | 2024-06-20 16:27:28 +0200 | 
|---|---|---|
| committer | ThomasintAnker <thomasintanker1@gmail.com> | 2024-06-20 16:27:28 +0200 | 
| commit | 32d1e5eff57e8f75ef571cc6a929357cfac737c2 (patch) | |
| tree | 443f7ec8f0ff0303c59ad6b00f9c6b6c1175292a | |
| parent | 5152b4dbd41e0e11da32c1ba308824ba367c45a9 (diff) | |
WIP state_exchange
| -rw-r--r-- | main/i2c.c | 33 | 
1 files changed, 26 insertions, 7 deletions
| @@ -13,12 +13,18 @@  #include "pb-buf.h"  #include "pb-send.h" -i2c_addr_t modules[CFG_PB_MOD_MAX]; +static pb_global_state_t _global_state = PB_GS_IDLE;  +pb_puzzle_module_t modules[CFG_PB_MOD_MAX];  size_t modules_size = 0;  static void state_exchange() { - +	pb_global_state_t new_state;  	// TODO: Add calculation(?) to get global state +	// noinit -> not possible, idle -> all idle, solved -> all solved, playing -> one playing +	for (size_t i = 0; i < modules_size; i++) { +		 +	} +	pb_hook_mod_state_write(new_state);  	for (size_t i = 0; i < modules_size; i++) {  		pb_buf_t buf = pb_send_state_req(); @@ -46,15 +52,28 @@ void bus_task() {  void pb_route_cmd_magic_res(pb_msg_t * msg) {  	if (modules_size == CFG_PB_MOD_MAX) return; -	modules[modules_size++] = msg->sender; +	pb_puzzle_module_t tmp_module = {msg->sender, PB_GS_NOINIT}; +	modules[modules_size++] = tmp_module;  	printf("i2c: registered puzzle module w/ address 0x%02x\n", msg->sender);  }  void pb_route_cmd_state_res(pb_msg_t * msg) {  	pb_cmd_state_t * cmd = msg->cmd; -	// return early if state has wrong size -	if (cmd->_magic_size != sizeof(pb_cmd_state_t)) -		return; +	i2c_addr_t sender = msg->sender; +	 +	// update sender state +	for( size_t i = 0; i < modules_size; i++ ) { +		if (modules[i].sender == sender) { +			modules[i].state = (pb_global_state_t)cmd; +			break; +		} +	} +} + +pb_global_state_t pb_hook_mod_state_read() { +	return _global_state; +} -	// TODO: Get msg sender & update state in array struct (?) +void pb_hook_mod_state_write(pb_global_state_t state) { +	_global_state = state;  } |