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); }
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; }
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); }