안녕하세요?
타 커뮤니티에도 글을 올렸는데.. 답글이 없어 안드로이드 펍에도 질문올려봅니다.. ^^;
임베디드 장치(QT 기반) 에서 이미지 파일을 안드로이드 폰으로 전송하려고 하는데..
속도가 느려서 경험자분들께 도움을 요청합니다.
송신쪽에서는 이미지를 읽어서 1024 바이트로 나눠서 보내고 각 패킷마다 딜레이를 270ms 를 줍니다.
좀 더 줄이면 데이터 손실이 납니다..
아래 코드가 (QT 코드 입니다.) 송신 쪽이고요
블루투스통신은 SPP 통신인데 baudrate는 115200 을 쓰고 있습니다.
#define BT_BUFF_SIZE 1024
FILE *fp;
fp = fopen("/window.bmp", "rb");
while(1){
readCnt = fread((void*)buff, 1, BT_BUFF_SIZE, fp);
total+=readCnt;
if(readCnt < BT_BUFF_SIZE){ // 1024로 나눠서 보내고 남은 짜투리를
write(mIntFd, &buff, readCnt); // 보내고 루프를 나옴.
break;
}
write(mIntFd, &buff, BT_BUFF_SIZE);
usleep(270000); // 1024를 보내고 270ms 딜레이.
}
아래 코드가 안드로이드 코드입니다.
테스트이기 때문에 이미지 사이즈는 하드코딩 했습니다.
public void run() {
byte[] buffer = new byte[2048];
int bytesRead = 0;
readBytesIdx = 0;
if(mInit == false){
mBytes_Buffer = new byte[500000];
mInit = true;
}
// Keep listening to the InputStream while connected
while (true) {
try {
if(inputStream != null) {
bytesRead = inputStream.read(buffer); // Received Data' Length
System.arraycopy(buffer, 0, mBytes_Buffer, readBytesIdx, bytesRead);
readBytesIdx+=bytesRead;
Log.d(TAG, "read Bytes Idx = " + readBytesIdx);
// 현재 테스트 하는 이미지 크기가 151374 입니다.
if(readBytesIdx == 151374){
updateImageView(); // 데이터 수신이 끝나면 이미지뷰 업데이트.
}
그냥 다른 동료 안드로이드폰 하고 블루투스 연결해서
이미지 전송해보면 속도가 4~5초 정도 걸리는데..
어떻게 가능한건지 모르겠네요..
그리고 제 기억이 왜곡 된건지 모르겠습니다만..
수년 전에 제가 테스트할때는 약 한 1메가 정도 되는 이미지 수신이 3~4초 내외에 됐던거 같은데..
당시에 어떻게 했나 기억이 안나네요. ㅠ