#ifndef GM_H_
#define GM_H_
#include "hal.h"
#define PLX_VENDOR_ID 0x10B5
#define GM_DEVICE_ID 0x6ACC
#define GM_SUBDEVICE_ID_1 0x3131
#define GM_SUBDEVICE_ID_2 0x6ACC
#define MAX_GM_DEVICES 3
#define RS485MODUL_ID_8INPUT 0x1
#define RS485MODUL_ID_8OUTPUT 0x2
#define RS485MODUL_ID_DACADC 0x3
#define RS485MODUL_ID_TEACHPAD 0x04
#define IDmask_card 0xF0000000
#define cardVersion1 0x10000000
#define IDmask_can 0x000F0000
#define canVersion1 0x00010000
#define IDmask_rs485 0x0000F000
#define rs485Version1 0x00001000
#define IDmask_dac 0x00000F00
#define dacVersion1 0x00000100
#define dacVersion2 0x00000200
#define IDmask_stepgen 0x000000F0
#define stepgenVersion1 0x00000010
#define IDmask_encoder 0x0000000F
#define encoderVersion1 0x00000001
#define notPresented 0x00000000
typedef struct {
hal_u32_t serialModulesDataOut[16][8]; hal_u32_t serialModulesDataIn[16][8];
hal_u32_t moduleId[8];
hal_u32_t card_status_reg; hal_u32_t cardID; hal_u32_t card_control_reg; hal_u32_t reserved_0; hal_u32_t gpio; hal_u32_t gpioDir; hal_u32_t StepGen_status; hal_u32_t PCI_clk_counter;
hal_u32_t ENC_control_reg; hal_u32_t CAN_status_reg;
hal_u32_t CAN_control_reg;
hal_u32_t DAC_0; hal_u32_t DAC_1; hal_u32_t DAC_2; hal_u32_t reserved_1[2];
hal_u32_t CAN_RX_buffer[4]; hal_u32_t CAN_TX_buffer[4];
hal_u32_t reserved_2[8];
hal_u32_t reserved_3[8];
hal_u32_t reserved_4[8];
hal_u32_t reserved_5[8];
hal_s32_t ENC_counter[6]; hal_u32_t reserved_6[2];
hal_s32_t ENC_period[6]; hal_u32_t reserved_7[2];
hal_s32_t ENC_index_latch[6]; hal_u32_t reserved_8[2];
hal_s32_t reserved_9[8];
hal_s32_t StepGen_steprate[6]; hal_u32_t reserved_10[2];
hal_u32_t StepGen_fb[6]; hal_u32_t reserved_11[2];
hal_u32_t StepGen_time_params[6]; hal_u32_t reserved_12[2];
hal_u32_t reserved_16[8];
} volatile card;
#endif