Example #1
0
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;
}
Example #2
0
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;
}