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;
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];
243 #pragma pack()
244 
245 #pragma pack(1)
246 
252 typedef struct
253 {
265  UCHAR IntrID;
267 #pragma pack()
268 
269 #pragma pack(1)
270 
274 typedef struct
275 {
279  USHORT Code;
283  USHORT Mask;
285 #pragma pack()
286 
287 #pragma pack(1)
288 
292 typedef struct
293 {
297  USHORT Filter[4];
301  USHORT Mask[4];
309  USHORT Mode;
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;
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;
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;
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;
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;
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__ */
unsigned char rsvd
Зарезервировано
Definition: public.h:656
Структура описывающая разрешение/запрет прерываний
Definition: public.h:400
unsigned short FF
Формат кадра
Definition: public.h:215
unsigned long extID
Расширенный идентификатор
Definition: public.h:227
unsigned char errc
Код ошибки
Definition: public.h:570
Структура описывающая команды выполняемые платой
Definition: public.h:446
USHORT Mask
Маска входного фильтра
Definition: public.h:283
#define NUM_CHANNEL
Количество каналов на плате
Definition: public.h:167
unsigned char tbs
Доступность буфера передачи
Definition: public.h:349
unsigned char rsvd
Зарезервированное поле
Definition: public.h:484
unsigned char ti
Прерывание после передачи кадра
Definition: public.h:411
unsigned char dos
Переполнение приемного буфера
Definition: public.h:341
unsigned char seg
Сегмент
Definition: public.h:550
unsigned char ts
Состояние передачи
Definition: public.h:373
Информация о причине установки события
Definition: public.h:252
unsigned char rs
Состояние приёма
Definition: public.h:365
unsigned char bei
Прерывание при ошибке на шине (только для режима PeliCAN)
Definition: public.h:435
unsigned char tcs
Завершенность передачи
Definition: public.h:357
Принятый/выдаваемый CAN кадр
Definition: public.h:206
unsigned char trans
Запрос на передачу кадра из буфера передачи
Definition: public.h:455
UCHAR IntrID
Причина установки события
Definition: public.h:265
unsigned char recv_bit_clear
Сброс признака переполнения буфера приема
Definition: public.h:474
unsigned short RTR
Значение бита RTR (0 или 1)
Definition: public.h:231
unsigned char wui
Прерывание при выходе из состояния "сна" (только для режима PeliCAN)
Definition: public.h:423
USHORT wIRQ
Номер вектора прерывания
Definition: public.h:195
USHORT Code
Идентификатор входного фильтра
Definition: public.h:279
unsigned char ei
Прерывание по ошибкам на шине
Definition: public.h:415
unsigned char rbs
Состояние буфера приема
Definition: public.h:333
unsigned char trans_stop
Прервать передачу
Definition: public.h:462
Структура определения точки потери арбитража.
Definition: public.h:581
Описание платы
Definition: public.h:176
unsigned char es
Наличие ошибок
Definition: public.h:381
unsigned char alc
Точка потери арбитража
Definition: public.h:652
unsigned char ali
Прерывание при проигрыше арбитража (только для режима PeliCAN)
Definition: public.h:431
unsigned short DLC
Количество принятых/выдаваемых байт данных (0-8)
Definition: public.h:235
Фильтр приема кадров для режима PeliCAN.
Definition: public.h:292
unsigned char epi
Переход в "error passive status" (только для режима PeliCAN)
Definition: public.h:427
unsigned char bs
Состояние шины
Definition: public.h:389
unsigned short sID
Стандартный идентификатор
Definition: public.h:221
Структура описывающая статус платы
Definition: public.h:322
RX_TX_Buffer rxtxbuf
Принятый кадр
Definition: public.h:259
Структура для кода ошибки.
Definition: public.h:495
Фильтр приема кадров для режима BasicCAN.
Definition: public.h:274
unsigned char dir
Направление
Definition: public.h:558
USHORT Mode
Режим функционирования входного фильтра
Definition: public.h:309
unsigned char sleep
Переход в режим сна
Definition: public.h:480
unsigned char recv_clear
Освобождение буфера приема
Definition: public.h:468
unsigned char doi
Прерывание при переполнении буфера приема
Definition: public.h:419
unsigned char ri
Прерывание по приему кадра
Definition: public.h:407

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