Exemplo n.º 1
0
void bricklet_try_connection(const uint8_t bricklet) {
	bricklet_select(bricklet);
	uint64_t uid = i2c_eeprom_master_read_uid(TWI_BRICKLET);
	bricklet_deselect(bricklet);

	if(uid == 0) {
		logbleti("Bricklet %c not connected\n\r", 'a' + bricklet);
		return;
	}

	logbleti("Bricklet %c connected\n\r", 'a' + bricklet);

	if(!bricklet_init_plugin(bricklet)) {
		logbletw("Could not init Bricklet %c\n\r", 'a' + bricklet);
		return;
	}

	BrickletInfo bi;
	baddr[bricklet].entry(BRICKLET_TYPE_INFO,
	                      0,
	                      (uint8_t*)&bi);

	bs[bricklet].firmware_version[0] = bi.firmware_version[0];
	bs[bricklet].firmware_version[1] = bi.firmware_version[1];
	bs[bricklet].firmware_version[2] = bi.firmware_version[2];
	strncpy(bs[bricklet].name, bi.name, MAX_LENGTH_NAME);

	bs[bricklet].uid = uid;

	logbleti("Bricklet %c configured\n\r", 'a' + bricklet);
}
Exemplo n.º 2
0
bool bricklet_init_plugin(const uint8_t bricklet) {
	bricklet_select(bricklet);

	char plugin[PLUGIN_CHUNK_SIZE];

	const uint16_t end = BRICKLET_PLUGIN_MAX_SIZE/PLUGIN_CHUNK_SIZE - 1;

	for(int position = 0; position < end; position++) {
		i2c_eeprom_master_read_plugin(TWI_BRICKLET, plugin, position);
		bricklet_write_plugin_to_flash(plugin, position, bricklet);
	}

	bricklet_deselect(bricklet);
	bricklet_write_asc_to_flash(bricklet);

	logbleti("Calling constructor for bricklet %c\n\r", 'a' + bricklet);
	baddr[bricklet].entry(BRICKLET_TYPE_CONSTRUCTOR, 0, NULL);
	bricklet_attached[bricklet] = true;

	return true;
}
Exemplo n.º 3
0
void get_protocol1_bricklet_name(const ComType com, const GetProtocol1BrickletName *data) {
	uint8_t port = tolower((uint8_t)data->port) - 'a';
	if(port >= BRICKLET_NUM) {
		com_return_error(data, sizeof(GetProtocol1BrickletName), MESSAGE_ERROR_CODE_INVALID_PARAMETER, com);
		logblete("Bricklet Port %d does not exist (get_protocol1_bricklet_name)\n\r", port);
		return;
	}

	GetProtocol1BrickletNameReturn gp1bnr = MESSAGE_EMPTY_INITIALIZER;
	gp1bnr.header           = data->header;
	gp1bnr.header.length    = sizeof(GetProtocol1BrickletNameReturn);
	gp1bnr.protocol_version = bricklet_attached[port];

	if(gp1bnr.protocol_version == BRICKLET_INIT_PROTOCOL_VERSION_1) {
		baddr[port].entry(BRICKLET_TYPE_INFO,
		                  0,
		                  (uint8_t*)&gp1bnr.firmware_version);
	}

	send_blocking_with_timeout(&gp1bnr, sizeof(GetProtocol1BrickletNameReturn), com);
	logbleti("get_protocol1_bricklet_name: %s (%d)\n\r", gp1bnr.name, gp1bnr.protocol_version);
}