Exemplo n.º 1
0
static void IntBackgroundTask(mint asyncObjID, void* vtarg)
{
	IntBackgroundArgs targ = (IntBackgroundArgs)vtarg;
	WolframIOLibrary_Functions ioLibrary = targ->ioLibrary;
	mint pausems = targ->pausemillis;
	mint eventdata = targ->eventdata;
	DataStore ds;
	free(targ);

	while(ioLibrary->asynchronousTaskAliveQ(asyncObjID))
	{
		PortableSleep(pausems);
		ds = ioLibrary->createDataStore();
		if(s_secondaryAsyncObjID < 0)
		{
			ioLibrary->DataStore_addInteger(ds, eventdata);
			ioLibrary->raiseAsyncEvent(asyncObjID, NULL, ds);
			eventdata++;
		}
		else
		{
			ioLibrary->DataStore_addInteger(ds, s_secondaryAsyncObjEventData);
			ioLibrary->raiseAsyncEvent(s_secondaryAsyncObjID, NULL, ds);
		s_secondaryAsyncObjEventData++;
		}
	}
}
Exemplo n.º 2
0
int 
BthModConfig(
    IN BthMod_T     *pMod
    )
{
    int ret;
    int CmdRet;
    char Response[256];

    DBG_MSG(DBG_TRACE, "%s\n", __FUNCTION__);
    
    /* Set profile to SPP */
    ret = BthModSendCommand(pMod, "S~,0\n", &CmdRet, Response, sizeof(Response));
    CHECK_RETVAL(ret, ExitOnFailure);
    CHECK_RETVAL(CmdRet, ExitOnFailure);

    /* Set authentication mode to SSP */
    ret = BthModSendCommand(pMod, "SA,2\n", &CmdRet, Response, sizeof(Response));
    CHECK_RETVAL(ret, ExitOnFailure);
    CHECK_RETVAL(CmdRet, ExitOnFailure);

    /* Set pin code to 0000 */
    // ret = BthModSendCommand(pMod, "SP,0000\n", &CmdRet, Response, sizeof(Response));
    // CHECK_RETVAL(ret, ExitOnFailure);
    // CHECK_RETVAL(CmdRet, ExitOnFailure);

    /* Disable command mode timer */
    ret = BthModSendCommand(pMod, "ST,200\n", &CmdRet, Response, sizeof(Response));
    CHECK_RETVAL(ret, ExitOnFailure);
    CHECK_RETVAL(CmdRet, ExitOnFailure);

    ret = BthModSendCommand(pMod, "SO,->\n", &CmdRet, Response, sizeof(Response));
    CHECK_RETVAL(ret, ExitOnFailure);
    CHECK_RETVAL(CmdRet, ExitOnFailure);

    ret = BthModSendCommand(pMod, "R,1\n", &CmdRet, Response, sizeof(Response));
    CHECK_RETVAL(ret, ExitOnFailure);

    PortableSleep(1000);

    ret = UartPurge(pMod->hUart);
    CHECK_RETVAL(ret, ExitOnFailure);

    ret = BthModCommandMode(pMod, TRUE);
    CHECK_RETVAL(ret, ExitOnFailure);

    return S_OK;

ExitOnFailure:

    return E_FAIL;
}
Exemplo n.º 3
0
int
OsxUartWrite(
    IN uhandle_t	hUart,
    IO const void   *pBuff,     
    IN unsigned int uLength,    
    OUT unsigned int *puWritten,   
    IN unsigned int uWaitTime   
    )
{
    int Retval;
    OsxUart_T *pUart = (OsxUart_T *)hUart;
    size_t Written;
    unsigned int uTotal;
    unsigned int uStart;

    DBG_MSG(DBG_TRACE, "%s\n", __FUNCTION__);

    uTotal = 0;
    uStart = PortableGetTick();

    for ( ; ; )
    {
        Written = write(pUart->hPort, pBuff+uTotal, uLength-uTotal);
        Retval = Written != -1 ? S_OK : E_FAIL;
        CHECK_RETVAL(Retval, ExitOnFailure);                                                            

        uTotal = uTotal + Written;

        if (uTotal == uLength)
        {
            Retval = S_OK;
            break;
        }

        if (PortableGetTick() - uStart > uWaitTime)
        {
            Retval = uTotal ? S_OK : E_TIMEOUT;
            break;
        }
    
        PortableSleep(UART_MIN_WRITE_WAIT);
    }

    if (puWritten)
    {
        *puWritten = uTotal;
    }

ExitOnFailure:

    return Retval;
}
Exemplo n.º 4
0
int
OsxUartRead(
    IN uhandle_t	hUart,
    IO void         *pBuff,     
    IN unsigned int uLength,    
    OUT unsigned int *puRead,   
    IN unsigned int uWaitTime   
    )
{
    int Retval;
    OsxUart_T *pUart = (OsxUart_T *)hUart;
    int iRead;
    unsigned int uTotal;
    unsigned int uStart;

    DBG_MSG(DBG_TRACE, "%s\n", __FUNCTION__);

    uTotal = 0;
    uStart = PortableGetTick();

    for ( ; ; )
    {
        iRead = read(pUart->hPort, pBuff+uTotal, uLength-uTotal);
        Retval = iRead != -1 ? S_OK : S_OK;
        CHECK_RETVAL(Retval, ExitOnFailure);                                                            

        uTotal = uTotal + iRead;

        if (uTotal == uLength)
        {
            break;
        }

        if (PortableGetTick() - uStart > uWaitTime)
        {
            Retval = (uTotal) ? S_OK : E_TIMEOUT;
            break;
        }

        PortableSleep(UART_MIN_READ_WAIT);
    }

    if (puRead)
    {
        *puRead = uTotal;
    }

ExitOnFailure:

    return Retval;
}
Exemplo n.º 5
0
int
BthModSendCommand(
    IN BthMod_T     *pMod,
    IN const char   *pCmd,
    OUT int         *pCmdResult,
    OUT char        *pResponse,
    IN uint16_t     Len
    )
{
    int ret;
    char Buf[256];

    if (pResponse)
    {
        memset(pResponse, 0, Len);
    }
    
    if (pCmdResult)
    {
        *pCmdResult = E_FAIL;
    }

    ret = UartLineWrite(pMod->hUart, pCmd, 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    PortableSleep(250);

    ret = UartLineRead(pMod->hUart, Buf, sizeof(Buf), 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    if (!strncmp(Buf, "AOK", 3))
    {
        if (pResponse)
        {
            strncpy(pResponse, Buf, Len);
        }

        if (pCmdResult)
        {
            *pCmdResult = S_OK;
        }
    }

    ret = UartPurge(pMod->hUart);
    CHECK_RETVAL(ret, ExitOnFailure);

ExitOnFailure:

    return ret;
}
Exemplo n.º 6
0
static void ComplexBackgroundTask(mint asyncObjID, void* vtarg)
{
	ComplexBackgroundArgs targ = (ComplexBackgroundArgs)vtarg;
	WolframIOLibrary_Functions ioLibrary = targ->ioLibrary;
	mint pausems = targ->pausemillis;
	mcomplex eventdata = targ->eventdata;
	DataStore ds;
	free(targ);

	PortableSleep(pausems);
	ds = ioLibrary->createDataStore();
	ioLibrary->DataStore_addComplex(ds, eventdata);
	ioLibrary->raiseAsyncEvent(asyncObjID, NULL, ds);
}
Exemplo n.º 7
0
/* Show state of modem status signals */ 
int 
UartTest(
    IN const char *pszPort
    )
{
    int Retval;
    uhandle_t hUart;
    unsigned int uStatus;

    DBG_MSG(DBG_TRACE, "%s\n", __FUNCTION__);

    Retval = UartCtor(&hUart);
    CHECK_RETVAL(Retval, ExitOnFailure);

    Retval = UartOpen(hUart, 
                      pszPort,
                      UART_RATE_57600, 
                      UART_DATA_BITS_8, 
                      UART_PARITY_NONE, 
                      UART_STOP_1);
    CHECK_RETVAL(Retval, ExitOnFailure);

    for ( ; ; )
    {
        Retval = UartGetStatus(hUart, &uStatus);
        CHECK_RETVAL(Retval, ExitOnFailure);

        UartTestShowModemStatus(uStatus);

        PortableSleep(1000);
    }
  
ExitOnFailure:

    UartDtor(hUart);

    return Retval;
}
Exemplo n.º 8
0
int
BthModSync(
    IN BthMod_T *pMod
    )
{
    int ret;
    char Buf[256];

    DBG_MSG(DBG_TRACE, "%s\n", __FUNCTION__);

    ret = UartLineWrite(pMod->hUart, "\n", 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    PortableSleep(100);

    ret = UartLineWrite(pMod->hUart, "\n", 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    PortableSleep(100);

    ret = UartPurge(pMod->hUart);
    CHECK_RETVAL(ret, ExitOnFailure);

    ret = UartLineWrite(pMod->hUart, "\n", 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    ret = UartLineRead(pMod->hUart, Buf, sizeof(Buf), 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    ret = (Buf[0] == '?') ? S_OK : E_FAIL;
    CHECK_RETVAL(ret, ExitOnFailure);

    /* Check the echo status */    
    ret = UartLineWrite(pMod->hUart, "+\n", 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    ret = UartLineRead(pMod->hUart, Buf, sizeof(Buf), 100);
    CHECK_RETVAL(ret, ExitOnFailure);

    /* Check the echo status */    
    ret = (strncmp(Buf, "ECHO OFF", 8) ||
           strncmp(Buf, "ECHO ON", 7)) ? S_OK : E_FAIL;
    CHECK_RETVAL(ret, ExitOnFailure);

    /* If echo is on we must turn it off */    
    if (!strncmp(Buf, "ECHO ON", 7))
    {
        ret = UartLineWrite(pMod->hUart, "+\n", 100);
        CHECK_RETVAL(ret, ExitOnFailure);

        ret = UartLineRead(pMod->hUart, Buf, sizeof(Buf), 100);
        CHECK_RETVAL(ret, ExitOnFailure);

        ret = UartLineRead(pMod->hUart, Buf, sizeof(Buf), 100);
        CHECK_RETVAL(ret, ExitOnFailure);

        ret = !strncmp(Buf, "ECHO OFF", 8) ? S_OK : E_FAIL;
        CHECK_RETVAL(ret, ExitOnFailure);
    }
    
ExitOnFailure:
    
    return ret;
}