Mouse x,y축 이동을 패킷화 해서 bluetooth로 보내기

Bluetooth 통신시 기본적으로 소켓에는 byte[]형식으로 데이터가 담긴다.

mouse의 x,y 값을 보내기 위해서는 8byte가 필요하다(int *2)

mouse의 이동값인 것을 나타내기 위한 1byte가 필요하다.

마우스 이동 데이터 형식

int값을 byte화 하기 위해선 변환이 필요하다.

1
2
3
4
5
6
7
8
9
10
11
public static byte[] intTobyte(int integer, ByteOrder order) {

ByteBuffer buff = ByteBuffer.allocate(Integer.SIZE/8);
buff.order(order);

// 인수로 넘어온 integer을 putInt로설정
buff.putInt(integer);

System.out.println("intTobyte : " + buff);
return buff.array();
}

order의 값은 ByteOrder.LITTLE_ENDIAN 또는 ByteOrder.BIG_ENDIAN을 지정한다.

최종적으로 mouse 이동에 따른 bluetooth 값을 보내는 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//마우스 이동시 호출
static public void Mouse_move(int x, int y) {
Message msg = new Message();
byte[] bytes = new byte[9];
byte[] xbytes;
byte[] ybytes;
bytes[0] = (byte)2;
xbytes = intTobyte(x, ByteOrder.LITTLE_ENDIAN);
ybytes = intTobyte(y, ByteOrder.LITTLE_ENDIAN);
for(int i =0; i<4; i++){
bytes[1+i] = xbytes[i];
bytes[5+i] = ybytes[i];
}
msg.obj = bytes;
isbyte = true;
if (writeHandler != null) {
writeHandler.sendMessage(msg);
}
}

//WriteThread에서 x,y값을 byte로 송신
class WriteThread extends Thread {
BluetoothSocket socket = null;
OutputStream out = null;

public WriteThread(BluetoothSocket socket) {
this.socket = socket;
try {
out = socket.getOutputStream();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void run() {
Looper.prepare();
writeHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
if(isbyte){
out.write((byte[])msg.obj);
}
공유하기