Skip to content
Snippets Groups Projects
Commit 66c0190b authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Used the device ID to differentiate between differetn devices on EEPROM.

Used the individual memory data structure for each device.
parent 6a97ea07
No related branches found
No related tags found
1 merge request!7Multi slave
......@@ -13,34 +13,14 @@
#define RETURN_LEVEL 0
#ifndef DEFAULT_DEVICE_MODEL
#define DEFAULT_DEVICE_MODEL 0x7300
#endif
#ifndef DEFAULT_FIRMWARE_VERSION
#define DEFAULT_FIRMWARE_VERSION 0x0001
#endif
#ifndef DEFAULT_DEVICE_ID
#define DEFAULT_DEVICE_ID 0x0001
#endif
#ifndef DEFAULT_BAUDRATE
#define DEFAULT_BAUDRATE 0x0010
#endif
#ifndef DEFAULT_RETURN_DELAY
#define DEFAULT_RETURN_DELAY 0x0000
#endif
#ifndef DEFAULT_RETURN_LEVEL
#define DEFAULT_RETURN_LEVEL 0x0002
#endif
#define dyn_slave_control_eeprom_data(name,section_name,base_address1,base_address2) \
unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_DEVICE_MODEL&0x00FF,base_address1+DEVICE_MODEL, \
(DEFAULT_DEVICE_MODEL>>8)&0x00FF,base_address1+DEVICE_MODEL+1, \
DEFAULT_FIRMWARE_VERSION,base_address1+FIRMWARE_VERSION, \
DEFAULT_DEVICE_ID,base_address1+DEVICE_ID, \
DEFAULT_BAUDRATE,base_address1+BAUDRATE, \
DEFAULT_RETURN_DELAY,base_address1+RETURN_DELAY, \
DEFAULT_RETURN_LEVEL,base_address2+RETURN_LEVEL};
#define dyn_slave_control_eeprom_data(name,section_name,base_address1,base_address2,DEFAULT_DEVICE_MODEL,DEFAULT_FIRMWARE_VERSION,DEFAULT_DEVICE_ID,DEFAULT_BAUDRATE,DEFAULT_RETURN_DELAY,DEFAULT_RETURN_LEVEL) \
unsigned short int name##_eeprom_data[] __attribute__ ((section (section_name)))={DEFAULT_DEVICE_MODEL&0x00FF,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_MODEL, \
(DEFAULT_DEVICE_MODEL>>8)&0x00FF,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_MODEL+1, \
DEFAULT_FIRMWARE_VERSION,(DEFAULT_DEVICE_ID<<8) + base_address1+FIRMWARE_VERSION, \
DEFAULT_DEVICE_ID,(DEFAULT_DEVICE_ID<<8) + base_address1+DEVICE_ID, \
DEFAULT_BAUDRATE,(DEFAULT_DEVICE_ID<<8) + base_address1+BAUDRATE, \
DEFAULT_RETURN_DELAY,(DEFAULT_DEVICE_ID<<8) + base_address1+RETURN_DELAY, \
DEFAULT_RETURN_LEVEL,(DEFAULT_DEVICE_ID<<8) + base_address2+RETURN_LEVEL};
#endif
......
......@@ -10,36 +10,36 @@ void dyn_slave_device_write_cmd(TDynamixelSlaveDevice *device,unsigned short int
if(ram_in_window(device->eeprom_base_address1+DEVICE_MODEL,2,address,length))
{
if(ram_in_range(device->eeprom_base_address1+DEVICE_MODEL,address,length))
ram_data[device->eeprom_base_address1+DEVICE_MODEL]=data[DEVICE_MODEL-offset];
device->memory.data[device->eeprom_base_address1+DEVICE_MODEL]=data[DEVICE_MODEL-offset];
if(ram_in_range(device->eeprom_base_address1+DEVICE_MODEL+1,address,length))
ram_data[device->eeprom_base_address1+DEVICE_MODEL+1]=data[DEVICE_MODEL+1-offset];
device->memory.data[device->eeprom_base_address1+DEVICE_MODEL+1]=data[DEVICE_MODEL+1-offset];
}
if(ram_in_range(device->eeprom_base_address1+DEVICE_ID,address,length))
{
dyn_slave_device_set_address(device,data[DEVICE_ID-offset]);
ram_data[device->eeprom_base_address1+DEVICE_ID]=data[DEVICE_ID-offset];
device->memory.data[device->eeprom_base_address1+DEVICE_ID]=data[DEVICE_ID-offset];
}
if(ram_in_range(device->eeprom_base_address1+BAUDRATE,address,length))
{
dyn_slave_set_baudrate(device->slave,2000000/(data[BAUDRATE-offset]+1));
ram_data[device->eeprom_base_address1+BAUDRATE]=data[BAUDRATE-offset];
device->memory.data[device->eeprom_base_address1+BAUDRATE]=data[BAUDRATE-offset];
}
if(ram_in_range(device->eeprom_base_address1+RETURN_DELAY,address,length))
{
dyn_slave_device_set_return_delay(device,data[RETURN_DELAY-offset]);
ram_data[device->eeprom_base_address1+RETURN_DELAY]=data[RETURN_DELAY-offset];
device->memory.data[device->eeprom_base_address1+RETURN_DELAY]=data[RETURN_DELAY-offset];
}
offset=address-device->eeprom_base_address2;
if(ram_in_range(device->eeprom_base_address2+RETURN_LEVEL,address,length))
{
dyn_slave_device_set_return_level(device,data[RETURN_LEVEL-offset]);
ram_data[device->eeprom_base_address2+RETURN_LEVEL]=data[RETURN_LEVEL-offset];
device->memory.data[device->eeprom_base_address2+RETURN_LEVEL]=data[RETURN_LEVEL-offset];
}
}
void dyn_slave_device_read_cmd(TDynamixelSlaveDevice *devicee,unsigned short int address,unsigned short int length,unsigned char *data)
void dyn_slave_device_read_cmd(TDynamixelSlaveDevice *device,unsigned short int address,unsigned short int length,unsigned char *data)
{
ram_read_table(address,length,data);
ram_read_table(&device->memory,address,length,data);
}
void dummy_dyn_slave_device_on_ping(void)
......@@ -403,7 +403,7 @@ unsigned char dyn_slave_device_init(TDynamixelSlaveDevice *device,unsigned char
device->bulk_read_pending=0x00;
/* initialize memory module */
mem_init(&device->memory);
mem_init(&device->memory,address);
mem_module_init(&device->mem_module);
device->mem_module.data=device;
device->mem_module.write_cmd=(void(*)(void *,unsigned short int, unsigned short int,unsigned char *))dyn_slave_device_write_cmd;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment