#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/functional.h>
#include <pybind11/native_enum.h>

#include "icsneo/device/chipid.h"

namespace icsneo {

void init_chipid(pybind11::module_& m) {
	pybind11::native_enum<ChipID>(m, "ChipID", "enum.IntEnum")
		.value("neoVIFIRE_MCHIP", ChipID::neoVIFIRE_MCHIP)
		.value("neoVIFIRE_LCHIP", ChipID::neoVIFIRE_LCHIP)
		.value("neoVIFIRE_UCHIP", ChipID::neoVIFIRE_UCHIP)
		.value("neoVIFIRE_JCHIP", ChipID::neoVIFIRE_JCHIP)
		.value("ValueCAN3_MCHIP", ChipID::ValueCAN3_MCHIP)
		.value("neoVIECU_MPIC", ChipID::neoVIECU_MPIC)
		.value("neoVIIEVB_MPIC", ChipID::neoVIIEVB_MPIC)
		.value("neoVIPENDANT_MPIC", ChipID::neoVIPENDANT_MPIC)
		.value("neoVIFIRE_VNET_MCHIP", ChipID::neoVIFIRE_VNET_MCHIP)
		.value("neoVIFIRE_VNET_LCHIP", ChipID::neoVIFIRE_VNET_LCHIP)
		.value("neoVIPLASMA_Core", ChipID::neoVIPLASMA_Core)
		.value("neoVIPLASMA_HID", ChipID::neoVIPLASMA_HID)
		.value("neoVIANALOG_MPIC", ChipID::neoVIANALOG_MPIC)
		.value("neoVIPLASMA_ANALOG_Core", ChipID::neoVIPLASMA_ANALOG_Core)
		.value("neoVIPLASMA_FlexRay_Core", ChipID::neoVIPLASMA_FlexRay_Core)
		.value("neoVIPLASMA_Core_1_12", ChipID::neoVIPLASMA_Core_1_12)
		.value("neoVIFIRE_Slave_VNET_MCHIP", ChipID::neoVIFIRE_Slave_VNET_MCHIP)
		.value("neoVIFIRE_Slave_VNET_LCHIP", ChipID::neoVIFIRE_Slave_VNET_LCHIP)
		.value("neoVIION_Core", ChipID::neoVIION_Core)
		.value("neoVIION_HID", ChipID::neoVIION_HID)
		.value("neoVIION_Core_Loader", ChipID::neoVIION_Core_Loader)
		.value("neoVIION_HID_Loader", ChipID::neoVIION_HID_Loader)
		.value("neoVIION_FPGA_BIT", ChipID::neoVIION_FPGA_BIT)
		.value("neoVIFIRE_VNET_EP_MCHIP", ChipID::neoVIFIRE_VNET_EP_MCHIP)
		.value("neoVIFIRE_VNET_EP_LCHIP", ChipID::neoVIFIRE_VNET_EP_LCHIP)
		.value("neoVIAnalogOut_MCHIP", ChipID::neoVIAnalogOut_MCHIP)
		.value("neoVIMOST25_MCHIP", ChipID::neoVIMOST25_MCHIP)
		.value("neoVIMOST50_MCHIP", ChipID::neoVIMOST50_MCHIP)
		.value("neoVIMOST150_MCHIP", ChipID::neoVIMOST150_MCHIP)
		.value("ValueCAN4_4_MCHIP", ChipID::ValueCAN4_4_MCHIP)
		.value("ValueCAN4_4_SCHIP", ChipID::ValueCAN4_4_SCHIP)
		.value("cmProbe_ZYNQ", ChipID::cmProbe_ZYNQ)
		.value("EEVB_STM32", ChipID::EEVB_STM32)
		.value("neoVIFIRE_Slave_VNET_EP_MCHIP", ChipID::neoVIFIRE_Slave_VNET_EP_MCHIP)
		.value("neoVIFIRE_Slave_VNET_EP_LCHIP", ChipID::neoVIFIRE_Slave_VNET_EP_LCHIP)
		.value("RADStar_MCHIP", ChipID::RADStar_MCHIP)
		.value("ValueCANrf_MCHIP", ChipID::ValueCANrf_MCHIP)
		.value("neoVIFIRE2_MCHIP", ChipID::neoVIFIRE2_MCHIP)
		.value("neoVIFIRE2_CCHIP", ChipID::neoVIFIRE2_CCHIP)
		.value("neoVIFIRE2_Core", ChipID::neoVIFIRE2_Core)
		.value("neoVIFIRE2_BLECHIP", ChipID::neoVIFIRE2_BLECHIP)
		.value("neoVIFIRE2_ZYNQ", ChipID::neoVIFIRE2_ZYNQ)
		.value("neoVIFIRE2_SECURITYCHIP", ChipID::neoVIFIRE2_SECURITYCHIP)
		.value("RADGalaxy_ZYNQ", ChipID::RADGalaxy_ZYNQ)
		.value("neoVIFIRE2_VNET_MCHIP", ChipID::neoVIFIRE2_VNET_MCHIP)
		.value("neoVIFIRE2_Slave_VNET_A_MCHIP", ChipID::neoVIFIRE2_Slave_VNET_A_MCHIP)
		.value("neoVIFIRE2_Slave_VNET_A_CCHIP", ChipID::neoVIFIRE2_Slave_VNET_A_CCHIP)
		.value("neoVIFIRE2_VNET_CCHIP", ChipID::neoVIFIRE2_VNET_CCHIP)
		.value("neoVIFIRE2_VNET_Core", ChipID::neoVIFIRE2_VNET_Core)
		.value("RADStar2_ZYNQ", ChipID::RADStar2_ZYNQ)
		.value("VividCAN_MCHIP", ChipID::VividCAN_MCHIP)
		.value("neoOBD2SIM_MCHIP", ChipID::neoOBD2SIM_MCHIP)
		.value("neoVIFIRE2_VNETZ_MCHIP", ChipID::neoVIFIRE2_VNETZ_MCHIP)
		.value("neoVIFIRE2_VNETZ_ZYNQ", ChipID::neoVIFIRE2_VNETZ_ZYNQ)
		.value("neoVIFIRE2_Slave_VNETZ_A_MCHIP", ChipID::neoVIFIRE2_Slave_VNETZ_A_MCHIP)
		.value("neoVIFIRE2_Slave_VNETZ_A_ZYNQ", ChipID::neoVIFIRE2_Slave_VNETZ_A_ZYNQ)
		.value("VividCAN_EXT_FLASH", ChipID::VividCAN_EXT_FLASH)
		.value("VividCAN_NRF52", ChipID::VividCAN_NRF52)
		.value("cmProbe_ZYNQ_Unused", ChipID::cmProbe_ZYNQ_Unused)
		.value("neoOBD2PRO_MCHIP", ChipID::neoOBD2PRO_MCHIP)
		.value("ValueCAN4_1_MCHIP", ChipID::ValueCAN4_1_MCHIP)
		.value("ValueCAN4_2_MCHIP", ChipID::ValueCAN4_2_MCHIP)
		.value("ValueCAN4_4_2EL_Core", ChipID::ValueCAN4_4_2EL_Core)
		.value("neoOBD2PRO_SCHIP", ChipID::neoOBD2PRO_SCHIP)
		.value("ValueCAN4_2EL_MCHIP", ChipID::ValueCAN4_2EL_MCHIP)
		.value("neoECUAVBTSN_MCHIP", ChipID::neoECUAVBTSN_MCHIP)
		.value("neoOBD2PRO_Core", ChipID::neoOBD2PRO_Core)
		.value("RADSupermoon_ZYNQ", ChipID::RADSupermoon_ZYNQ)
		.value("RADMoon2_ZYNQ", ChipID::RADMoon2_ZYNQ)
		.value("VividCANPRO_MCHIP", ChipID::VividCANPRO_MCHIP)
		.value("VividCANPRO_EXT_FLASH", ChipID::VividCANPRO_EXT_FLASH)
		.value("RADPluto_MCHIP", ChipID::RADPluto_MCHIP)
		.value("RADMars_ZYNQ", ChipID::RADMars_ZYNQ)
		.value("neoECU12_MCHIP", ChipID::neoECU12_MCHIP)
		.value("RADIOCANHUB_MCHIP", ChipID::RADIOCANHUB_MCHIP)
		.value("FlexRay_VNETZ_ZCHIP", ChipID::FlexRay_VNETZ_ZCHIP)
		.value("neoOBD2_LCBADGE_MCHIP", ChipID::neoOBD2_LCBADGE_MCHIP)
		.value("neoOBD2_LCBADGE_SCHIP", ChipID::neoOBD2_LCBADGE_SCHIP)
		.value("RADMoonDuo_MCHIP", ChipID::RADMoonDuo_MCHIP)
		.value("neoVIFIRE3_ZCHIP", ChipID::neoVIFIRE3_ZCHIP)
		.value("FlexRay_VNETZ_FCHIP", ChipID::FlexRay_VNETZ_FCHIP)
		.value("RADJupiter_MCHIP", ChipID::RADJupiter_MCHIP)
		.value("ValueCAN4Industrial_MCHIP", ChipID::ValueCAN4Industrial_MCHIP)
		.value("EtherBADGE_MCHIP", ChipID::EtherBADGE_MCHIP)
		.value("RADMars_3_ZYNQ", ChipID::RADMars_3_ZYNQ)
		.value("RADGigastar_USBZ_ZYNQ", ChipID::RADGigastar_USBZ_ZYNQ)
		.value("RADGigastar_ZYNQ", ChipID::RADGigastar_ZYNQ)
		.value("RAD4G_MCHIP", ChipID::RAD4G_MCHIP)
		.value("neoVIFIRE3_SCHIP", ChipID::neoVIFIRE3_SCHIP)
		.value("RADEpsilon_MCHIP", ChipID::RADEpsilon_MCHIP)
		.value("RADA2B_ZCHIP", ChipID::RADA2B_ZCHIP)
		.value("neoOBD2Dev_MCHIP", ChipID::neoOBD2Dev_MCHIP)
		.value("neoOBD2Dev_SCHIP", ChipID::neoOBD2Dev_SCHIP)
		.value("neoOBD2SIMDoIP_MCHIP", ChipID::neoOBD2SIMDoIP_MCHIP)
		.value("SFPModule_88q2112_MCHIP", ChipID::SFPModule_88q2112_MCHIP)
		.value("RADEpsilonT_MCHIP", ChipID::RADEpsilonT_MCHIP)
		.value("RADEpsilonExpress_MCHIP", ChipID::RADEpsilonExpress_MCHIP)
		.value("RADProxima_MCHIP", ChipID::RADProxima_MCHIP)
		.value("NewDevice57_ZCHIP", ChipID::NewDevice57_ZCHIP)
		.value("RAD_GALAXY_2_ZMPCHIP_ID", ChipID::RAD_GALAXY_2_ZMPCHIP_ID)
		.value("NewDevice59_MCHIP", ChipID::NewDevice59_MCHIP)
		.value("RADMoon2_Z7010_ZYNQ", ChipID::RADMoon2_Z7010_ZYNQ)
		.value("neoVIFIRE2_Core_SG4", ChipID::neoVIFIRE2_Core_SG4)
		.value("RADBMS_MCHIP", ChipID::RADBMS_MCHIP)
		.value("RADMoon2_ZL_MCHIP", ChipID::RADMoon2_ZL_MCHIP)
		.value("RADGigastar_USBZ_Z7010_ZYNQ", ChipID::RADGigastar_USBZ_Z7010_ZYNQ)
		.value("neoVIFIRE3_LINUX", ChipID::neoVIFIRE3_LINUX)
		.value("RADGigastar_USBZ_Z7007S_ZYNQ", ChipID::RADGigastar_USBZ_Z7007S_ZYNQ)
		.value("VEM_01_8DW_ZCHIP", ChipID::VEM_01_8DW_ZCHIP)
		.value("RADGalaxy_FFG_Zynq", ChipID::RADGalaxy_FFG_Zynq)
		.value("RADMoon3_MCHIP", ChipID::RADMoon3_MCHIP)
		.value("RADComet2_ZYNQ", ChipID::RADComet2_ZYNQ)
		.value("VEM_02_FR_ZCHIP", ChipID::VEM_02_FR_ZCHIP)
		.value("RADA2B_REVB_ZCHIP", ChipID::RADA2B_REVB_ZCHIP)
		.value("RADGigastar_FFG_ZYNQ", ChipID::RADGigastar_FFG_ZYNQ)
		.value("VEM_02_FR_FCHIP", ChipID::VEM_02_FR_FCHIP)
		.value("Connect_ZCHIP", ChipID::Connect_ZCHIP)
		.value("SFPModule_88q2221_MCHIP", ChipID::SFPModule_88q2221_MCHIP)
		.value("RADGALAXY2_SYSMON_CHIP", ChipID::RADGALAXY2_SYSMON_CHIP)
		.value("SFPModule_88q3244_MCHIP", ChipID::SFPModule_88q3244_MCHIP)
		.value("RADCOMET3_ZCHIP", ChipID::RADCOMET3_ZCHIP)
		.value("Connect_LINUX", ChipID::Connect_LINUX)
		.value("SFPModule_lan8670_MCHIP", ChipID::SFPModule_lan8670_MCHIP)
		.value("RADGigastar2_ZYNQ", ChipID::RADGigastar2_ZYNQ)
		.value("SFPModule_ent11100_MCHIP", ChipID::SFPModule_ent11100_MCHIP)
		.value("RADGemini_MCHIP", ChipID::RADGemini_MCHIP)
		.value("Invalid", ChipID::Invalid)
		.finalize();
}

} // namespace icsneo
