CAN-200: Исходный файл public.h

CAN-200 1.3.0

public.h
См. документацию.
1 #include <initguid.h>
2
3 #ifndef __PUBLIC_H__
4 #define __PUBLIC_H__
5
167 #define NUM_CHANNEL 4
168
169 #pragma pack(1)
170
176 typedef struct
177 {
183 char szName[128];
187 char szSN[10];
191 USHORT wPorts[NUM_CHANNEL];
195 USHORT wIRQ;
196 } TCAN_VPDData, *pTCAN_VPDData;
197 #pragma pack()
198
199 #pragma pack(1)
200
206 typedef struct
207 {
215 unsigned short FF;
221 unsigned short sID; /* стандартный идентификатор (11 бит) */
227 unsigned long extID;
231 unsigned short RTR; /* RTR - бит */
235 unsigned short DLC;
241 unsigned short DataByte[8];
242 } RX_TX_Buffer, *pRX_TX_Buffer;
243 #pragma pack()
244
245 #pragma pack(1)
246
252 typedef struct
253 {
259 RX_TX_Buffer rxtxbuf;
265 UCHAR IntrID;
266 } TEventData, *pTEventData;
267 #pragma pack()
268
269 #pragma pack(1)
270
274 typedef struct
275 {
279 USHORT Code;
283 USHORT Mask;
284 } bFilter_t, *pbFilter_t;
285 #pragma pack()
286
287 #pragma pack(1)
288
292 typedef struct
293 {
297 USHORT Filter[4];
301 USHORT Mask[4];
309 USHORT Mode;
310 } pFilter_t, *ppFilter_t;
311 #pragma pack()
312
313 /* Давим предупреждение warning C4214: нестандартное расширение: типы битовых полей, отличные от int */
314 #pragma warning(push)
315 #pragma warning(disable:4214)
316
317 #pragma pack(1)
318
322 typedef union
323 {
324 struct
325 {
333 unsigned char rbs : 1;
341 unsigned char dos : 1;
349 unsigned char tbs : 1;
357 unsigned char tcs : 1;
365 unsigned char rs : 1;
373 unsigned char ts : 1;
381 unsigned char es : 1;
389 unsigned char bs : 1;
390 } bit;
391 unsigned char byte;
392 } CAN_status_t, *pCAN_status_t;
393 #pragma pack()
394
395 #pragma pack(1)
396
400 typedef union
401 {
402 struct
403 {
407 unsigned char ri : 1;
411 unsigned char ti : 1;
415 unsigned char ei : 1;
419 unsigned char doi : 1;
423 unsigned char wui : 1;
427 unsigned char epi : 1;
431 unsigned char ali : 1;
435 unsigned char bei : 1;
436 } bit;
437 unsigned char byte;
438 } CAN_interrupt_t, *pCAN_interrupt_t;
439 #pragma pack()
440
441 #pragma pack(1)
442
446 typedef union
447 {
448 struct
449 {
455 unsigned char trans : 1;
462 unsigned char trans_stop : 1;
468 unsigned char recv_clear : 1;
474 unsigned char recv_bit_clear : 1;
480 unsigned char sleep : 1;
484 unsigned char rsvd : 3;
485 } bit;
486 unsigned char byte;
487 } CAN_command_t, *pCAN_command_t;
488 #pragma pack()
489
490 #pragma pack(1)
491
495 typedef union
496 {
497 struct
498 {
550 unsigned char seg : 5;
558 unsigned char dir : 1;
570 unsigned char errc : 2;
571 } bit;
572 unsigned char byte;
573 } CAN_error_t, *pCAN_error_t;
574 #pragma pack()
575
576 #pragma pack(1)
577
581 typedef union
582 {
583 struct
584 {
652 unsigned char alc : 5;
656 unsigned char rsvd : 3;
657 } bit;
658 unsigned char byte;
659 } CAN_arbitration_lost_capture_t, *pCAN_arbitration_lost_capture_t;
660 #pragma pack()
661 #pragma warning(pop)
662
664 #pragma pack(1)
665 //
666 // Структура запроса
667 //
668 typedef struct
669 {
670 union CommandData_t
671 {
672 USHORT Mode;
673 unsigned int Speed;
674 USHORT Interrupt;
675 RX_TX_Buffer Buffer;
676 USHORT Command;
677 USHORT Counter;
678 bFilter_t bFilter;
679 pFilter_t pFilter;
680 HANDLE Event;
681 void *_ptr64 Event64;
682 USHORT Data[2];
683 } CommandData;
684 USHORT Channel;
685 } IoctlReq_t, *pIoctlReq_t;
686 #pragma pack()
687
688 #pragma pack(1)
689 //
690 // Структура ответа
691 //
692 typedef struct
693 {
694 int Status;
695 union
696 {
697 USHORT Mode;
698 unsigned int Speed;
699 USHORT Status;
700 RX_TX_Buffer Buffer;
701 USHORT Counter;
702 USHORT Error;
703 bFilter_t bFilter;
704 pFilter_t pFilter;
705 TEventData EventData;
706 USHORT Data;
707 USHORT Mask;
708 int OverCounter;
709 int NumChannel;
710 int Version;
711 } Data;
712 } IoctlRes_t, *pIoctlRes_t;
713 #pragma pack()
714
720 #define CAN200_OK 0
721 #define CAN200_ERR_PARM -1
722 #define CAN200_ERR_SYS -2
723 #define CAN200_ERR_MODE -3
724 #define CAN200_ERR_BUSY -4
725
727 #define CAN_CHANNEL_1 1
728 #define CAN_CHANNEL_2 2
729 #define CAN_CHANNEL_3 3
730 #define CAN_CHANNEL_4 4
731
732
733 //
734 // Максимальное количество плат.
735 //
736 #define MAX_CAN_NUMBER 10
737
743 #define BasicCAN 0
744 #define PeliCAN 1
745
751 #define CAN_SPEED_USER_DEFINED(btr0, btr1) (0xffff | (((btr0) & 0xff) << 24) | (((btr1) & 0xff) << 16))
752 #define IS_CAN_SPEED_USER_DEFINED(speed) ((0xffff == ((speed) & 0xffff)) ? 1 : 0)
753 #define CAN_SPEED_GET_BTR0(speed) (((speed) >> 24) & 0xff)
754 #define CAN_SPEED_GET_BTR1(speed) (((speed) >> 16) & 0xff)
755 #define CAN_SPEED_1000 1000
756 #define CAN_SPEED_800 800
757 #define CAN_SPEED_500 500
758 #define CAN_SPEED_250 250
759 #define CAN_SPEED_125 125
760 #define CAN_SPEED_50 50
761 #define CAN_SPEED_20 20
762 #define CAN_SPEED_10 10
763
766 #define FILE_DEVICE_CAN200 0x8000
767
768 #define V_HardReset 0
769 #define V_SetWorkMode 1
770 #define V_GetWorkMode 2
771 #define V_SetDriverMode 3
772 #define V_SetCANSpeed 4
773 #define V_GetStatus 5
774 #define V_SetInterruptSource 6
775 #define V_SetTxBuffer 7
776 #define V_GetRxBuffer 8
777 #define V_SetCommand 9
778 #define V_B_SetInputFilter 10
779 #define V_P_SetRxErrorCounter 11
780 #define V_P_GetRxErrorCounter 12
781 #define V_P_SetTxErrorCounter 13
782 #define V_P_GetTxErrorCounter 14
783 #define V_P_SetErrorWarningLimit 15
784 #define V_P_GetErrorWarningLimit 16
785 #define V_P_GetArbitrationLostCapture 17
786 #define V_P_GetRxMessageCounter 18
787 #define V_P_GetErrorCode 19
788 #define V_P_SetInputFilter 20
789 #define V_DefEvent 21
790 #define V_GetEventData 22
791 #define V_GetConfig 23
792 #define V_GetCANSpeed 24
793 #define V_B_GetInputFilter 25
794 #define V_P_GetInputFilter 26
795 #define V_SetCANReg 27
796 #define V_GetCANReg 28
797 #define V_GetInterruptSource 29
798 #define V_GetOverCounter 30
799 #define V_GetNumChannel 31
800 #define V_GetVersion 32
801
802 //
803 // Коды ioctl.
804 //
805 #define IOCTL_CAN200PC_SetWorkMode CTL_CODE(FILE_DEVICE_CAN200, \
806 0x800 + V_SetWorkMode, \
807 METHOD_BUFFERED, \
808 FILE_ANY_ACCESS)
809 #define IOCTL_CAN200PC_GetWorkMode CTL_CODE(FILE_DEVICE_CAN200, \
810 0x800 + V_GetWorkMode, \
811 METHOD_BUFFERED, \
812 FILE_ANY_ACCESS)
813 #define IOCTL_CAN200PC_SetDriverMode CTL_CODE(FILE_DEVICE_CAN200, \
814 0x800 + V_SetDriverMode, \
815 METHOD_BUFFERED, \
816 FILE_ANY_ACCESS)
817 #define IOCTL_CAN200PC_HardReset CTL_CODE(FILE_DEVICE_CAN200, \
818 0x800 + V_HardReset, \
819 METHOD_BUFFERED, \
820 FILE_ANY_ACCESS)
821 #define IOCTL_CAN200PC_SetCANSpeed CTL_CODE(FILE_DEVICE_CAN200, \
822 0x800 + V_SetCANSpeed, \
823 METHOD_BUFFERED, \
824 FILE_ANY_ACCESS)
825 #define IOCTL_CAN200PC_GetStatus CTL_CODE(FILE_DEVICE_CAN200, \
826 0x800 + V_GetStatus, \
827 METHOD_BUFFERED, \
828 FILE_ANY_ACCESS)
829 #define IOCTL_CAN200PC_GetConfig CTL_CODE(FILE_DEVICE_CAN200, \
830 0x800 + V_GetConfig, \
831 METHOD_BUFFERED, \
832 FILE_ANY_ACCESS)
833 #define IOCTL_CAN200PC_SetInterruptSource CTL_CODE(FILE_DEVICE_CAN200, \
834 0x800 + V_SetInterruptSource, \
835 METHOD_BUFFERED, \
836 FILE_ANY_ACCESS)
837 #define IOCTL_CAN200PC_SetTxBuffer CTL_CODE(FILE_DEVICE_CAN200, \
838 0x800 + V_SetTxBuffer, \
839 METHOD_BUFFERED, \
840 FILE_ANY_ACCESS)
841 #define IOCTL_CAN200PC_GetRxBuffer CTL_CODE(FILE_DEVICE_CAN200, \
842 0x800 + V_GetRxBuffer, \
843 METHOD_BUFFERED, \
844 FILE_ANY_ACCESS)
845 #define IOCTL_CAN200PC_SetCommand CTL_CODE(FILE_DEVICE_CAN200, \
846 0x800 + V_SetCommand, \
847 METHOD_BUFFERED, \
848 FILE_ANY_ACCESS)
849 #define IOCTL_CAN200PC_B_SetInputFilter CTL_CODE(FILE_DEVICE_CAN200, \
850 0x800 + V_B_SetInputFilter, \
851 METHOD_BUFFERED, \
852 FILE_ANY_ACCESS)
853 #define IOCTL_CAN200PC_P_SetRxErrorCounter CTL_CODE(FILE_DEVICE_CAN200, \
854 0x800 + V_P_SetRxErrorCounter, \
855 METHOD_BUFFERED, \
856 FILE_ANY_ACCESS)
857 #define IOCTL_CAN200PC_P_GetRxErrorCounter CTL_CODE(FILE_DEVICE_CAN200, \
858 0x800 + V_P_GetRxErrorCounter, \
859 METHOD_BUFFERED, \
860 FILE_ANY_ACCESS)
861 #define IOCTL_CAN200PC_P_SetTxErrorCounter CTL_CODE(FILE_DEVICE_CAN200, \
862 0x800 + V_P_SetTxErrorCounter, \
863 METHOD_BUFFERED, \
864 FILE_ANY_ACCESS)
865 #define IOCTL_CAN200PC_P_GetTxErrorCounter CTL_CODE(FILE_DEVICE_CAN200, \
866 0x800 + V_P_GetTxErrorCounter, \
867 METHOD_BUFFERED, \
868 FILE_ANY_ACCESS)
869 #define IOCTL_CAN200PC_P_SetErrorWarningLimit CTL_CODE(FILE_DEVICE_CAN200, \
870 0x800 + V_P_SetErrorWarningLimit, \
871 METHOD_BUFFERED, \
872 FILE_ANY_ACCESS)
873 #define IOCTL_CAN200PC_P_GetErrorWarningLimit CTL_CODE(FILE_DEVICE_CAN200, \
874 0x800 + V_P_GetErrorWarningLimit, \
875 METHOD_BUFFERED, \
876 FILE_ANY_ACCESS)
877 #define IOCTL_CAN200PC_P_GetArbitrationLostCapture CTL_CODE(FILE_DEVICE_CAN200, \
878 0x800 + V_P_GetArbitrationLostCapture, \
879 METHOD_BUFFERED, \
880 FILE_ANY_ACCESS)
881 #define IOCTL_CAN200PC_P_GetRxMessageCounter CTL_CODE(FILE_DEVICE_CAN200, \
882 0x800 + V_P_GetRxMessageCounter, \
883 METHOD_BUFFERED, \
884 FILE_ANY_ACCESS)
885 #define IOCTL_CAN200PC_P_GetErrorCode CTL_CODE(FILE_DEVICE_CAN200, \
886 0x800 + V_P_GetErrorCode, \
887 METHOD_BUFFERED, \
888 FILE_ANY_ACCESS)
889 #define IOCTL_CAN200PC_P_SetInputFilter CTL_CODE(FILE_DEVICE_CAN200, \
890 0x800 + V_P_SetInputFilter, \
891 METHOD_BUFFERED, \
892 FILE_ANY_ACCESS)
893 #define IOCTL_CAN200PC_GetCANSpeed CTL_CODE(FILE_DEVICE_CAN200, \
894 0x800 + V_GetCANSpeed, \
895 METHOD_BUFFERED, \
896 FILE_ANY_ACCESS)
897 #define IOCTL_CAN200PC_B_GetInputFilter CTL_CODE(FILE_DEVICE_CAN200, \
898 0x800 + V_B_GetInputFilter, \
899 METHOD_BUFFERED, \
900 FILE_ANY_ACCESS)
901 #define IOCTL_CAN200PC_DefEvent CTL_CODE(FILE_DEVICE_CAN200, \
902 0x800 + V_DefEvent, \
903 METHOD_BUFFERED, \
904 FILE_ANY_ACCESS)
905 #define IOCTL_CAN200PC_GetEventData CTL_CODE(FILE_DEVICE_CAN200, \
906 0x800 + V_GetEventData, \
907 METHOD_BUFFERED, \
908 FILE_ANY_ACCESS)
909 #define IOCTL_CAN200PC_P_GetInputFilter CTL_CODE(FILE_DEVICE_CAN200, \
910 0x800 + V_P_GetInputFilter, \
911 METHOD_BUFFERED, \
912 FILE_ANY_ACCESS)
913 #define IOCTL_CAN200PC_SetCANReg CTL_CODE(FILE_DEVICE_CAN200, \
914 0x800 + V_SetCANReg, \
915 METHOD_BUFFERED, \
916 FILE_ANY_ACCESS)
917 #define IOCTL_CAN200PC_GetCANReg CTL_CODE(FILE_DEVICE_CAN200, \
918 0x800 + V_GetCANReg, \
919 METHOD_BUFFERED, \
920 FILE_ANY_ACCESS)
921 #define IOCTL_CAN200PC_GetInterruptSource CTL_CODE(FILE_DEVICE_CAN200, \
922 0x800 + V_GetInterruptSource, \
923 METHOD_BUFFERED, \
924 FILE_ANY_ACCESS)
925 #define IOCTL_CAN200PC_GetOverCounter CTL_CODE(FILE_DEVICE_CAN200, \
926 0x800 + V_GetOverCounter, \
927 METHOD_BUFFERED, \
928 FILE_ANY_ACCESS)
929 #define IOCTL_CAN200PC_GetNumChannel CTL_CODE(FILE_DEVICE_CAN200, \
930 0x800 + V_GetNumChannel, \
931 METHOD_BUFFERED, \
932 FILE_ANY_ACCESS)
933 #define IOCTL_CAN200PC_GetVersion CTL_CODE(FILE_DEVICE_CAN200, \
934 0x800 + V_GetVersion, \
935 METHOD_BUFFERED, \
936 FILE_ANY_ACCESS)
937
939 #endif /* __PUBLIC_H__ */
CAN_arbitration_lost_capture_t::rsvd
unsigned char rsvd
Зарезервировано
Definition: public.h:656
CAN_interrupt_t
Структура описывающая разрешение/запрет прерываний
Definition: public.h:400
RX_TX_Buffer::FF
unsigned short FF
Формат кадра
Definition: public.h:215
RX_TX_Buffer::extID
unsigned long extID
Расширенный идентификатор
Definition: public.h:227
CAN_error_t::errc
unsigned char errc
Код ошибки
Definition: public.h:570
CAN_command_t
Структура описывающая команды выполняемые платой
Definition: public.h:446
bFilter_t::Mask
USHORT Mask
Маска входного фильтра
Definition: public.h:283
NUM_CHANNEL
#define NUM_CHANNEL
Количество каналов на плате
Definition: public.h:167
CAN_status_t::tbs
unsigned char tbs
Доступность буфера передачи
Definition: public.h:349
CAN_command_t::rsvd
unsigned char rsvd
Зарезервированное поле
Definition: public.h:484
CAN_interrupt_t::ti
unsigned char ti
Прерывание после передачи кадра
Definition: public.h:411
CAN_status_t::dos
unsigned char dos
Переполнение приемного буфера
Definition: public.h:341
CAN_error_t::seg
unsigned char seg
Сегмент
Definition: public.h:550
CAN_status_t::ts
unsigned char ts
Состояние передачи
Definition: public.h:373
TEventData
Информация о причине установки события
Definition: public.h:252
CAN_status_t::rs
unsigned char rs
Состояние приёма
Definition: public.h:365
CAN_interrupt_t::bei
unsigned char bei
Прерывание при ошибке на шине (только для режима PeliCAN)
Definition: public.h:435
CAN_status_t::tcs
unsigned char tcs
Завершенность передачи
Definition: public.h:357
RX_TX_Buffer
Принятый/выдаваемый CAN кадр
Definition: public.h:206
CAN_command_t::trans
unsigned char trans
Запрос на передачу кадра из буфера передачи
Definition: public.h:455
TEventData::IntrID
UCHAR IntrID
Причина установки события
Definition: public.h:265
CAN_command_t::recv_bit_clear
unsigned char recv_bit_clear
Сброс признака переполнения буфера приема
Definition: public.h:474
RX_TX_Buffer::RTR
unsigned short RTR
Значение бита RTR (0 или 1)
Definition: public.h:231
CAN_interrupt_t::wui
unsigned char wui
Прерывание при выходе из состояния "сна" (только для режима PeliCAN)
Definition: public.h:423
TCAN_VPDData::wIRQ
USHORT wIRQ
Номер вектора прерывания
Definition: public.h:195
bFilter_t::Code
USHORT Code
Идентификатор входного фильтра
Definition: public.h:279
CAN_interrupt_t::ei
unsigned char ei
Прерывание по ошибкам на шине
Definition: public.h:415
CAN_status_t::rbs
unsigned char rbs
Состояние буфера приема
Definition: public.h:333
CAN_command_t::trans_stop
unsigned char trans_stop
Прервать передачу
Definition: public.h:462
CAN_arbitration_lost_capture_t
Структура определения точки потери арбитража.
Definition: public.h:581
TCAN_VPDData
Описание платы
Definition: public.h:176
CAN_status_t::es
unsigned char es
Наличие ошибок
Definition: public.h:381
CAN_arbitration_lost_capture_t::alc
unsigned char alc
Точка потери арбитража
Definition: public.h:652
CAN_interrupt_t::ali
unsigned char ali
Прерывание при проигрыше арбитража (только для режима PeliCAN)
Definition: public.h:431
RX_TX_Buffer::DLC
unsigned short DLC
Количество принятых/выдаваемых байт данных (0-8)
Definition: public.h:235
pFilter_t
Фильтр приема кадров для режима PeliCAN.
Definition: public.h:292
CAN_interrupt_t::epi
unsigned char epi
Переход в "error passive status" (только для режима PeliCAN)
Definition: public.h:427
CAN_status_t::bs
unsigned char bs
Состояние шины
Definition: public.h:389
RX_TX_Buffer::sID
unsigned short sID
Стандартный идентификатор
Definition: public.h:221
CAN_status_t
Структура описывающая статус платы
Definition: public.h:322
TEventData::rxtxbuf
RX_TX_Buffer rxtxbuf
Принятый кадр
Definition: public.h:259
CAN_error_t
Структура для кода ошибки.
Definition: public.h:495
bFilter_t
Фильтр приема кадров для режима BasicCAN.
Definition: public.h:274
CAN_error_t::dir
unsigned char dir
Направление
Definition: public.h:558
pFilter_t::Mode
USHORT Mode
Режим функционирования входного фильтра
Definition: public.h:309
CAN_command_t::sleep
unsigned char sleep
Переход в режим сна
Definition: public.h:480
CAN_command_t::recv_clear
unsigned char recv_clear
Освобождение буфера приема
Definition: public.h:468
CAN_interrupt_t::doi
unsigned char doi
Прерывание при переполнении буфера приема
Definition: public.h:419
CAN_interrupt_t::ri
unsigned char ri
Прерывание по приему кадра
Definition: public.h:407

CAN-200 documentation. Copyright (c) 2012 - 2017 Elcus Corporation. All rights reserved.