1525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/*
2525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project
3525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
4525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * you may not use this file except in compliance with the License.
6525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * You may obtain a copy of the License at
7525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
8525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *
10525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * See the License for the specific language governing permissions and
14525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * limitations under the License.
15525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */
16525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
17525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpackage com.android.nfc.dhimpl;
18525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectimport com.android.nfc.DeviceHost;
20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectimport com.android.nfc.LlcpPacket;
21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectimport java.io.IOException;
23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/**
25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * LlcpConnectionlessSocket represents a LLCP Connectionless object to be used
26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * in a connectionless communication
27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */
28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpublic class NativeLlcpConnectionlessSocket implements DeviceHost.LlcpConnectionlessSocket {
29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    private int mHandle;
31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    private int mSap;
32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    private int mLinkMiu;
33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public NativeLlcpConnectionlessSocket() { }
35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public native boolean doSendTo(int sap, byte[] data);
37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public native LlcpPacket doReceiveFrom(int linkMiu);
39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public native boolean doClose();
41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    @Override
43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public int getLinkMiu(){
44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        return mLinkMiu;
45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    @Override
48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public int getSap(){
49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        return mSap;
50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    @Override
53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public void send(int sap, byte[] data) throws IOException {
54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        if (!doSendTo(sap, data)) {
55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project            throw new IOException();
56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        }
57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    @Override
60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public LlcpPacket receive() throws IOException {
61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        LlcpPacket packet = doReceiveFrom(mLinkMiu);
62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        if (packet == null) {
63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project            throw new IOException();
64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        }
65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        return packet;
66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public int getHandle(){
69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        return mHandle;
70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project
72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    @Override
73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    public void close() throws IOException {
74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        if (!doClose()) {
75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project            throw new IOException();
76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project        }
77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project    }
78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}
79