static void *bt_tx_monitor(void *ptr)
{
    UCHAR ucTxBuf[512];
    int iPktLen;
    
    DBG("Thread %lu starts\n", txThread);
    
    while (1){
        memset(ucTxBuf, 0, sizeof(ucTxBuf));
        iPktLen = 0;
        
        // Receive HCI packet from PC
        if(RELAYER_read(serial_fd, ucTxBuf, sizeof(ucTxBuf), &iPktLen))
        {
            DBG("Receive packet from PC\n");
            // Send the packet to BT Controller
            if(EM_BT_write(ucTxBuf, iPktLen)){
                sched_yield();
                continue;
            }
            else{
                ERR("Send packet to BT Controller failed\n");
                pthread_kill(rxThread, SIGRTMIN);
                break;
            }   
        }
        else{
            if (iPktLen == 0){
                continue;
            }
            else{
                ERR("Receive packet from PC failed\n");
                pthread_kill(rxThread, SIGRTMIN);
                break;
            }
        }
    }
    return 0;
}
Ejemplo n.º 2
0
void *bt_tx_monitor(void *ptr)
{
    UCHAR ucTxBuf[512];
    int iPktLen, i;
    
    while (!fExit){
        memset(ucTxBuf, 0, sizeof(ucTxBuf));
        iPktLen = 0;
        
        // Receive HCI packet from PC
        if(RELAYER_read(uart_fd, ucTxBuf, sizeof(ucTxBuf), &iPktLen)){
            // Dump Tx packet
            DBG("Receive packet from PC:\n");
            for (i = 0; i < iPktLen; i++) {
                DBG("%02x\n", ucTxBuf[i]);
            }
            
            // Send the packet to BT chip
            if(EM_BT_write(ucTxBuf, iPktLen)){
                sched_yield();
            	  continue;
            }
            else{
                ERR("Send packet to BT chip failed\n");
                fExit = TRUE;
            }   
        }
        else{
            if (iPktLen == 0)
                continue;
            else
                fExit = TRUE;
        }
    }
    return 0;
}