void enumerate(const ComType com, const Enumerate *data) { logd("Returning Enumeration for Brick: %d\n\r", com); // Enumerate Brick EnumerateCallback ec = MESSAGE_EMPTY_INITIALIZER; make_brick_enumerate(&ec); ec.enumeration_type = ENUMERATE_TYPE_AVAILABLE; send_blocking_with_timeout(&ec, sizeof(EnumerateCallback), com); // Enumerate Bricklet for(uint8_t i = 0; i < BRICKLET_NUM; i++) { if(bs[i].uid == 0 || bricklet_attached[i] == BRICKLET_INIT_CO_MCU) { continue; } logd("Returning Enumeration for Bricklet %c\n\r", 'a' + i); EnumerateCallback ec = MESSAGE_EMPTY_INITIALIZER; make_bricklet_enumerate(&ec, i); ec.enumeration_type = ENUMERATE_TYPE_AVAILABLE; send_blocking_with_timeout(&ec, sizeof(EnumerateCallback), com); } com_info.current = com; }
bool brick_init_enumeration(const ComType com) { EnumerateCallback ec = MESSAGE_EMPTY_INITIALIZER; make_brick_enumerate(&ec); ec.enumeration_type = ENUMERATE_TYPE_ADDED; if(SEND(&ec, sizeof(EnumerateCallback), com, NULL) != 0) { logd("Returning initial Enumeration for Brick: %lu\n\r", ec.header.uid); for(uint8_t i = 0; i < BRICKLET_NUM; i++) { EnumerateCallback ec = MESSAGE_EMPTY_INITIALIZER; make_bricklet_enumerate(&ec, i); if(ec.device_identifier != 0) { logd("Returning initial Enumeration for Bricklet %c: %lu\n\r", 'a' + i, ec.header.uid); ec.enumeration_type = ENUMERATE_TYPE_ADDED; while(send_blocking_with_timeout(&ec, sizeof(EnumerateCallback), com) == 0); } } return true; } return false; }