Beispiel #1
0
static void uart_tx_task(void)
{
    static MQ_t   * pTx_buf = NULL;

    if(pTx_buf != NULL)
    {
        if(hal_uart_free(UART_PHY_PORT))
        {
            mqFree(pTx_buf);
            pTx_buf = NULL;
        }
    }

    if(uart_tx_queue.Size != 0)
    {
#ifdef LED_On
        LED_On();
#endif  //  LED_On
        if(hal_uart_free(UART_PHY_PORT))
        {
            pTx_buf = mqDequeue(&uart_tx_queue);
            // Paranoid check
            if(pTx_buf != NULL)
            {
                hal_uart_send(UART_PHY_PORT, (pTx_buf->Length + 1), &pTx_buf->Length);
            }
        }
    }
}
Beispiel #2
0
// Write data
e_MQTTSN_RETURNS_t serWriteOD(subidx_t * pSubidx, uint8_t Len, uint8_t *pBuf)
{
    uint8_t port = pSubidx->Base/10;

    assert(extSerV[port] != NULL);

    if(Len > 0)
    {
        if((extSerV[port]->pTxBuf == NULL) && hal_uart_free(port))
        {
            MQ_t * pTxBuf = mqAlloc(sizeof(MQ_t));
            if(pTxBuf == NULL)
                return MQTTSN_RET_REJ_CONG;

            memcpy(pTxBuf->raw, pBuf, Len);
            hal_uart_send(port, Len, pTxBuf->raw);

            extSerV[port]->pTxBuf = pTxBuf;
        }
        else
            return MQTTSN_RET_REJ_CONG;
    }

    return MQTTSN_RET_ACCEPTED;
}
Beispiel #3
0
void serProc(void)
{
    uint8_t port;

    for(port = 0; port < EXTSER_USED; port++)
    {
        if(extSerV[port] != NULL)
        {
            if(extSerV[port]->flags & EXTSER_FLAG_TXEN)
            {
                if((extSerV[port]->pTxBuf != NULL) && (hal_uart_free(port)))
                {
                    mqFree(extSerV[port]->pTxBuf);
                    extSerV[port]->pTxBuf = NULL;
                }
            }
            
            if(extSerV[port]->flags & EXTSER_FLAG_RXEN)
            {
                if(hal_uart_datardy(port))
                {
                    uint8_t tmphead = extSerV[port]->RxHead + 1;
                    if(tmphead >= sizeof(MQ_t))
                        tmphead = 0;

                    if(tmphead != extSerV[port]->RxTail)
                    {
                        extSerV[port]->pRxBuf[extSerV[port]->RxHead] = hal_uart_get(port);
                        extSerV[port]->RxHead = tmphead;
                        
                        uint8_t size;
                        
                        if(tmphead > extSerV[port]->RxTail)
                            size = tmphead - extSerV[port]->RxTail;
                        else
                            size = sizeof(MQ_t) - extSerV[port]->RxTail + tmphead;
                            
                        if(size < (sizeof(MQ_t)/2))
                            extSerV[port]->flags &= ~EXTSER_FLAG_RXRDY;
                        else
                            extSerV[port]->flags |= EXTSER_FLAG_RXRDY;
                    }
                }
            }
        }
    }
}
Beispiel #4
0
static void uart_tx_task(void)
{
    static MQ_t   * pTx_buf = NULL;

    if(hal_uart_free(UART_PHY_PORT))
    {
        if(pTx_buf != NULL)
        {
            mqFree(pTx_buf);
            pTx_buf = NULL;
        }

        if(uart_tx_queue.Size != 0)
        {
            pTx_buf = mqDequeue(&uart_tx_queue);
            assert(pTx_buf != NULL);
            Activity(UART_PHY);
            hal_uart_send(UART_PHY_PORT, (pTx_buf->Length + 1), &pTx_buf->Length);
        }
    }
}