1f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/* 2f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Copyright (C) 2010 The Android Open Source Project 3f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 4f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Licensed under the Apache License, Version 2.0 (the "License"); 5f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * you may not use this file except in compliance with the License. 6f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * You may obtain a copy of the License at 7f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 8f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * http://www.apache.org/licenses/LICENSE-2.0 9f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * 10f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * Unless required by applicable law or agreed to in writing, software 11f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * distributed under the License is distributed on an "AS IS" BASIS, 12f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * See the License for the specific language governing permissions and 14f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * limitations under the License. 15f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly */ 16f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 174bbd47e5507d4c47a4d722216606307e45195a0aMartijn Coenenpackage com.android.nfc.dhimpl; 18f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 19e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenenimport com.android.nfc.DeviceHost; 20e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenenimport com.android.nfc.LlcpPacket; 21e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen 22e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenenimport java.io.IOException; 23f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 24f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly/** 25f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * LlcpConnectionlessSocket represents a LLCP Connectionless object to be used 26f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly * in a connectionless communication 27f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly */ 28e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenenpublic class NativeLlcpConnectionlessSocket implements DeviceHost.LlcpConnectionlessSocket { 29f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 30f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly private int mHandle; 31f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly private int mSap; 32f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly private int mLinkMiu; 33f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 34c9342fef947c49e247495b83f94f16d43cd3562cmike wakerly public NativeLlcpConnectionlessSocket() { } 35f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 36f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public native boolean doSendTo(int sap, byte[] data); 37f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 38f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public native LlcpPacket doReceiveFrom(int linkMiu); 39f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 40f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public native boolean doClose(); 41f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 42e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen @Override 43f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public int getLinkMiu(){ 44f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly return mLinkMiu; 45f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly } 46f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 47e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen @Override 48f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public int getSap(){ 49f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly return mSap; 50f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly } 51f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 52e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen @Override 53e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen public void send(int sap, byte[] data) throws IOException { 54e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen if (!doSendTo(sap, data)) { 55e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen throw new IOException(); 56e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 57e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 58e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen 59e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen @Override 60e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen public LlcpPacket receive() throws IOException { 61e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen LlcpPacket packet = doReceiveFrom(mLinkMiu); 62e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen if (packet == null) { 63e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen throw new IOException(); 64e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 65e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen return packet; 66e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 67e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen 68f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly public int getHandle(){ 69f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly return mHandle; 70f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly } 71f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly 72e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen @Override 73e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen public void close() throws IOException { 74e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen if (!doClose()) { 75e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen throw new IOException(); 76e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 77e008eba3b51c5303d52bf3e9e989dfd03b18435aMartijn Coenen } 78f067256d9556b1e01143f9ae2fd824fa5dc03138Nick Pelly} 79