Slide 1

Slide 1 text

SDLϋϯζΦϯ Motoki OISHI Hiroshima MotionControl Network(HMCN) SDL։ൃ؀ڥͷ࢖͍ํ AndroidͷαϯϓϧΛೖखͯ͠ಈ͔ͯ͠ΈΔ 40෼ Q&A΋͘͠͸ɺ͜Μͳͷ࡞Γ͍͚ͨͲɺͲͷύλʔϯ࢖͑͹͍͍͔ʁ 20෼

Slide 2

Slide 2 text

4%-ϋϯζΦϯ AndroidͷαϯϓϧΛೖ खͯ͠ಈ͔ͯ͠ΈΔ ΰʔϧ 1.AndroidΞϓϦ։ൃͱͷࠩΛཧղ͢Δ 2.αϯϓϧΛྲྀ༻ͯ͠ɺࣗ਎ͷΞϓϦ։ൃʹస༻Ͱ͖Δ

Slide 3

Slide 3 text

Special Thanks:ాத խ໵ࢯ ࠓճͷαϯϓϧ͸ɺҒେͳΔઌਓͰ͋Δʮాத խ໵ࢯʯ ͷ஌ܙΛഈआ͓ͯ͠Γ·͢ɻ ઌਓͷ஌ܙΛआΓɺ޿ౡͰ͸ྑ͍΋ͷΛຊઓʹ͍͖࣋ͬͯ ·͠ΐ͏ʂ ͦͷલʹɾɾɾ

Slide 4

Slide 4 text

Special Thanks: SDL։ൃΩοτ Ϋϥ΢υͷγϛϡϨʔλʔͰ͋ΔManticoreͷ઀ଓ੍ݶ΍ ωοτϫʔΫΛհ͢Δ͜ͱʹΑΔɺ΋ͬ͞Γͱͨ͠ಈ࡞ ͔Βղফͯ͘͠ΕͨSDL։ൃΩοτɻ ࢖͍ํ΋γϯϓϧͰɺϋϯζΦϯࢿྉΛ࡞Δͷ͕ੌָ͘ʹ ͳΓ·ͨ͠ɻ ͋Γ͕ͱ͏ɺSDL։ൃΩοτɻࢲ͸ɺ܅Λߪೖ͍ͨ͠ɻ ͦͷલʹɾɾɾ

Slide 5

Slide 5 text

େ͖͘4ͭͷαϯϓϧΛ༻ҙ͠·ͨ͠ ΫϧϚͷٖࣅσʔλΛ࢖ͬͨΞϓϦ͕։ൃ͍ͨ͠ 4%-ͷ6*ϨΠΞ΢τΛར༻ͯ͠։ൃ͍ͨ͠ .BOUJDPSF αϯϓϧͷछྨ ։ൃ؀ڥ ࣗ༝ͳϨΠΞ΢τͰը໘Λ։ൃ͍ͨ͠ 4%-։ൃΩοτ 4%-։ൃΩοτ ιʔεೖखઌ IUUQTHJUIVCDPNPJD 4%-%JTQMBZ IUUQTHJUIVCDPNPJD 4%-7FIJDMF IUUQTHJUIVCDPNUBOBLB 4%-%JTQMBZ4BNQMF1SPKFDUJPO ΫϧϚͷٖࣅσʔλΛΫϥ΢υʹ஝ੵ͍ͨ͠ .BOUJDPSF IUUQTHJUIVCDPNPJD 4%-$MPVE wιʔεͷμ΢ϯϩʔυˍ"OESPJE4UVEJPͰ։͖ɺϏϧυ·Ͱͯ͠௖͚ΔͱɺϋοΫλΠϜͷઅ໿ʹ ͳΓ·͢ wׂͱɺHSBEMFͷμ΢ϯϩʔυͱ͔ɺϏϧυ͢Δͷʹ͔͔࣌ؒΓ·͢

Slide 6

Slide 6 text

Androidͷαϯϓϧιʔεͷೖखͷ࢓ํ αΠτʹΞΫηε ҎԼͷ63-Λϒϥ΢βͰ։͖·͢ αϯϓϧιʔεΛೖख ʮ$MPOFPSEPXOMPBEʯΛΫϦοΫͯ͠ɺ ʮ%PXOMPBE;*1ʯΛબ୒ɻ w(JUͷίϚϯυͰ͸ͳ͘ɺΘ͔Γ΍͍͢;*1μ΢ϯϩʔυͰઆ໌͍ͯ͠·͢ɻ w׳Ε͍ͯΔํ͸ɺίϚϯυͰ͓ئ͍͠·͢ʂ

Slide 7

Slide 7 text

Android StudioͰμ΢ϯϩʔυͨ͠αϯϓϧΛ։͘ /%,ϩέʔγϣϯͷ֬ೝ MPDBMQSPQFUJFTϑΝΠϧͷOELEJS͕ ࣗ෼ͷύιίϯͷύεʹมߋ͞Ε͍ͯ Ε͹׬ྃͰ͢ αϯϓϧΛऔΓࠐΉ ϝχϡʔόʔͷ<'JMF><0QFO>ΛΫ ϦοΫ͠·͢ /%,͕ೖͬͯͳ͍৔߹ /%,ΛηοτΞοϓ͠·͢ɻ <'JMF><1SPKFDU4USVDUVSF><4%, -PDBUJPO>ͷ"OESPJE/%,MPDBUJPO ͷԼʹ͋Δz%PXOMBE"OESPJE/%,z ͔ΒΠϯετʔϧ͍ͯͩ͘͠͞ w/%,ͷϩέʔγϣϯ·Ͱઃఆ͕׬ྃ͢Ε͹ɺϓϩδΣΫτͷϏϧυ͕࢝·Γ·͢ ͬͬ .BD049 8JOEPXT 4%,-PDBUJPO /%,Πϯετʔϧ MPDBMQSPQFUJFTϑΝΠϧ

Slide 8

Slide 8 text

SDLͷUIϨΠΞ΢τΛར༻ͯ͠։ൃ͍ͨ͠ ❖ SDL։ൃΩοτͱεϚʔτϑΥϯΛUSBͰ ઀ଓ͠·͢ ❖ ܾΊΒΕͨσβΠϯςϯϓϨʔτ͕ଘࡏ ͠ɺςϯϓϨʔτΛબΜͰ։ൃ͠·͢ ❖ આ໌Ͱ͸ɺʮSDLDisplayʯαϯϓϧΛ࢖༻ ͠·͢ɻ ❖ ͜ΜͳਓʹΦεεϝ ❖ ΫϧϚͷதͰը໘Λૢ࡞͢ΔωλΛ͖࣋ͬͯͨ

Slide 9

Slide 9 text

ࠓճͷαϯϓϧͷ؀ڥߏ੒ w4%-։ൃΩοτͷ8J'Jܦ༝Ͱ΋઀ଓ͢Δ͜ͱ͕Ͱ͖·͕͢ɺαϯϓϧͰ͸64#ͱ͠·ͨ͠ w()[ଳͰࠞઢͯ͠ɺಈ͖͕஗͍ͱ͔ɺܨ͕Βͳ͍ͱ͔ɾɾɾͷ৺഑Λ͠·ͨ͠ 64#έʔϒϧ 4%-։ൃΩοτ

Slide 10

Slide 10 text

ςϯϓϨʔτͷσβΠϯͬͯͲΜͳͷ͕͋Δͷʁ MEDIA MEDIA (WITH A PROGRESS BAR) NON-MEDIA GRAPHIC WITH TEXT TEXT WITH GRAPHIC TILES ONLY GRAPHIC WITH TILES TILES WITH GRAPHIC GRAPHIC WITH TEXT AND SOFT BUTTONS TEXT AND SOFT BUTTONS WITH GRAPHIC WITH TEXT BUTTONS GRAPHIC DOUBLE GRAPHIC WITH SOFT BUTTONS GRAPHIC WITH TILES TEXT BUTTONS ONLY LARGE GRAPHIC WITH SOFT BUTTONS LARGE GRAPHIC ONLY wશ෦Ͱ̎̌छྨͷςϯϓϨʔτ͔ΒબͿ͜ͱ͕Ͱ͖·͢ɻ

Slide 11

Slide 11 text

AndroidΞϓϦͷ։ൃͱߏ଄తʹҧ͍ͬͯ͋Δͷʁ w"OESPJEΞϓϦΛ։ൃ͢ΔϓϩδΣΫτߏ଄ʹҧ͍͸͋Γ·ͤΜ w4%-ΞϓϦΛ։ൃ͢ΔͨΊʹɺґଘؔ܎ʹ4%-4%,Λࢦఆ͢ΔͷΈͱͳΓ·͢ CVJMEHSBEMFʹEFQFOEFODJFTʹTEMͷ4%,Λࢦఆ͢Δ ߏ଄͸ࠓ·Ͱ௨Γ "DUJWJUZҎ֎ʹ4%-ͬΆ͍ͷιʔε͕ͪΒ΄Β

Slide 12

Slide 12 text

͓खຊΛϕʔεʹΞϓϦΛ࡞Γ͍ͨɻͲ͍͜͡Δʁ wंࡌଆʹදࣔ͞ΕΔ6*Λ࡞Δ৔߹ͷमਖ਼ՕॴͱͳΓ·͢ɻ TFU%JTQMBZ(SBQIJD8JUI5FYU#VUUPOT ϝιουΛվม 4EM4FSWJDFΛجຊ৮Δ (3"1)*$@8*5)@5&95#6550/4ͷςϯϓϨʔτͰղઆ͠·͢

Slide 13

Slide 13 text

ςϯϓϨʔτΛઃఆͯ͠ΈΔ private void setDisplayGraphicWithTextButtons(){ SetDisplayLayout setDisplayLayoutRequest = new SetDisplayLayout(); //GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS setDisplayLayoutRequest.setDisplayLayout(PredefinedLayout.GRAPHIC_WITH_TEXTBUTTONS.toString()); setDisplayLayoutRequest.setOnRPCResponseListener(new OnRPCResponseListener() { @Override public void onResponse(int correlationId, RPCResponse response) { if(((SetDisplayLayoutResponse) response).getSuccess()){ Log.i("SdlService", "Display layout set successfully."); w4%-୺຤ʹΑͬͯɺ࢖͑ͳ͍ςϯϓϨʔτ͕͋Γ·͢ɻ࣍ʹͦͷௐ΂ํʹ͍͓ͭͯ఻͑͠·͢ SdlService.javaͷ213ߦ໨ ςϯϓϨʔτ໊Λॻ͘ͷΈ setOnRPCResponseListenerͰ ςϯϓϨʔτΛઃఆ

Slide 14

Slide 14 text

SDL୺຤Ͱར༻Ͱ͖ΔςϯϓϨʔτ໊Λ೺Ѳ͢Δ private void checkTemplateType(){ Object result = sdlManager.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY); if( result instanceof DisplayCapabilities){ List templates = ((DisplayCapabilities) result).getTemplatesAvailable(); Log.i("Templete", templates.toString()); } } SdlService.javaͷ198ߦ໨ wΫϥ΢υγϛϡϨʔλͷ.BOUJDPSF΍4%-୺຤Αͬͯҧ͍͕͋ΔͷͰɺαϯϓϧΛίϐʔͯ͠Ξϓ ϦΛ࡞Δ৔߹ɺ͜ͷϩδοΫ͸ফͣ͞ʹ࢒͓͖ͯ͠·͠ΐ͏ɻ getTemplatesAvailableͰར༻ՄೳͳςϯϓϨʔτ໊͕ϦετͰฦ٫ ͞Ε·͢

Slide 15

Slide 15 text

wSFTESBXCMFʹQOHը૾Λίϐϖͯ͠ɺ4EM"SUXPSLͷϑΝΠϧ໊Λॻ͖׵͑Ε͹޷͖ͳը૾ʹมߋ Ͱ͖·͢ GRAPHIC WITH TEXTBUTTONSʹը૾Λઃఆ͢Δ ͜ͷ෦෼ͷը૾ sdlManager.getScreenManager().beginTransaction(); //ςΩετΛొ࿥͢Δ৔߹ //sdlManager.getScreenManager().setTextField1("Hello, this is MainField1."); //ը૾Λొ࿥͢Δ SdlArtwork artwork = new SdlArtwork("clap.png", FileType.GRAPHIC_PNG, R.drawable.clap, true); sdlManager.getScreenManager().setPrimaryGraphic(artwork); sdlManager.getScreenManager().commit(new CompletionListener() { @Override public void onComplete(boolean success) { if (success) { Log.i(TAG, "welcome show successful"); } } }); SdlService.javaͷ223ߦ໨ ϑΝΠϧ໊Λઃఆ ͜͜Ͱ͸clap.pngɺR.drawble.clap res/drawableʹදࣔ͠ ͨը૾ΛೖΕ·͢

Slide 16

Slide 16 text

wϘλϯͷઃఆͱɺPO1SFTTͰ4%-։ൃΩοτͷը໘͕λοϓ͞Εͨ৔߹ͷڍಈΛఆٛͰ͖·͢ɻ GRAPHIC WITH TEXTBUTTONSʹϘλϯΛઃఆ͢Δ ͜ͷ෦෼ SoftButtonState softButton02State1 = new SoftButtonState("button02_state1", "button02_state1", null); SoftButtonObject softButtonObject2 = new SoftButtonObject("softButtonObject02", Collections.singletonList(softButton02State1), softButton02State1.getName(), null); softButtonObject2.setOnEventListener(new SoftButtonObject.OnEventListener() { @Override public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) { sdlManager.getScreenManager().beginTransaction(); //ը૾Λొ࿥͢Δ SdlArtwork artwork = new SdlArtwork("oldman.png", FileType.GRAPHIC_PNG, R.drawable.oldman, true); sdlManager.getScreenManager().setPrimaryGraphic(artwork); sdlManager.getScreenManager().commit(new CompletionListener() { @Override public void onComplete(boolean success) { if (success) { Log.i(TAG, "welcome show successful"); } } }); } @Override public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) { } }); List buttons = Arrays.asList(softButtonObject1, softButtonObject2); //ϘλϯΛొ࿥͢Δ sdlManager.getScreenManager().setSoftButtonObjects(buttons); SdlService.javaͷ263ߦ໨ ը໘ͷλοϓΠϕϯτΛݕग़Ͱ͖Δ αϯϓϧ͸λοϓ͞ΕͨΒը૾Λมߋ͢Δ λοϓͯ͠มߋ͢Δը૾

Slide 17

Slide 17 text

ࣗ༝ͳϨΠΞ΢τͰը໘Λ։ൃ͍ͨ͠ ❖ SDL։ൃΩοτʹεϚʔτϑΥϯͷը໘Λ౤ Ө͢Δ։ൃํ๏ʹͳΓ·͢ ❖ SDLίΞͷ໰୊Ͱ10ճλοϓ͢Δͱೝࣝ͠ͳ ͘ͳΔΒ͍͠ͷͰɺؾΛ͚ͭͯ! ❖ SDLͷղ૾౓͸800✖350Ͱ͕͢ɺϥζύΠ͸ 800✖480Ͱ͢ɻ͜ͷࠩʹؾΛ͚ͭͳ͍ͱԼଆ ͷλοϓ͕Ͱ͖ͳ͍ ❖ ͜ΜͳਓʹΦεεϝ ❖ AndroidΞϓϦͷ։ൃۤखɾɾɾ

Slide 18

Slide 18 text

ࠓճͷαϯϓϧͷ؀ڥߏ੒ w4%-։ൃΩοτͷ8J'Jʹܨ͙ͱ௨৴Ͱ͖ͳ͘ͳΔͨΊɺ64#઀ଓͱͳ͍ͬͯ·͢ɻ w"OESPJEΞϓϦͰऔಘͨ͠ίϯςϯπΛͦͷ··4%-։ൃΩοτʹදࣔ͠·͢ 64#έʔϒϧ ܞଳ௨৴ ΞϓϦͰ࡞ͬͨը໘Λͦͷ··౤Ө͢Δ͚ͩͷ࢓૊Έ

Slide 19

Slide 19 text

AndroidΞϓϦͷ։ൃͱߏ଄తʹҧ͍ͬͯ͋Δͷʁ w"OESPJEΞϓϦΛ։ൃ͢ΔϓϩδΣΫτߏ଄ʹҧ͍͸͋Γ·ͤΜ w4%-ΞϓϦΛ։ൃ͢ΔͨΊʹɺґଘؔ܎ʹ4%-4%,Λࢦఆ͢ΔͷΈͱͳΓ·͢ CVJMEHSBEMFʹEFQFOEFODJFTʹTEMͷ4%,Λࢦఆ͢Δ ߏ଄͸ࠓ·Ͱ௨Γ "DUJWJUZҎ֎ʹ4%-ͬΆ͍ͷιʔε͕ͪΒ΄Β

Slide 20

Slide 20 text

͓खຊΛϕʔεʹΞϓϦΛ࡞Γ͍ͨɻͲ͍͜͡Δʁ w8FC7JFXʹͳ͍ͬͯΔՕॴΛ"OESPJEωΠςΟϒͷϘλϯ΍ςΩετΛ഑ஔ͢Ε͹ɺωΠςΟϒ ը໘Λ4%-ʹදࣔ͢Δ͜ͱ͸ՄೳͰ͢ 63-Λಠࣗͷ8FCαΠτʹมߋ͢Δ 4EM4FSWJDFΛجຊ৮Δ webView1.loadUrl("https://youtu.be/Z44jE7f1amw?list=PLZeNrjPGMduVzURgZnHGaBV-6_TTwU5th"); SdlService.javaͷ265ߦ໨ αϯϓϧ͸WebViewʹͳͬͯ ͍Δ

Slide 21

Slide 21 text

ΫϧϚͷٖࣅσʔλΛ࢖ͬͨΞϓϦ͕։ൃ͍ͨ͠ ❖ ຊαϯϓϧ͸ɺSDL։ൃΩοτͰ͸ͳ͘Ϋϥ ΢υܕͷ։ൃΩοτͰ͋ΔʮManticoreʯΛར ༻͠·͢ ❖ ʮManticoreʯͰɺΫϧϚ͔ΒऔಘͰ͖Δσʔ λΛ໛ٖͯ͠ɺSDLΞϓϦʹૹ৴͢Δ͜ͱ͕ Ͱ͖·͢ʢຊ౰͸ຊ෺ͷं͕࢖͍͔ͨͬͨʣ ❖ ͜ΜͳਓʹΦεεϝ ❖ ΫϧϚ͔Βऔಘͨ͠σʔλΛ࢖ͬͨωλ͕ ΍Γ͍ͨɻ͔͠΋ɺ΄΅ϦΞϧλΠϜͰɻ ̏

Slide 22

Slide 22 text

ࠓճͷαϯϓϧͷ؀ڥߏ੒ wεϚϗ͔Β4%-αΠτͷʮ.BOUJDPSFʯʹ઀ଓͯ͠ɺΞϓϦͷը໘Λ౤Ө͠·͢ ܞଳ௨৴ 4%-αΠτ্ͷʮ.BOUJDPSFʯ

Slide 23

Slide 23 text

AndroidΞϓϦͷ։ൃͱߏ଄తʹҧ͍ͬͯ͋Δͷʁ w"OESPJEΞϓϦΛ։ൃ͢ΔϓϩδΣΫτߏ଄ʹҧ͍͸͋Γ·ͤΜ w4%-ΞϓϦΛ։ൃ͢ΔͨΊʹɺґଘؔ܎ʹ4%-4%,Λࢦఆ͢ΔͷΈͱͳΓ·͢ CVJMEHSBEMFʹEFQFOEFODJFTʹTEMͷ4%,Λࢦఆ͢Δ ߏ଄͸ࠓ·Ͱ௨Γ "DUJWJUZҎ֎ʹ4%-ͬΆ͍ͷιʔε͕ͪΒ΄Β

Slide 24

Slide 24 text

Manticore͸Ͳ͜ʹΞΫηε͢Ε͹͍͍ͷʁ wϢʔβʔొ࿥͕ඞཁͱͳΓ·͢ͷͰɺࣄલࢿྉͷखॱʹԊͬͯ4%-Ϣʔβొ࿥Λ͓ئ͍͠·͢ 4%-αΠτʹΞΫηε ҎԼͷ63-Λϒϥ΢βͰ։͖·͢ IUUQTXXXTNBSUEFWJDFMJOLDPN ˞Ϣʔβʔొ࿥ࡁΈͰ͔͢ʁ <.BOUJDPSF>Λબ୒ ϝχϡʔόʔʹ͋Δʮ.BOUJDPSFʯΛ બ୒͢Δ͔ɺҎԼͷ63-ʹΞΫηε IUUQTXXXTNBSUEFWJDFMJOLDPN SFTPVSDFTNBOUJDPSF ̏<-"/$)."/5*$03&>Λબ୒ Լهͷؙ͕͍͍ͭͯΔՕॴΛΫϦοΫ ͢Δ

Slide 25

Slide 25 text

ManticoreͱAndroidΞϓϦΛͭͳ͙࣌ͷ஫ҙ఺ w.BOUJDPSF͸̏̌෼ແૢ࡞ঢ়ଶͩͱ੾அ͢Δ͔ɺܧଓ͢Δ͔ͷϙοϓΞοϓ͕දࣔ͞Ε·͢ɻ w༨༟͕͋Δํ͸ɺ"OESPJEΞϓϦଆͰϙʔτ൪߸ΛखଧͪͰ͖ΔΑ͏ʹͨ͠ํ͕͍͍͔΋ɻ ઀ଓ͢Δͱຖճϙʔτ൪߸͕ มΘΔ private static final int TCP_PORT = 16589; private static final String DEV_MACHINE_IP_ADDRESS = "m.sdl.tools"; SdlService.javaͷ60ߦ໨ Manticoreʹͭͳ͙౓ʹमਖ਼͕ඞཁ

Slide 26

Slide 26 text

ManticoreͷσʔλΛͲ͏ΞϓϦͰऔಘ͍ͯ͠Δʁ //͜ΕΛ͢Δͱఆظతʹσʔλ͕औಘՄೳ sdlManager.addOnRPCNotificationListener(FunctionID.ON_VEHICLE_DATA, new OnRPCNotificationListener() { @Override public void onNotified(RPCNotification notification) { OnVehicleData onVehicleDataNotification = (OnVehicleData) notification; sdlManager.getScreenManager().beginTransaction(); SdlArtwork artwork = null; //ճస਺͕3000Ҏ্͔ɺҎԼͰը૾Λ੾Γସ͑Δ Integer rpm = onVehicleDataNotification.getRpm(); ͜ͷ෦෼ͷΤϯδϯճస਺Λ औಘ͢Δ SdlService.javaͷ172ߦ໨ wTEM.BOBHFSBEE0O31$/PUJpDBUJPO-JTUFOFSʹΑΓఆظతʹΫϧϚͷσʔλ͕औಘՄೳ wPO7FIJDMF%BUB/PUJpDBUJPO͔ΒɺΫϧϚͷσʔλΛऔΓग़͢͜ͱ͕Ͱ͖Δ ͜͜Ͱճస਺Λऔಘ͍ͯ͠Δ

Slide 27

Slide 27 text

ఆظతʹऔಘ͢Δσʔλ͸ඞͣઃఆ͢Δඞཁ͋Γ //͜ΕΛ͢Δͱఆظతʹσʔλ͕औಘՄೳ SubscribeVehicleData subscribeRequest = new SubscribeVehicleData(); subscribeRequest.setRpm(true); //Τϯδϯճస਺ subscribeRequest.setPrndl(true); //γϑτϨʔόͷঢ়ଶ subscribeRequest.setOnRPCResponseListener(new OnRPCResponseListener() { @Override public void onResponse(int correlationId, RPCResponse response) { if (response.getSuccess()) { Log.i("SdlService", "Successfully subscribed to vehicle data."); } else { Log.i("SdlService", "Request to subscribe to vehicle data was rejected."); } } }); sdlManager.sendRPC(subscribeRequest); ͜ͷ෦෼ͷΤϯδϯճస਺Λ औಘ͢Δ SdlService.javaͷ366ߦ໨ w͜ͷઃఆΛ͍ͯ͠ͳ͍ͱΫϧϚͷσʔλΛఆظऔಘͰ͖ͳ͍ͷͰ͝஫ҙ͍ͩ͘͞ɻ w߲໨Λ૿΍͢ͷ͸ɺTVCTDSJCF3FRVFTUTFUऔΓ͍߲ͨ໨໊ USVF Ͱ0,Ͱ͢ɻ ߲໨͝ͱʹTrueΛઃఆ

Slide 28

Slide 28 text

ं྆σʔλ ϝιου ܕ આ໌ GPS getGps GPSData Ң౓ɺܦ౓ɺ଎౓ͳͲͷGPSσʔλ ଎౓ getSpeed Double ं଎(KPH) RPM getRpm Integer Τϯδϯͷຖ෼ճస਺ ೩ྉϨϕϧ getFuelLevel Double λϯΫ಺ͷ೩ྉϨϕϧʢύʔηϯτʣ ೩ྉϨϕϧঢ়ଶ getFuelLevel_State ComponentVolumeStatus ೩ྉϨϕϧͷঢ়ଶ ೩ྉൣғ getFuelRange List< FuelRange > ೩ྉϨϕϧͱফඅྔʹج͍ͮͯं͕྆૸ߦͰ͖Δkmͷ ਪఆൣғ Πϯελϯτ೩අ getInstantFuelConsumption Double ϚΠΫϩϦοτϧͰͷॠؒతͳ೩ྉফඅྔ ֎ؾԹ getExternalTemperature Double ઁࢯԹ౓Ͱͷ֎෦Թ౓ VIN getVin String ं྆ࣝผ൪߸ PRNDL getPrndl PRNDL બ୒͞ΕͨΪΞ λΠϠۭؾѹ getTirePressure TireStatus ं྆ͷ֤ϗΠʔϧͷλΠϠঢ়ଶ Φυϝʔλʔ getOdometer Integer ૸ߦڑ཭ܭ(Km) ϕϧτঢ়ଶ getBeltStatus BeltStatus ֤γʔτϕϧτͷঢ়ଶ ϘσΟ৘ใ getBodyInformation BodyInformation ֤ंମͷঢ়ଶʢυΞ΍ɺ఺ՐεςʔλεͳͲʣ ं྆σʔλ ϝιου ܕ આ໌ σόΠεεςʔλε getDeviceStatus DeviceStatus εϚʔτϑΥϯσόΠεʹؔ͢Δ৘ใ ӡసऀϒϨʔΩ getDriverBraking VehicleDataEventSt atus ϒϨʔΩϖμϧͷঢ়ଶ ϫΠύʔঢ়ଶ getWiperStatus WiperStatus ϫΠύʔͷঢ়ଶ ϔουϥϯϓͷঢ়ଶ getHeadLampStatus HeadLampStatus ϔουϥϯϓͷঢ়ଶ ΤϯδϯτϧΫ getEngineTorque Double σΟʔθϧҎ֎ͷΤϯδϯͷτϧΫ஋ ʢNmʣ ΤϯδϯΦΠϧͷण ໋ getEngineOilLife Float Τϯδϯͷ࢒ଘΦΠϧण໋ͷਪఆׂ߹ ΞΫηϧϖμϧҐஔ getAccPedalPosition Double ΞΫηϧϖμϧͷҐஔʢύʔηϯτʣ ϋϯυϧ֯ getSteeringWheelAng le Double εςΞϦϯάϗΠʔϧͷݱࡏͷ֯౓ ʢ౓ʣ Eίʔϧ৘ใ getECallInfo ECallInfo ۓٸ௨ใͷঢ়گʹؔ͢Δ৘ใ ΤΞόοάͷঢ়ଶ getAirbagStatus AirbagStatus ं྆಺ͷ֤ΤΞόοάͷঢ়ଶ ۓٸΠϕϯτ getEmergencyEvent EmergencyEvent ۓٸͷঢ়گ ΫϥελϞʔυͷঢ় ଶ getClusterModeStatus ClusterModeStatus ిྗϞʔυ͕ΞΫςΟϒ͔Ͳ͏͔ My Key getMyKey MyKey ۓٸ911ͳͲͷ৘ใ ΢ΠϯΧʔ getTurnSignal TurnSignal ํ޲ࢦࣔثͷঢ়ଶ ిࢠύʔΩϯάϒϨ ʔΩͷঢ়ଶ getElectronicParkBrak eStatus ElectronicParkBrak eStatus ύʔΫϒϨʔΩͷεςʔλε wϝιουͷྻʹHFUͱॻ͍ͯ·͕͢ɺఆظతʹऔಘ͍ͨ͠σʔλ͸HFUΛTFUʹಡΈସ͑ͯ5SVFઃఆ ͍ͯͩ͘͠͞ ΫϧϚ(Manticore)͔ΒऔಘͰ͖ΔΫϧϚͷσʔλ

Slide 29

Slide 29 text

ΫϧϚͷٖࣅσʔλΛΫϥ΢υʹ஝ੵ͍ͨ͠ ❖ ʮ̏.ΫϧϚͷٖࣅσʔλΛ࢖ͬͨΞϓϦ͕ ։ൃ͍ͨ͠ʯͱ΄΅ಉ͡Ͱ͕͢ɺSDLΞϓ Ϧ͔ΒผͷΫϥ΢υ؀ڥʹσʔλΛ஝ੵ͠ ͨ৔߹ʹ͍ͭͯ঺հ͠·͢ ❖ ͜ΜͳਓʹΦεεϝ ❖ ΫϧϚ͔Βऔಘͨ͠σʔλΛ࢖ͬͨωλ ͕΍Γ͍ͨɻ͔͠΋ɺσʔλΛ஝ੵͯ͠ ผͷαʔϏεͱͯ͠ɻ

Slide 30

Slide 30 text

ࠓճͷαϯϓϧͷ؀ڥߏ੒ wεϚϗ͔Β4%-αΠτͷʮ.BOUJDPSFʯʹ઀ଓͯ͠ɺΞϓϦͷը໘Λ౤Ө͠·͢ wʮ.BOUJDPSFʯ্Ͱऔಘͨ͠ΫϧϚͷσʔλΛผͷαʔϏεʹ)551Ͱϙετ͠·͢ ܞଳ௨৴ 4%-αΠτ্ͷʮ.BOUJDPSFʯ ܞଳ௨৴ ผͷαʔϏε

Slide 31

Slide 31 text

σϞ wࠓճ͸ɺ.BOUJDPSFͰૢ࡞ͨ͠Τϯδϯճస਺Λఆظతʹ*#.$-06%ʹ)5511045͢Δαϯϓ ϧͰ͢ɻ ϜʔϏʔͰ͢ͷͰɺ౰೔ಈ͖Λݟͤ·͢

Slide 32

Slide 32 text

Ͳ͏΍ͬͯผͷαʔϏεʹσʔλΛૹ͍ͬͯΔ͔ʁ public void doPost(String url,String engineRPM) throws IOException { final FormBody.Builder formBodyBuilder = new FormBody.Builder(); //POST͢Δσʔλ formBodyBuilder.add("engine", engineRPM); final Request request = new Request.Builder() .url(url) .header("User-Agent", "SDL client") .post(formBodyBuilder.build()) .build(); OkHttpClient client = new OkHttpClient.Builder() .build(); //ಉظݺͼग़͠ Response response = client.newCall(request).execute(); } w0L)UUQͷϥΠϒϥϦΛ׆༻ͯ͠ɺࢦఆͷ63-ʹ1045͍ͯ͠·͢ɻ wࢦఆͷ63-Λมߋ͢Ε͹ɺ //͜ΕΛ͢Δͱఆظతʹσʔλ͕औಘՄೳ sdlManager.addOnRPCNotificationListener(FunctionID.ON_VEHICLE_DATA, new OnRPCNotificationListener() { @Override public void onNotified(RPCNotification notification) { OnVehicleData onVehicleDataNotification = (OnVehicleData) notification; sdlManager.getScreenManager().beginTransaction(); //Τϯδϯճస਺ΛࢦఆURLʹHTTP POST͢Δ try { //FIXME POST͢ΔURLΛॻ͍ͯͶ doPost("https://υϝΠϯ",onVehicleDataNotification.getRpm().toString()); } catch (IOException e) { //FIXME ͪΌΜͱΤϥʔॲཧͯ͠Ͷ e.printStackTrace(); } SdlService.javaͷ225ߦ໨ ͜͜ͰURLͱσʔλΛηοτ͍ͯ͠Δ SdlService.javaͷ95ߦ໨ POSTσʔλͱͯ͠ηοτ

Slide 33

Slide 33 text

ΫϧϚͷऔಘ߲໨Λ૿΍͢ͷ͸ɺ3ষͱಉ͡ //͜ΕΛ͢Δͱఆظతʹσʔλ͕औಘՄೳ SubscribeVehicleData subscribeRequest = new SubscribeVehicleData(); subscribeRequest.setRpm(true); //Τϯδϯճస਺ subscribeRequest.setPrndl(true); //γϑτϨʔόͷঢ়ଶ subscribeRequest.setOnRPCResponseListener(new OnRPCResponseListener() { @Override public void onResponse(int correlationId, RPCResponse response) { if (response.getSuccess()) { Log.i("SdlService", "Successfully subscribed to vehicle data."); } else { Log.i("SdlService", "Request to subscribe to vehicle data was rejected."); } } }); sdlManager.sendRPC(subscribeRequest); ͜ͷ෦෼ͷΤϯδϯճస਺Λ औಘ͢Δ SdlService.javaͷ429ߦ໨ w߲໨Λ૿΍͢ͷ͸ɺTVCTDSJCF3FRVFTUTFUऔΓ͍߲ͨ໨໊ USVF Ͱ0,Ͱ͢ɻ ߲໨͝ͱʹTrueΛઃఆ