Автомобильный сканер ошибок. Собираю инфу - C#
Формулировка задачи:
Собственно вот, у кого есть машина - тот обязательно был на компьютерной диагностике. В это сфере работаю уже с десяток лет и хочу ради интереса написать свой сканер.
Железо у меня есть. Еще во времена KL-адаптеров программирование шло путем передачи данных на COM-порт пакетов данных согласно протоколу. Сейчас технологии уже ушли в .NET и работают по другим стандартам.
Хочу написать сканер, работающий по стандарту ISO 22900-2 и ISO 22901. По жаба душит купить его за 200 вечнобританских фунтов, благо что там я ничего сверхестественного не увижу. Кому стало интересно - качаем ISO 22900-1 - он в свободном доступе, там описана архитектура, и читаем дальше.
Железо, которое работает под ISO 22900 и соотвественно SAE J2534 у меня есть. Работает даже стороннее программное обеспечение. Хочу создать свое, но аналогичное, для решения никому не нужных, но мне интересных проблем.
Что я имею на данный момент:
1. DLL для работы с ISO 22900 со списком экспортируемых функций.
Плюсы - уже все написано за нас. Посылай данные согласно реализуемому протоколу и избавься от низкоуровневого программирования на уровне драйверов.
Минусы - DLL идет прицепным вагоном с программным обеспечением железа и через нее и надо работать. Фокус в том, что DLL не поддерживает .NET и ее надо грузить. Это не проблема, список экспортируемых функций есть. Но нет параметров этих функций. Стандартными средствами узнал только имена функций и то, что DLL написана на С++
Без параметров функций загрузить эти самые функции не могу. Как быть? Кто знает? Параметры функций находятся в 22900-2
2. Полностью исправное железо для работы и сторонние программы. Думал над вариантом дизассемблера - не вариант. Есть программы, работающие под .NET и исполюзующие это железа, есть программы, работающие под JAVA, есть даже одна работающая под JAVA + Eclipse. Вот когда-то видел снифера, который в лог писал какой процесс какую функцию из какой DLL вызывал. Как называется и работает ли с .NET - не знаю. Может у кого есть инфа?
собственно пока все. Есть у кого какие идеи?
Решение задачи: «Автомобильный сканер ошибок. Собираю инфу»
textual
Листинг программы
[StructLayout(LayoutKind.Sequential, Pack=1)] public struct PDU_MODULE_ITEM { T_PDU_IT ItemType; /* value= PDU_IT_MODULE_ID */ uint NumEntries; /* number of entries written to the pModuleData array */ PDU_MODULE_DATA pModuleData; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct PDU_MODULE_DATA { UInt32 ModuleTypeId; /* MVCI Protocol ModuleTypeId */ UInt32 hMod; /* handle of MVCI Protocol Module assigned by D-PDU API */ byte[] pVendorModuleName; /* Vendor specific information string for the unique module identification. */ /* E.g. Module serial number or Module friendly name */ byte[] pVendorAdditionalInfo; /* Vendor specific additional information string */ T_PDU_STATUS ModuleStatus; /* Status of MVCI Protocol Module detected by D-PDU API session*/ } public enum T_PDU_IT { PDU_IT_IO_UNUM32 = 0x1000, // IOCTL UNUM32 item. PDU_IT_IO_PROG_VOLTAGE = 0x1001, // IOCTL Program Voltage item. PDU_IT_IO_BYTEARRAY = 0x1002, // IOCTL Byte Array item. PDU_IT_IO_FILTER = 0x1003, // IOCTL Filter item. PDU_IT_IO_EVENT_QUEUE_PROPERTY = 0x1004, // IOCTL Event Queue Property item. PDU_IT_RSC_STATUS = 0x1100, // Resource Status item PDU_IT_PARAM = 0x1200, // ComParam item PDU_IT_RESULT = 0x1300, // Result item PDU_IT_STATUS = 0x1301, // Status notification item PDU_IT_ERROR = 0x1302, // Error notification item PDU_IT_INFO = 0x1303, // Information notification item PDU_IT_RSC_ID = 0x1400, // Resource ID item PDU_IT_RSC_CONFLICT = 0x1500, // Resource Conflict Item PDU_IT_MODULE_ID = 0x1600, // Module ID item PDU_IT_UNIQUE_RESP_ID_TABLE = 0x1700 // Unique Response Id Table Item }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д