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++; } } }
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; }
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; }
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; }
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; }
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); }
/* 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; }
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; }