Как создать расширенный идентификатор сообщения в CAPL?
CAPL принимает определения сообщений, подобные следующим
сообщение 100x mymsg
Однако он не принимает длинные идентификаторы сообщений, как в случае расширенных полезных нагрузок. Другими словами, это то, что я хотел бы сделать (и CAPL не принимает):
сообщение 18FEF889x mymsg
Я знаю, что есть функция mkExtId(), хотя я до сих пор не выяснил, как она работает. Я пробовал что-то вроде
сообщение 18FEF889x mymsg
mkExtId (mymsg.id)
но это все еще не работает. У кого-нибудь есть идеи?
Спасибо
3 ответа
- Сначала объявите сообщение без идентификатора
сообщение *ExtMsg; // Декларация без идентификатора
- Используйте функцию CAPl mkExtId() для возврата расширенного идентификатора
- назначьте этот идентификатор сообщению.
variables { timer T1 = 1; message 0x100 stdMsg; dword ext_id ; message *ExtMsg; // Declaration without Id } on start { setTimer(T1,1); ext_id = mkExtId(0x34444); ExtMsg.id = ext_id; ExtMsg.dlc = 2; } on Timer T1 { ExtMsg.byte(0) = 99; stdMsg.stdSignal =2; output(stdMsg); output(ExtMsg); setTimer(T1,1); }
Вы можете просто объявить сообщение следующим образом:
message 0x114455x msg;
Функция mkExtId
возвращает расширенный идентификатор, который затем вы передаете id
если сообщение, вот пример:
Эта функция устанавливает расширенный идентификатор передаваемого сообщения:
void setExtId(dword x_id, message* m)
{
dword ext_id;
ext_id = mkExtId(0x1FFFFFFF);
m.id = mkExtId(x_id);
if(m.id == ext_id)
{
write("some stuff");
}
}