void disconnectBrailleResource ( BrailleDisplay *brl, BrailleSessionEnder *endSession ) { if (brl->gioEndpoint) { if (endSession) endSession(brl); drainBrailleOutput(brl, 0); gioDisconnectResource(brl->gioEndpoint); brl->gioEndpoint = NULL; } }
static int writeData (BrailleDisplay *brl, const unsigned char *bytes, int count) { ssize_t result = serialWriteData(serialDevice, bytes, count); if (result == -1) { logSystemError("write"); return 0; } drainBrailleOutput(brl, 0); brl->writeDelay += (result * 1000 / serialCharactersPerSecond) + POST_COMMAND_DELAY; return 1; }
int probeBrailleDisplay ( BrailleDisplay *brl, unsigned int retryLimit, GioEndpoint *endpoint, int inputTimeout, BrailleRequestWriter *writeRequest, BraillePacketReader *readPacket, void *responsePacket, size_t responseSize, BrailleResponseHandler *handleResponse ) { unsigned int retryCount = 0; if (!endpoint) endpoint = brl->gioEndpoint; while (writeRequest(brl)) { drainBrailleOutput(brl, 0); while (gioAwaitInput(endpoint, inputTimeout)) { size_t size = readPacket(brl, responsePacket, responseSize); if (!size) break; { BrailleResponseResult result = handleResponse(brl, responsePacket, size); switch (result) { case BRL_RSP_DONE: return 1; case BRL_RSP_UNEXPECTED: logUnexpectedPacket(responsePacket, size); case BRL_RSP_CONTINUE: break; default: logMessage(LOG_WARNING, "unimplemented braille response result: %u", result); case BRL_RSP_FAIL: return 0; } } } if (errno != EAGAIN) #ifdef ETIMEDOUT if (errno != ETIMEDOUT) #endif /* ETIMEDOUT */ break; if (retryCount == retryLimit) break; retryCount += 1; } return 0; }
int showBrailleText (const char *mode, const char *text, int minimumDelay) { int ok = writeBrailleText(mode, text); drainBrailleOutput(&brl, minimumDelay); return ok; }