📄 co_dict.c
字号:
case 0x20: // Manufacturer specific
_pTmpDBase = (rom unsigned char *)_db_manufacturer_g1;
_tDBaseLen = sizeof(_db_manufacturer_g1)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x30:
_pTmpDBase = (rom unsigned char *)_db_manufacturer_g2;
_tDBaseLen = sizeof(_db_manufacturer_g2)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x40:
_pTmpDBase = (rom unsigned char *)_db_manufacturer_g3;
_tDBaseLen = sizeof(_db_manufacturer_g3)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x50:
_pTmpDBase = (rom unsigned char *)_db_manufacturer_g4;
_tDBaseLen = sizeof(_db_manufacturer_g4)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x60: // Standard
_pTmpDBase = (rom unsigned char *)_db_standard_g1;
_tDBaseLen = sizeof(_db_standard_g1)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x70:
_pTmpDBase = (rom unsigned char *)_db_standard_g2;
_tDBaseLen = sizeof(_db_standard_g2)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x80:
_pTmpDBase = (rom unsigned char *)_db_standard_g3;
_tDBaseLen = sizeof(_db_standard_g3)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x90:
_pTmpDBase = (rom unsigned char *)_db_standard_g4;
_tDBaseLen = sizeof(_db_standard_g4)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x10:
switch (_tMplex.index.bytes.B1.byte & 0x0F)
{
case 0x00: // Device specific information
_pTmpDBase = (rom unsigned char *)_db_device;
_tDBaseLen = sizeof(_db_device)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x02: // SDO Server/Client
_pTmpDBase = (rom unsigned char *)_db_sdo;
_tDBaseLen = sizeof(_db_sdo)/sizeof(DICT_OBJECT_TEMPLATE);
break;
case 0x04: // PDO Receive Comm
if (_tMplex.index.bytes.B0.byte == 0x00)
{
_pTmpDBase = (rom unsigned char *)_db_pdo1_rx_comm;
_tDBaseLen = sizeof(_db_pdo1_rx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#if CO_NUM_OF_PDO > 1
if (_tMplex.index.bytes.B0.byte == 0x01)
{
_pTmpDBase = (rom unsigned char *)_db_pdo2_rx_comm;
_tDBaseLen = sizeof(_db_pdo2_rx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 2
if (_tMplex.index.bytes.B0.byte == 0x02)
{
_pTmpDBase = (rom unsigned char *)_db_pdo3_rx_comm;
_tDBaseLen = sizeof(_db_pdo3_rx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 3
if (_tMplex.index.bytes.B0.byte == 0x03)
{
_pTmpDBase = (rom unsigned char *)_db_pdo4_rx_comm;
_tDBaseLen = sizeof(_db_pdo4_rx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
{
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
break;
case 0x06: // PDO Receive Map
if (_tMplex.index.bytes.B0.byte == 0x00)
{
_pTmpDBase = (rom unsigned char *)_db_pdo1_rx_map;
_tDBaseLen = sizeof(_db_pdo1_rx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#if CO_NUM_OF_PDO > 1
if (_tMplex.index.bytes.B0.byte == 0x01)
{
_pTmpDBase = (rom unsigned char *)_db_pdo2_rx_map;
_tDBaseLen = sizeof(_db_pdo2_rx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 2
if (_tMplex.index.bytes.B0.byte == 0x02)
{
_pTmpDBase = (rom unsigned char *)_db_pdo3_rx_map;
_tDBaseLen = sizeof(_db_pdo3_rx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 3
if (_tMplex.index.bytes.B0.byte == 0x03)
{
_pTmpDBase = (rom unsigned char *)_db_pdo4_rx_map;
_tDBaseLen = sizeof(_db_pdo4_rx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
{
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
break;
case 0x08: // PDO Transmit Comm
if (_tMplex.index.bytes.B0.byte == 0x00)
{
_pTmpDBase = (rom unsigned char *)_db_pdo1_tx_comm;
_tDBaseLen = sizeof(_db_pdo1_tx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#if CO_NUM_OF_PDO > 1
if (_tMplex.index.bytes.B0.byte == 0x01)
{
_pTmpDBase = (rom unsigned char *)_db_pdo2_tx_comm;
_tDBaseLen = sizeof(_db_pdo2_tx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 2
if (_tMplex.index.bytes.B0.byte == 0x02)
{
_pTmpDBase = (rom unsigned char *)_db_pdo3_tx_comm;
_tDBaseLen = sizeof(_db_pdo3_tx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 3
if (_tMplex.index.bytes.B0.byte == 0x03)
{
_pTmpDBase = (rom unsigned char *)_db_pdo4_tx_comm;
_tDBaseLen = sizeof(_db_pdo4_tx_comm)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
{
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
break;
case 0x0A: // PDO Transmit Map
if (_tMplex.index.bytes.B0.byte == 0x00)
{
_pTmpDBase = (rom unsigned char *)_db_pdo1_tx_map;
_tDBaseLen = sizeof(_db_pdo1_tx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#if CO_NUM_OF_PDO > 1
if (_tMplex.index.bytes.B0.byte == 0x01)
{
_pTmpDBase = (rom unsigned char *)_db_pdo2_tx_map;
_tDBaseLen = sizeof(_db_pdo2_tx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 2
if (_tMplex.index.bytes.B0.byte == 0x02)
{
_pTmpDBase = (rom unsigned char *)_db_pdo3_tx_map;
_tDBaseLen = sizeof(_db_pdo3_tx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
#if CO_NUM_OF_PDO > 3
if (_tMplex.index.bytes.B0.byte == 0x03)
{
_pTmpDBase = (rom unsigned char *)_db_pdo4_tx_map;
_tDBaseLen = sizeof(_db_pdo4_tx_map)/sizeof(DICT_OBJECT_TEMPLATE);
}
else
#endif
{
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
break;
// case 0x05:
// case 0x07:
// case 0x09:
// case 0x0B:
// _pTmpDBase = (rom unsigned char *)_db_pdo_tx_map;
// _tDBaseLen = sizeof(_db_pdo_tx_map)/sizeof(DICT_OBJECT_TEMPLATE);
// break;
default:
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
break;
default:
// Index not found in database
uDict.ret = E_OBJ_NOT_FOUND;
return;
}
// Adjust the status
uDict.ret = E_OBJ_NOT_FOUND;
// Copy the index and sub-index to local memory
*(_DATA4 *)(&(_uDictTemp[0])) = *(rom _DATA4 *)_pTmpDBase;
// Scan the database and load the pointer
while(_tDBaseLen)
{
// Match the index
if ((_uDictTemp[1] == _tMplex.index.bytes.B1.byte) &&
(_uDictTemp[0] == _tMplex.index.bytes.B0.byte))
{
// Adjust the status
uDict.ret = E_SUBINDEX_NOT_FOUND;
// If the sub index matches then return success code
if ((_uDictTemp[2] == _tMplex.sindex.byte) ||
(_uDictTemp[3] & FSUB_BIT))
{
// Copy control information
*((DICT_OBJECT_TEMPLATE *)(&(uDict.obj->index))) = *((rom DICT_OBJECT_TEMPLATE *)(_pTmpDBase));
// If functionally defined sub-index, copy sub-index from request
if (_uDictTemp[3] & FSUB_BIT) uDict.obj->subindex = _tMplex.sindex.byte;
// If function specific then call the app function for
// read/write, mapping, and length info
if (_uDictTemp[3] & FDEF_BIT) //if (uDict.obj->ctl & FDEF_BIT)
{
uDict.ret = E_SUCCESS;
uDict.cmd = DICT_OBJ_INFO;
uDict.obj->p.pFunc();
return;
}
else
{
uDict.ret = E_SUCCESS;
return;
}
}
}
// Adjust the pointer
_pTmpDBase += sizeof(DICT_OBJECT_TEMPLATE);
_tDBaseLen--;
// Copy the index and sub-index to local memory
*(_DATA4 *)(&(_uDictTemp[0])) = *(rom _DATA4 *)_pTmpDBase;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -