someip-py 1.0.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- someip_py/__init__.py +5 -0
- someip_py/client.py +475 -0
- someip_py/codec.py +1243 -0
- someip_py/config.py +353 -0
- someip_py/constants.py +60 -0
- someip_py/frame.py +1003 -0
- someip_py/interface.py +975 -0
- someip_py/scapy_extention.py +557 -0
- someip_py/secure_upload.py +66 -0
- someip_py/server.py +699 -0
- someip_py/service_interface/V2x/ADAVPOperService/ADAVPOper.py +62 -0
- someip_py/service_interface/V2x/ADAVPOperService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ADParkingInfoPB.py +53 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVP3DMapInf.py +291 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPCollectedDestinationCmdInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPMapButtonCmdInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPMapGenerateStatusInf.py +39 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPMapInf.py +265 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPMapListInfoInf.py +136 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPMapManageCmdInf.py +149 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AVPPopupInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AbsoluteLocalizationInf.py +63 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ActionableAreaInf.py +41 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AdasMileageInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AlarmInfoInf.py +63 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AlignedSpeedSettingInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ApaParkingStatusInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ApaSlelectedSlotParkingmodeInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AutoNaviSearchInf.py +72 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AvoidJamAreaInf.py +86 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AvpEgoPositionInMapInf.py +55 -0
- someip_py/service_interface/V2x/ADCU_HmiService/AvpTfRelToMapInf.py +43 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CalibSensorGroupStateInf.py +27 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CalibStateAckInf.py +39 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CancelSaveInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ClearFaultInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CommutingRouteSelectionReqInf.py +52 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CommutingRouteSelectionRspInf.py +43 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CommutingRoutesInfoInf.py +135 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CurrentRoadSpeedInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CustomParkingInf.py +54 -0
- someip_py/service_interface/V2x/ADCU_HmiService/CustomerInf.py +66 -0
- someip_py/service_interface/V2x/ADCU_HmiService/D2DRouteEndSwitchInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/DHUInquireIssueLogInf.py +32 -0
- someip_py/service_interface/V2x/ADCU_HmiService/DLPSceneInf.py +31 -0
- someip_py/service_interface/V2x/ADCU_HmiService/EgoCarPositionCityInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/EstablishSomeIPConnectionInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/FaultListInfoInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/FavoriteRouteInfoUpdateInf.py +44 -0
- someip_py/service_interface/V2x/ADCU_HmiService/FeatureStateInf.py +383 -0
- someip_py/service_interface/V2x/ADCU_HmiService/FeatureStateInf2.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/GNSSMsgInf.py +71 -0
- someip_py/service_interface/V2x/ADCU_HmiService/GuidanceStatusUpdateInf.py +60 -0
- someip_py/service_interface/V2x/ADCU_HmiService/HighDefinitionMapInf.py +179 -0
- someip_py/service_interface/V2x/ADCU_HmiService/IntegAdpuConfigInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/LaneFunction.py +52 -0
- someip_py/service_interface/V2x/ADCU_HmiService/LineInfoInf.py +82 -0
- someip_py/service_interface/V2x/ADCU_HmiService/MemoryRouteControlInf.py +27 -0
- someip_py/service_interface/V2x/ADCU_HmiService/MemoryRouteStatusInf.py +43 -0
- someip_py/service_interface/V2x/ADCU_HmiService/MrNaviRouteInf.py +82 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavExitTriggerInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NaviGreenWaveCarSpeedInf.py +44 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationDistreqInf.py +57 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationInfoInf.py +260 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationLineInf.py +45 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationRouteInf.py +389 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationStsInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavigationTargetInf.py +57 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NavilntervalCameraDynamicInf.py +45 -0
- someip_py/service_interface/V2x/ADCU_HmiService/NzpStateTriggerInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/OnlineCalibTriggerInf.py +32 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PDCWarningInfoInf.py +97 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ParkingAPAInf.py +28 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ParkingInteractiveInf.py +27 -0
- someip_py/service_interface/V2x/ADCU_HmiService/ParkingInteractiveStatusInf.py +36 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PathDirectionArrowInf.py +36 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PebSwitchSettingInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PercepFusionObjsInf.py +79 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PercepTrafficLightsInf.py +73 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PerceptionAPASlotsInf.py +73 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PlanningTrajectoryInf.py +53 -0
- someip_py/service_interface/V2x/ADCU_HmiService/PoiInfoInf.py +122 -0
- someip_py/service_interface/V2x/ADCU_HmiService/RelativeLocalizationInf.py +51 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SDMapElectronicEyeInf.py +141 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SDMapLinkRoadInfo.py +36 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SelectedSlotIdInf.py +27 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingACPEInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingADASInfoInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingAEBInfoInf.py +35 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingAESInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingAPAInfoInf.py +35 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingAWWInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingBSDInfoInf.py +27 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingCMSRInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingCheckInf.py +277 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingCheckReq.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingDOWInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingDrivingInfoInf.py +79 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingEMAInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingFCTAInfoInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingFVSWInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingInitializationInf.py +300 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingLKAInfoInf.py +39 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingLPInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingRCTAInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingRMFInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingRPAInfoInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingSGWInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingSRVInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingTLAInfoInf.py +23 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingTSIInfoInf.py +39 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SettingVoiceWarningInfoInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/SpeedLimitTriggerInf.py +19 -0
- someip_py/service_interface/V2x/ADCU_HmiService/TLAMainActionInf.py +102 -0
- someip_py/service_interface/V2x/ADCU_HmiService/TrafficLightStatusInf.py +66 -0
- someip_py/service_interface/V2x/ADCU_HmiService/TrafficRedWarningInf.py +36 -0
- someip_py/service_interface/V2x/ADCU_HmiService/VehicleRegionInf.py +10 -0
- someip_py/service_interface/V2x/ADCU_HmiService/VoiceCommandsInf.py +32 -0
- someip_py/service_interface/V2x/ADCU_HmiService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADCU_HmiService/base.py +10 -0
- someip_py/service_interface/V2x/ADDrivingService/ADConfirmAndResume.py +19 -0
- someip_py/service_interface/V2x/ADDrivingService/ADFunctionReq.py +19 -0
- someip_py/service_interface/V2x/ADDrivingService/ADSetSpeed.py +36 -0
- someip_py/service_interface/V2x/ADDrivingService/ADTiGapAdj.py +36 -0
- someip_py/service_interface/V2x/ADDrivingService/AsyALatIndcr.py +10 -0
- someip_py/service_interface/V2x/ADDrivingService/AsyALgtIndcr.py +10 -0
- someip_py/service_interface/V2x/ADDrivingService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADHighDefinitionMapService/ADHDMapSts.py +53 -0
- someip_py/service_interface/V2x/ADHighDefinitionMapService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADLocationService/ADLocationSts.py +53 -0
- someip_py/service_interface/V2x/ADLocationService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADNZPUbStsService/ADNZPUbSts.py +53 -0
- someip_py/service_interface/V2x/ADNZPUbStsService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADPerceptionService/ADPerceptionSts.py +53 -0
- someip_py/service_interface/V2x/ADPerceptionService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADPlanningService/ADPlanningInf.py +53 -0
- someip_py/service_interface/V2x/ADPlanningService/__init__.py +0 -0
- someip_py/service_interface/V2x/ADStateService/DrivingFeatureState.py +53 -0
- someip_py/service_interface/V2x/ADStateService/__init__.py +0 -0
- someip_py/service_interface/V2x/CamIntrinsicsService/CameraIntInf.py +62 -0
- someip_py/service_interface/V2x/CamIntrinsicsService/__init__.py +0 -0
- someip_py/service_interface/V2x/DMSInfoService/DMSInfo.py +53 -0
- someip_py/service_interface/V2x/DMSInfoService/__init__.py +0 -0
- someip_py/service_interface/V2x/ZID_Model_Service/ZidForbidInf.py +33 -0
- someip_py/service_interface/V2x/ZID_Model_Service/__init__.py +0 -0
- someip_py/service_interface/V2x/__init__.py +0 -0
- someip_py/service_interface/V30/ADASMapService/HznData.py +69 -0
- someip_py/service_interface/V30/ADASMapService/HznEdge.py +85 -0
- someip_py/service_interface/V30/ADASMapService/HznPosn.py +61 -0
- someip_py/service_interface/V30/ADASMapService/HznPosnLR.py +61 -0
- someip_py/service_interface/V30/ADASMapService/HznProfLong.py +53 -0
- someip_py/service_interface/V30/ADASMapService/HznProfLongLR.py +53 -0
- someip_py/service_interface/V30/ADASMapService/HznProfSho.py +65 -0
- someip_py/service_interface/V30/ADASMapService/HznSeg.py +93 -0
- someip_py/service_interface/V30/ADASMapService/HznSts.py +10 -0
- someip_py/service_interface/V30/ADASMapService/__init__.py +0 -0
- someip_py/service_interface/V30/ADAVPOperService/ADAVPOper.py +65 -0
- someip_py/service_interface/V30/ADAVPOperService/__init__.py +0 -0
- someip_py/service_interface/V30/ADAVPStsService/ADAVPSts.py +56 -0
- someip_py/service_interface/V30/ADAVPStsService/__init__.py +0 -0
- someip_py/service_interface/V30/ADAlertService/ADAlertAlarmInfoInfSts.py +40 -0
- someip_py/service_interface/V30/ADAlertService/ADAlertFaultListInfoSts.py +25 -0
- someip_py/service_interface/V30/ADAlertService/ClearFaultInf.py +10 -0
- someip_py/service_interface/V30/ADAlertService/__init__.py +0 -0
- someip_py/service_interface/V30/ADHighDefinitionMapService/ADHDMapSts.py +56 -0
- someip_py/service_interface/V30/ADHighDefinitionMapService/__init__.py +0 -0
- someip_py/service_interface/V30/ADLocationService/ADLocationSts.py +56 -0
- someip_py/service_interface/V30/ADLocationService/__init__.py +0 -0
- someip_py/service_interface/V30/ADNZPUbOperService/ADNZPUbOper.py +65 -0
- someip_py/service_interface/V30/ADNZPUbOperService/__init__.py +0 -0
- someip_py/service_interface/V30/ADNZPUbStsService/ADNZPUbSts.py +56 -0
- someip_py/service_interface/V30/ADNZPUbStsService/__init__.py +0 -0
- someip_py/service_interface/V30/ADPerceptionService/ADPerceptionSts.py +56 -0
- someip_py/service_interface/V30/ADPerceptionService/__init__.py +0 -0
- someip_py/service_interface/V30/ADPlanningService/ADPlanningInf.py +56 -0
- someip_py/service_interface/V30/ADPlanningService/__init__.py +0 -0
- someip_py/service_interface/V30/ADSDMapNavigationService/ADSDMapNavigationSts.py +56 -0
- someip_py/service_interface/V30/ADSDMapNavigationService/__init__.py +0 -0
- someip_py/service_interface/V30/ADScenePerceiveService/ScenePerceiveNotify.py +39 -0
- someip_py/service_interface/V30/ADScenePerceiveService/__init__.py +0 -0
- someip_py/service_interface/V30/ADStateService/ADSTSCalibSensorGroupState.py +56 -0
- someip_py/service_interface/V30/ADStateService/ADSTSCalibStateAckInf.py +56 -0
- someip_py/service_interface/V30/ADStateService/ADSTSFeatureStatus.py +56 -0
- someip_py/service_interface/V30/ADStateService/ADSTSIntegAdpuConfig.py +56 -0
- someip_py/service_interface/V30/ADStateService/ADSTSOnlineCalibInf.py +56 -0
- someip_py/service_interface/V30/ADStateService/CalibSensorGroupState.py +29 -0
- someip_py/service_interface/V30/ADStateService/__init__.py +0 -0
- someip_py/service_interface/V30/ADUserOperationService/ADUOCollectAndUpload.py +34 -0
- someip_py/service_interface/V30/ADUserOperationService/ADUOCustomParkingInf.py +57 -0
- someip_py/service_interface/V30/ADUserOperationService/ADUOOnlineCalibTriggerInf.py +34 -0
- someip_py/service_interface/V30/ADUserOperationService/ADUOSelectedSlotIdInf.py +19 -0
- someip_py/service_interface/V30/ADUserOperationService/ADUOSlelectedSlotParkingmodeInf.py +19 -0
- someip_py/service_interface/V30/ADUserOperationService/__init__.py +0 -0
- someip_py/service_interface/V30/ADUserSettingService/ADUserSettingSts.py +25 -0
- someip_py/service_interface/V30/ADUserSettingService/GetAllParameters.py +25 -0
- someip_py/service_interface/V30/ADUserSettingService/GetIntParameters.py +34 -0
- someip_py/service_interface/V30/ADUserSettingService/__init__.py +0 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/CarConfigurationChangeEvent.py +25 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/InstallCarconfig.py +10 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/PrecheckCarconfig.py +10 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/RollbackCarconfig.py +10 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/SwitchCarconfig.py +10 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getAllParameters.py +25 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getAllofNodes.py +25 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getIntParameter.py +19 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getIntParameters.py +34 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getListofNodes.py +34 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getOneofNode.py +19 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getPartNumber.py +12 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/getVin.py +10 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/setIntParameter.py +19 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/setIntParameters.py +34 -0
- someip_py/service_interface/V30/CarConfigurationManagerService/updateCarconfig.py +10 -0
- someip_py/service_interface/V30/ConnectedService/CurrentWeatherInfo.py +53 -0
- someip_py/service_interface/V30/ConnectedService/RequiredWeatherInfo.py +68 -0
- someip_py/service_interface/V30/ConnectedService/WeatherInforQueryReq.py +38 -0
- someip_py/service_interface/V30/DistributeFotaService/AbortDownload.py +43 -0
- someip_py/service_interface/V30/DistributeFotaService/AbortInstallation.py +43 -0
- someip_py/service_interface/V30/DistributeFotaService/GetAssignmentStatus.py +80 -0
- someip_py/service_interface/V30/DistributeFotaService/PauseDownload.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/PrecheckSwitch.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/ResumeDownload.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/Rollback.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/StartDecryption.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/StartDownload.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/StartInstallation.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/StartSensibleInstallation.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/StartSwitch.py +34 -0
- someip_py/service_interface/V30/DistributeFotaService/TransferAssignmentInfo.py +112 -0
- someip_py/service_interface/V30/DriverMonitorService/CamFltsStsToADCU.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrDistSwitchSts.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrDistSwitchsetting.py +19 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrFatiLvl.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrMonrAlarmSts.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrPerformanceAlarmSts.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrPfmncSwitchSts.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/DrvrPfmncSwitchsetting.py +19 -0
- someip_py/service_interface/V30/DriverMonitorService/EyeGazeRegion.py +25 -0
- someip_py/service_interface/V30/DriverMonitorService/EyeOnRoad.py +10 -0
- someip_py/service_interface/V30/DriverMonitorService/EyeOpenSts.py +25 -0
- someip_py/service_interface/V30/DriverMonitorService/EyePosnValidSig.py +29 -0
- someip_py/service_interface/V30/DriverMonitorService/SnsrDrvrPerformanceSts.py +10 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/AutoCardSwitchSts.py +10 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/CardSwitchStsCode.py +10 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/ConnectionStatus.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/DataConnectionStatus.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/HiSpeedFun.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/ICCIDInfo.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/IMEIInfo.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/IMSIInfo.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/IPAddress.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/MSISDNInfo.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/MainCardSts.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/MainCardSwitchReq.py +19 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/NetworkAvailable.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/OperatorStatus.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/SignalLevel.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/SignalLevelEvent.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/SignalStrength.py +25 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/SimCardSts.py +10 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/SimCardStsEvent.py +10 -0
- someip_py/service_interface/V30/ESIMConnectionStatus/TrafficData.py +29 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/CfigRuleLocalUpdate.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/DeviceRegisterLocal.py +55 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/FlowLocalUpload.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/FwRuleLocalUpdate.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/HealthLocalUpload.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/QSEvLocalUpLoad.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/RuleLocalUpdate.py +19 -0
- someip_py/service_interface/V30/IDPSProcessLocalService/VerifyIdentity.py +38 -0
- someip_py/service_interface/V30/IDPSVehicleRegisterLocalService/IDPSVehicleRegisterLocalSts.py +10 -0
- someip_py/service_interface/V30/NavigationService/ChrgStationPwr.py +10 -0
- someip_py/service_interface/V30/NavigationService/DistanceToDestination.py +10 -0
- someip_py/service_interface/V30/NavigationService/EstimdLeftSOCToDestination.py +10 -0
- someip_py/service_interface/V30/NavigationService/NaviActiveSts.py +10 -0
- someip_py/service_interface/V30/NavigationService/PositionOfDestinationInfo.py +29 -0
- someip_py/service_interface/V30/NavigationService/TLAMainActionInf.py +33 -0
- someip_py/service_interface/V30/NavigationService/TimeToDestination.py +29 -0
- someip_py/service_interface/V30/NavigationService/TotalRoadGroupInfo.py +37 -0
- someip_py/service_interface/V30/NavigationService/TrafficLightStatus.py +33 -0
- someip_py/service_interface/V30/NavigationService/TypeToDestination.py +10 -0
- someip_py/service_interface/V30/NavigationService/VehicleRegion.py +10 -0
- someip_py/service_interface/V30/NightVisionModeUXCService/NightVisionSnsrSts.py +10 -0
- someip_py/service_interface/V30/PerceptionObjectService/CameraSts.py +10 -0
- someip_py/service_interface/V30/PerceptionObjectService/HostVehInLitArea.py +10 -0
- someip_py/service_interface/V30/PerceptionObjectService/NearestVehObj.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/TooManyCars.py +10 -0
- someip_py/service_interface/V30/PerceptionObjectService/TrafficSign1.py +49 -0
- someip_py/service_interface/V30/PerceptionObjectService/TrafficSign2.py +49 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj1.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj2.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj3.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj4.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj5.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj6.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj7.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VRUObj8.py +45 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj1.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj2.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj3.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj4.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj5.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj6.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj7.py +61 -0
- someip_py/service_interface/V30/PerceptionObjectService/VehObj8.py +61 -0
- someip_py/service_interface/V30/VehicleModeManagementService/CarModeState.py +10 -0
- someip_py/service_interface/V30/VehicleModeManagementService/CarModeSubtype.py +10 -0
- someip_py/service_interface/V30/VehicleModeManagementService/EnergyLevelElectric.py +25 -0
- someip_py/service_interface/V30/VehicleModeManagementService/PowerLevelElectric.py +25 -0
- someip_py/service_interface/V30/VehicleModeManagementService/PowerModeState.py +10 -0
- someip_py/service_interface/V30/WIFIAvailabilityService/AvailabilityStatus.py +10 -0
- someip_py/service_interface/V30/__init__.py +0 -0
- someip_py/service_interface/__init__.py +0 -0
- someip_py/service_interface/config.json +3412 -0
- someip_py/service_interface/fields.json +70 -0
- someip_py/service_interface/pb/Adcu/ADAVPOperService_pb2.py +59 -0
- someip_py/service_interface/pb/Adcu/ADAVPStsService_pb2.py +109 -0
- someip_py/service_interface/pb/Adcu/ADHighDefinitionMapService_pb2.py +45 -0
- someip_py/service_interface/pb/Adcu/ADLocationService_pb2.py +47 -0
- someip_py/service_interface/pb/Adcu/ADNZPUbOperService_pb2.py +101 -0
- someip_py/service_interface/pb/Adcu/ADNZPUbStsService_pb2.py +85 -0
- someip_py/service_interface/pb/Adcu/ADPerceptionService_pb2.py +61 -0
- someip_py/service_interface/pb/Adcu/ADPlanningInfoService_pb2.py +41 -0
- someip_py/service_interface/pb/Adcu/ADSDMapNavigationService_pb2.py +115 -0
- someip_py/service_interface/pb/Adcu/ADStateService_pb2.py +79 -0
- someip_py/service_interface/pb/Adcu/DMSInfoService_pb2.py +41 -0
- someip_py/service_interface/protoc/linux/bin/protoc +0 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/any.proto +158 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/api.proto +208 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/compiler/plugin.proto +183 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/descriptor.proto +911 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/duration.proto +116 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/empty.proto +52 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/field_mask.proto +245 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/source_context.proto +48 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/struct.proto +95 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/timestamp.proto +147 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/type.proto +187 -0
- someip_py/service_interface/protoc/linux/include/google/protobuf/wrappers.proto +123 -0
- someip_py/service_interface/protoc/windows/bin/protoc.exe +0 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/any.proto +161 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/api.proto +207 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/compiler/plugin.proto +180 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/descriptor.proto +1028 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/duration.proto +115 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/empty.proto +51 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/field_mask.proto +245 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/source_context.proto +48 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/struct.proto +95 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/timestamp.proto +144 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/type.proto +193 -0
- someip_py/service_interface/protoc/windows/include/google/protobuf/wrappers.proto +123 -0
- someip_py/utils.py +155 -0
- someip_py-1.0.0.dist-info/METADATA +38 -0
- someip_py-1.0.0.dist-info/RECORD +358 -0
- someip_py-1.0.0.dist-info/WHEEL +6 -0
- someip_py-1.0.0.dist-info/entry_points.txt +2 -0
- someip_py-1.0.0.dist-info/top_level.txt +1 -0
someip_py/__init__.py
ADDED
someip_py/client.py
ADDED
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
import copy
|
|
2
|
+
import ipaddress
|
|
3
|
+
import select
|
|
4
|
+
import socket
|
|
5
|
+
import struct
|
|
6
|
+
import threading
|
|
7
|
+
import time
|
|
8
|
+
from enum import IntEnum
|
|
9
|
+
from logging import getLogger
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
from .config import Eventgroup, SDService
|
|
13
|
+
from .constants import A_PROCESSING_TIME, FIND_TTL, MULTICAST_ADDRESS, MULTICAST_PORT
|
|
14
|
+
from .frame import SOMEIPFrame, SOMEIPMessageType, SOMEIPReturnCode, SOMEIPSDFrame
|
|
15
|
+
|
|
16
|
+
logger = getLogger(name="someip.client")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SOMEIPClient:
|
|
20
|
+
"""SOME/IP client."""
|
|
21
|
+
|
|
22
|
+
class TransportType(IntEnum):
|
|
23
|
+
TCP = socket.IPPROTO_TCP
|
|
24
|
+
UDP = socket.IPPROTO_UDP
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
target_address: str = "198.99.36.3",
|
|
29
|
+
target_port: Optional[int] = None,
|
|
30
|
+
local_bind_address: str = "",
|
|
31
|
+
mcast_address: str = MULTICAST_ADDRESS,
|
|
32
|
+
mcast_port: int = MULTICAST_PORT,
|
|
33
|
+
transport_type: TransportType = TransportType.TCP,
|
|
34
|
+
):
|
|
35
|
+
"""Init SOME/IP client.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
target_address (str): remote SOME/IP service address.
|
|
39
|
+
target_port (int): remote SOME/IP service port.
|
|
40
|
+
local_bind_address (str): local address that communicate to SOME/IP service.
|
|
41
|
+
mcast_address (str): multicast dst ip address.
|
|
42
|
+
mcast_port (int): multicast port.
|
|
43
|
+
transport_type (SOMEIPClient.TransportType): Transport protocol.
|
|
44
|
+
"""
|
|
45
|
+
self._target_address = target_address
|
|
46
|
+
self._target_port = target_port
|
|
47
|
+
self._local_bind_address = local_bind_address
|
|
48
|
+
self._mcast_address = mcast_address
|
|
49
|
+
self._mcast_port = mcast_port
|
|
50
|
+
self._address_family = socket.AF_INET
|
|
51
|
+
if self._target_address and isinstance(
|
|
52
|
+
ipaddress.ip_address(self._target_address), ipaddress.IPv6Address
|
|
53
|
+
):
|
|
54
|
+
self._address_family = socket.AF_INET6
|
|
55
|
+
|
|
56
|
+
self._transport_type = transport_type
|
|
57
|
+
self._mcast_udp_sock = None
|
|
58
|
+
self._unicast_udp_sock = self._create_unicast_udp_sock(
|
|
59
|
+
bind_port=self._mcast_port
|
|
60
|
+
)
|
|
61
|
+
self._sock = None
|
|
62
|
+
self._session_counter = 0x0001
|
|
63
|
+
self._subscribe_receiver = {}
|
|
64
|
+
self._connect()
|
|
65
|
+
|
|
66
|
+
def _connect(self):
|
|
67
|
+
"""start to establish socket communication"""
|
|
68
|
+
if self._transport_type == SOMEIPClient.TransportType.TCP:
|
|
69
|
+
self._sock = self._create_tcp_sock()
|
|
70
|
+
elif self._transport_type == SOMEIPClient.TransportType.UDP:
|
|
71
|
+
self._sock = self._create_unicast_udp_sock()
|
|
72
|
+
|
|
73
|
+
def _create_tcp_sock(self):
|
|
74
|
+
sock = socket.socket(self._address_family, socket.SOCK_STREAM)
|
|
75
|
+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
76
|
+
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
77
|
+
sock.settimeout(A_PROCESSING_TIME)
|
|
78
|
+
try:
|
|
79
|
+
sock.connect((self._target_address, self._target_port))
|
|
80
|
+
except socket.timeout as e:
|
|
81
|
+
sock.close()
|
|
82
|
+
sock = None
|
|
83
|
+
raise socket.timeout(e)
|
|
84
|
+
return sock
|
|
85
|
+
|
|
86
|
+
def _create_unicast_udp_sock(self, bind_port=0):
|
|
87
|
+
sock = socket.socket(self._address_family, socket.SOCK_DGRAM)
|
|
88
|
+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
89
|
+
sock.settimeout(A_PROCESSING_TIME)
|
|
90
|
+
sock.bind((self._local_bind_address, bind_port))
|
|
91
|
+
return sock
|
|
92
|
+
|
|
93
|
+
def _create_multicast_udp_sock(self):
|
|
94
|
+
self._mcast_udp_sock = socket.socket(self._address_family, socket.SOCK_DGRAM)
|
|
95
|
+
self._mcast_udp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
96
|
+
self._mcast_udp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
97
|
+
self._mcast_udp_sock.settimeout(A_PROCESSING_TIME)
|
|
98
|
+
self._mcast_udp_sock.bind((self._mcast_address, self._mcast_port))
|
|
99
|
+
mreq = struct.pack(
|
|
100
|
+
"4s4s",
|
|
101
|
+
socket.inet_aton(self._mcast_address),
|
|
102
|
+
socket.inet_aton(self._local_bind_address),
|
|
103
|
+
)
|
|
104
|
+
self._mcast_udp_sock.setsockopt(
|
|
105
|
+
socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
def find_service(
|
|
109
|
+
self,
|
|
110
|
+
service_id,
|
|
111
|
+
instance_id,
|
|
112
|
+
major_version=1,
|
|
113
|
+
minor_version=0,
|
|
114
|
+
ttl=FIND_TTL,
|
|
115
|
+
timeout=1.0,
|
|
116
|
+
) -> SOMEIPSDFrame:
|
|
117
|
+
"""Create a SD FindService entry for this service.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
service_id (int): service id of the entry.
|
|
121
|
+
instance_id (int): instance id of the entry, If it is set to 0xFFFF,
|
|
122
|
+
it means all service instances of a service.
|
|
123
|
+
major_version (int): The major version of the service instance this event group belongs to.
|
|
124
|
+
minor_version (int): The mino version of the service instance this event group belongs to.
|
|
125
|
+
ttl (int): describe the life cycle of this Entry in seconds.
|
|
126
|
+
timeout (float): socket receive timeout.
|
|
127
|
+
"""
|
|
128
|
+
self._create_multicast_udp_sock()
|
|
129
|
+
frame = SOMEIPSDFrame(
|
|
130
|
+
session_id=self._session_counter,
|
|
131
|
+
entries=[
|
|
132
|
+
SDService(
|
|
133
|
+
service_id,
|
|
134
|
+
instance_id=instance_id,
|
|
135
|
+
major_version=major_version,
|
|
136
|
+
minor_version=minor_version,
|
|
137
|
+
).create_find_entry(ttl=ttl)
|
|
138
|
+
],
|
|
139
|
+
)
|
|
140
|
+
self._send(
|
|
141
|
+
frame.encode(),
|
|
142
|
+
sock=self._unicast_udp_sock,
|
|
143
|
+
addr=(self._mcast_address, self._mcast_port),
|
|
144
|
+
)
|
|
145
|
+
start = time.time()
|
|
146
|
+
while time.time() - start < timeout:
|
|
147
|
+
try:
|
|
148
|
+
offer_frame = SOMEIPSDFrame.decode(
|
|
149
|
+
self._recv(timeout=timeout, sock=self._mcast_udp_sock)
|
|
150
|
+
)
|
|
151
|
+
offer_sd_frame, _ = offer_frame.decode_sd(offer_frame.payload)
|
|
152
|
+
except (TypeError, TimeoutError):
|
|
153
|
+
continue
|
|
154
|
+
|
|
155
|
+
if (
|
|
156
|
+
offer_sd_frame.entries[0].service_id == service_id
|
|
157
|
+
and offer_sd_frame.entries[0].instance_id == instance_id
|
|
158
|
+
):
|
|
159
|
+
return offer_frame
|
|
160
|
+
|
|
161
|
+
return None
|
|
162
|
+
|
|
163
|
+
def subscribe(
|
|
164
|
+
self,
|
|
165
|
+
service_id,
|
|
166
|
+
method_id,
|
|
167
|
+
instance_id,
|
|
168
|
+
eventgroup_id,
|
|
169
|
+
major_version=1,
|
|
170
|
+
ttl=3,
|
|
171
|
+
timeout=3.0,
|
|
172
|
+
callback=None,
|
|
173
|
+
):
|
|
174
|
+
"""
|
|
175
|
+
subcribe a eventgroup.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
service_id (int): service id of the entry.
|
|
179
|
+
method_id (int): notify id of the interface.
|
|
180
|
+
instance_id (int): instance id of the entry, If it is set to 0xFFFF,
|
|
181
|
+
it means all service instances of a service.
|
|
182
|
+
eventgroup_id (int): event group id.
|
|
183
|
+
major_version (int): The major version of the service instance this event group belongs to.
|
|
184
|
+
ttl (int): describe the life cycle of this Entry in seconds.
|
|
185
|
+
timeout (float): socket receive timeout.
|
|
186
|
+
callback (funcion): callback funtion when receive server notification.
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
int: the session id of the subcriber.
|
|
190
|
+
"""
|
|
191
|
+
if self._session_counter > 0xFFFF:
|
|
192
|
+
self._session_counter = 0x0001
|
|
193
|
+
|
|
194
|
+
session_id = self._session_counter
|
|
195
|
+
|
|
196
|
+
if self._transport_type == SOMEIPClient.TransportType.TCP:
|
|
197
|
+
recv_sock = self._create_tcp_sock()
|
|
198
|
+
elif self._transport_type == SOMEIPClient.TransportType.UDP:
|
|
199
|
+
recv_sock = self._create_unicast_udp_sock()
|
|
200
|
+
|
|
201
|
+
eventgroup = Eventgroup(
|
|
202
|
+
service_id=service_id,
|
|
203
|
+
instance_id=instance_id,
|
|
204
|
+
eventgroup_id=eventgroup_id,
|
|
205
|
+
major_version=major_version,
|
|
206
|
+
sockname=recv_sock.getsockname(),
|
|
207
|
+
protocol=self._transport_type,
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
frame = SOMEIPSDFrame(
|
|
211
|
+
session_id=session_id,
|
|
212
|
+
entries=(eventgroup.create_subscribe_entry(ttl=ttl),),
|
|
213
|
+
)
|
|
214
|
+
self._send(
|
|
215
|
+
frame.encode(),
|
|
216
|
+
sock=self._unicast_udp_sock,
|
|
217
|
+
addr=(self._target_address, self._mcast_port),
|
|
218
|
+
)
|
|
219
|
+
subscribe_ack_frame = SOMEIPFrame.decode(
|
|
220
|
+
self._recv(timeout=timeout, sock=self._unicast_udp_sock)
|
|
221
|
+
)
|
|
222
|
+
SOMEIPSDFrame.check_ack(subscribe_ack_frame.payload)
|
|
223
|
+
|
|
224
|
+
loop = None
|
|
225
|
+
|
|
226
|
+
self._subscribe_receiver[session_id] = {
|
|
227
|
+
"socket": recv_sock,
|
|
228
|
+
"eventgroup": eventgroup,
|
|
229
|
+
"thread": loop,
|
|
230
|
+
"running": True,
|
|
231
|
+
}
|
|
232
|
+
self._session_counter += 1
|
|
233
|
+
if callback:
|
|
234
|
+
|
|
235
|
+
def _loop():
|
|
236
|
+
while self._subscribe_receiver[session_id]["running"]:
|
|
237
|
+
try:
|
|
238
|
+
response = self._recv(sock=recv_sock)
|
|
239
|
+
notify = SOMEIPFrame.decode(response)
|
|
240
|
+
except Exception:
|
|
241
|
+
pass
|
|
242
|
+
else:
|
|
243
|
+
if (
|
|
244
|
+
notify.service_id == service_id
|
|
245
|
+
and notify.method_id == method_id
|
|
246
|
+
):
|
|
247
|
+
success_received = callback(notify)
|
|
248
|
+
if success_received:
|
|
249
|
+
break
|
|
250
|
+
|
|
251
|
+
loop = threading.Thread(
|
|
252
|
+
target=_loop,
|
|
253
|
+
name=f"subscribe_{service_id}_{self._session_counter}",
|
|
254
|
+
)
|
|
255
|
+
loop.daemon = True
|
|
256
|
+
loop.start()
|
|
257
|
+
self._subscribe_receiver[session_id]["thread"] = loop
|
|
258
|
+
return self._session_counter - 1
|
|
259
|
+
else:
|
|
260
|
+
start = time.time()
|
|
261
|
+
while time.time() - start <= timeout:
|
|
262
|
+
try:
|
|
263
|
+
response = self._recv(sock=recv_sock)
|
|
264
|
+
notify = SOMEIPFrame.decode(response)
|
|
265
|
+
except Exception:
|
|
266
|
+
pass
|
|
267
|
+
else:
|
|
268
|
+
if (
|
|
269
|
+
notify.service_id == service_id
|
|
270
|
+
and notify.method_id == method_id
|
|
271
|
+
):
|
|
272
|
+
return notify
|
|
273
|
+
|
|
274
|
+
def stop_subscribe(
|
|
275
|
+
self,
|
|
276
|
+
counter,
|
|
277
|
+
ttl=0,
|
|
278
|
+
):
|
|
279
|
+
"""
|
|
280
|
+
stop to subscribe eventgroup.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
counter (int): session id of the subsciber.
|
|
284
|
+
ttl (int): describe the life cycle of this Entry in seconds.
|
|
285
|
+
"""
|
|
286
|
+
frame = SOMEIPSDFrame(
|
|
287
|
+
session_id=self._session_counter,
|
|
288
|
+
entries=(
|
|
289
|
+
self._subscribe_receiver[counter]["eventgroup"].create_subscribe_entry(
|
|
290
|
+
ttl=ttl
|
|
291
|
+
),
|
|
292
|
+
),
|
|
293
|
+
)
|
|
294
|
+
self._send(
|
|
295
|
+
frame.encode(),
|
|
296
|
+
sock=self._unicast_udp_sock,
|
|
297
|
+
addr=(self._target_address, self._mcast_port),
|
|
298
|
+
)
|
|
299
|
+
self._session_counter += 1
|
|
300
|
+
self._subscribe_receiver[counter]["running"] = False
|
|
301
|
+
if (
|
|
302
|
+
self._subscribe_receiver[counter]["thread"]
|
|
303
|
+
and self._subscribe_receiver[counter]["thread"].is_alive()
|
|
304
|
+
):
|
|
305
|
+
self._subscribe_receiver[counter]["thread"].join(A_PROCESSING_TIME + 1.0)
|
|
306
|
+
|
|
307
|
+
self._subscribe_receiver[counter]["socket"].close()
|
|
308
|
+
self._subscribe_receiver.pop(counter, None)
|
|
309
|
+
|
|
310
|
+
def rr_method(
|
|
311
|
+
self,
|
|
312
|
+
service_id,
|
|
313
|
+
method_id,
|
|
314
|
+
client_id=1,
|
|
315
|
+
session_id=1,
|
|
316
|
+
protocol_version=1,
|
|
317
|
+
interface_version=1,
|
|
318
|
+
message_type=SOMEIPMessageType.REQUEST,
|
|
319
|
+
return_code=SOMEIPReturnCode.E_OK,
|
|
320
|
+
payload=bytes(),
|
|
321
|
+
timeout=5.0,
|
|
322
|
+
):
|
|
323
|
+
"""
|
|
324
|
+
Request/Response - R&R mode.
|
|
325
|
+
"""
|
|
326
|
+
frame = SOMEIPFrame(
|
|
327
|
+
service_id=service_id,
|
|
328
|
+
method_id=method_id,
|
|
329
|
+
client_id=client_id,
|
|
330
|
+
session_id=session_id,
|
|
331
|
+
protocol_version=protocol_version,
|
|
332
|
+
interface_version=interface_version,
|
|
333
|
+
message_type=message_type,
|
|
334
|
+
return_code=return_code,
|
|
335
|
+
payload=payload,
|
|
336
|
+
)
|
|
337
|
+
self._send(frame.encode())
|
|
338
|
+
return SOMEIPFrame.decode(self._recv(timeout=timeout))
|
|
339
|
+
|
|
340
|
+
def ff_method(
|
|
341
|
+
self,
|
|
342
|
+
service_id,
|
|
343
|
+
method_id,
|
|
344
|
+
client_id=1,
|
|
345
|
+
session_id=1,
|
|
346
|
+
protocol_version=1,
|
|
347
|
+
interface_version=1,
|
|
348
|
+
message_type=SOMEIPMessageType.REQUEST_NO_RETURN,
|
|
349
|
+
return_code=SOMEIPReturnCode.E_OK,
|
|
350
|
+
payload=bytes(),
|
|
351
|
+
):
|
|
352
|
+
"""
|
|
353
|
+
Fire & Forget request, no reply, F&F mode.
|
|
354
|
+
"""
|
|
355
|
+
frame = SOMEIPFrame(
|
|
356
|
+
service_id=service_id,
|
|
357
|
+
method_id=method_id,
|
|
358
|
+
client_id=client_id,
|
|
359
|
+
session_id=session_id,
|
|
360
|
+
protocol_version=protocol_version,
|
|
361
|
+
interface_version=interface_version,
|
|
362
|
+
message_type=message_type,
|
|
363
|
+
return_code=return_code,
|
|
364
|
+
payload=payload,
|
|
365
|
+
)
|
|
366
|
+
self._send(frame.encode())
|
|
367
|
+
|
|
368
|
+
def field_getter(
|
|
369
|
+
self,
|
|
370
|
+
service_id,
|
|
371
|
+
method_id,
|
|
372
|
+
client_id=1,
|
|
373
|
+
session_id=1,
|
|
374
|
+
protocol_version=1,
|
|
375
|
+
interface_version=1,
|
|
376
|
+
message_type=SOMEIPMessageType.REQUEST,
|
|
377
|
+
return_code=SOMEIPReturnCode.E_OK,
|
|
378
|
+
payload=bytes(),
|
|
379
|
+
timeout=5.0,
|
|
380
|
+
):
|
|
381
|
+
"""
|
|
382
|
+
The getter of a field shall be a request/response call that has an empty payload in the request message
|
|
383
|
+
and the value of the field in the payload of the response message.
|
|
384
|
+
"""
|
|
385
|
+
return self.rr_method(
|
|
386
|
+
service_id,
|
|
387
|
+
method_id,
|
|
388
|
+
client_id=client_id,
|
|
389
|
+
session_id=session_id,
|
|
390
|
+
protocol_version=protocol_version,
|
|
391
|
+
interface_version=interface_version,
|
|
392
|
+
message_type=message_type,
|
|
393
|
+
return_code=return_code,
|
|
394
|
+
payload=payload,
|
|
395
|
+
timeout=timeout,
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
def field_setter(
|
|
399
|
+
self,
|
|
400
|
+
service_id,
|
|
401
|
+
method_id,
|
|
402
|
+
client_id=1,
|
|
403
|
+
session_id=1,
|
|
404
|
+
protocol_version=1,
|
|
405
|
+
interface_version=1,
|
|
406
|
+
message_type=SOMEIPMessageType.REQUEST,
|
|
407
|
+
return_code=SOMEIPReturnCode.E_OK,
|
|
408
|
+
payload=bytes(),
|
|
409
|
+
timeout=5.0,
|
|
410
|
+
):
|
|
411
|
+
"""
|
|
412
|
+
The setter of a field shall be a request/response call that has the desired value of the field in the
|
|
413
|
+
payload of the request message and the value that was set to the field in the payload of the response message.
|
|
414
|
+
"""
|
|
415
|
+
return self.rr_method(
|
|
416
|
+
service_id,
|
|
417
|
+
method_id,
|
|
418
|
+
client_id=client_id,
|
|
419
|
+
session_id=session_id,
|
|
420
|
+
protocol_version=protocol_version,
|
|
421
|
+
interface_version=interface_version,
|
|
422
|
+
message_type=message_type,
|
|
423
|
+
return_code=return_code,
|
|
424
|
+
payload=payload,
|
|
425
|
+
timeout=timeout,
|
|
426
|
+
)
|
|
427
|
+
|
|
428
|
+
def _send(self, frame, sock=None, addr=None):
|
|
429
|
+
sock = sock or self._sock
|
|
430
|
+
addr = addr or (self._target_address, self._target_port)
|
|
431
|
+
remaining = len(frame)
|
|
432
|
+
while remaining > 0:
|
|
433
|
+
if sock.type == socket.SocketKind.SOCK_STREAM:
|
|
434
|
+
remaining -= sock.send(frame[-remaining:])
|
|
435
|
+
else:
|
|
436
|
+
remaining -= sock.sendto(frame[-remaining:], addr)
|
|
437
|
+
|
|
438
|
+
def _recv(self, timeout=A_PROCESSING_TIME, sock=None):
|
|
439
|
+
sock = sock or self._sock
|
|
440
|
+
data = bytes()
|
|
441
|
+
|
|
442
|
+
r, _, _ = select.select([sock], [], [], timeout)
|
|
443
|
+
|
|
444
|
+
if r:
|
|
445
|
+
data = sock.recv(1024)
|
|
446
|
+
else:
|
|
447
|
+
logger.debug("error recv data, ---->socket timeout")
|
|
448
|
+
|
|
449
|
+
if data:
|
|
450
|
+
return data
|
|
451
|
+
|
|
452
|
+
raise TimeoutError("SOME/IP server failed to respond in time")
|
|
453
|
+
|
|
454
|
+
def close(self):
|
|
455
|
+
"""close socket"""
|
|
456
|
+
receivers = copy.deepcopy(list(self._subscribe_receiver.keys()))
|
|
457
|
+
for k in receivers:
|
|
458
|
+
self.stop_subscribe(k)
|
|
459
|
+
del receivers
|
|
460
|
+
if self._sock:
|
|
461
|
+
self._sock.close()
|
|
462
|
+
self._sock = None
|
|
463
|
+
if self._mcast_udp_sock:
|
|
464
|
+
self._mcast_udp_sock.close()
|
|
465
|
+
self._mcast_udp_sock = None
|
|
466
|
+
if self._unicast_udp_sock:
|
|
467
|
+
self._unicast_udp_sock.close()
|
|
468
|
+
self._unicast_udp_sock = None
|
|
469
|
+
self._session_counter = 0x0001
|
|
470
|
+
|
|
471
|
+
def __enter__(self):
|
|
472
|
+
return self
|
|
473
|
+
|
|
474
|
+
def __exit__(self, type, value, traceback):
|
|
475
|
+
self.close()
|