Пример #1
0
boolean handleUDBSockets(void)
{
	uint8_t buffer[BUFLEN];
	int32_t bytesRead;
	int16_t i;
	boolean didRead = false;
	
	// Handle GPS Socket
	if (gpsSocket) {
		bytesRead = UDBSocket_read(gpsSocket, buffer, BUFLEN);
		if (bytesRead < 0) {
			UDBSocket_close(gpsSocket);
			gpsSocket = NULL;
		}
		else {
			for (i=0; i<bytesRead; i++) {
				udb_gps_callback_received_byte(buffer[i]);
			}
			if (bytesRead>0) didRead = true;
		}
	}
	
	// Handle Telemetry Socket
	if (telemetrySocket) {
		bytesRead = UDBSocket_read(telemetrySocket, buffer, BUFLEN);
		if (bytesRead < 0) {
			UDBSocket_close(telemetrySocket);
			telemetrySocket = NULL;
		}
		else {
			for (i=0; i<bytesRead; i++) {
				udb_serial_callback_received_byte(buffer[i]);
			}
			if (bytesRead>0) didRead = true;
		}
	}
	
	// Handle optional Serial RC input Socket
	if (serialSocket) {
		bytesRead = UDBSocket_read(serialSocket, buffer, BUFLEN);
		if (bytesRead < 0) {
			UDBSocket_close(serialSocket);
			serialSocket = NULL;
		}
		else {
			if (bytesRead>0) {
				sil_handle_seial_rc_input(buffer, bytesRead);
				didRead = true;
			}
		}
	}
	
	return didRead;
}
Пример #2
0
void sil_ui_update(void)
{
	uint8_t buffer[BUFLEN];
	int32_t bytesRead;
	int16_t i;

	// Handle stdin
	if (stdioSocket) {
		bytesRead = UDBSocket_read(stdioSocket, buffer, BUFLEN);
		for (i = 0; i < bytesRead; i++) {
			sil_handle_key_input(buffer[i]);
		}
	}

	sil_checkForLedUpdates();

	if (hasShownInitStates == 0 && waggle != 0) {
		printf("INIT: sensors calibrated and trims recorded.\n");
		printf("INIT: waiting for GPS...\n");
		hasShownInitStates = 1;
	} else if (hasShownInitStates == 1 && dcm_flags._.dead_reckon_enable == 1) {
		printf("INIT: GPS link acquired.\n");
		printf("INIT: Ready.\n");
		hasShownInitStates = 2;
	}
}
Пример #3
0
int ReceiveFromSocket(UDBSocket sock)
{
    int didReceive = 0;

    if (sock) {
        unsigned char Buffer[BUFLEN];
        int loops = 10;
        while (loops--) {
            long n = UDBSocket_read(sock, Buffer, BUFLEN);
            if (n < 0) {
                LoggingFile.mLogFile << "serial read failed" << endl;
                LoggingFile.mLogFile << UDBSocketLastErrorMessage() << endl;
                printf("%s\n", UDBSocketLastErrorMessage());
                CloseComms();
                break;
            } else {
                if (n == 0) {
                    break;
                } else {
                    int i;
                    for (i = 0; i < n; i++) {
                        if (HandleMsgByte(Buffer[i]) == 1) {
                            didReceive = 1;
                        }
                    }
                }
            }
        }
    }
    return didReceive;
}
Пример #4
0
int UDBSocket_write(UDBSocket socket, unsigned char* data, int dataLength)
{
	switch (socket->type)
	{
		case UDBSocketStandardInOut:
		{
			int i;
			for (i = 0; i < dataLength; i++)
			{
				_putch(data[i]);
			}
			fflush(stdout);
			return i;
		}
		case UDBSocketUDPClient:
		case UDBSocketUDPServer:
		{
			int bytesWritten;
			if (socket->type == UDBSocketUDPServer && socket->si_other.sin_port == 0)
			{
				UDBSocket_read(socket, NULL, 0);
				if (socket->si_other.sin_port == 0)
				{
					return 0;
				}
			}
			bytesWritten = (int)sendto(socket->fd, (char*)data, dataLength, 0, (const struct sockaddr*)&socket->si_other, sizeof(socket->si_other));
			if (bytesWritten < 0)
			{
				snprintf(UDBSocketLastError, LAST_ERR_BUF_SIZE, "sendto() Error Code : %d", WSAGetLastError());
				return -1;
			}
			return bytesWritten;
		}
		case UDBSocketSerial:
		{
			unsigned long bytesWritten;
			DWORD dwRetFlag;
			if (socket->hComms != 0)
			{
				dwRetFlag = WriteFile(socket->hComms, data, dataLength, &bytesWritten, NULL);
				if (!dwRetFlag)
				{
					snprintf(UDBSocketLastError, LAST_ERR_BUF_SIZE, "WriteFile Error = %d", GetLastError());
					//ShowMessage(ErrorString);
					return -1;
				}
			}
			else
			{
				//ShowMessage("Comm port not open");
			}
			return bytesWritten;
		}
		default:
			break;
	}
	return -1;
}
Пример #5
0
int UDBSocket_write(UDBSocket socket, unsigned char* data, int dataLength)
{
	switch (socket->type)
	{
		case UDBSocketStandardInOut:
		{
			int i;
			for (i = 0; i < dataLength; i++)
			{
				fputc(data[i], stdout);
			}
			fflush(stdout);
			return i;
		}
		case UDBSocketUDPClient:
		case UDBSocketUDPServer:
		{
			int bytesWritten;
			if (socket->type == UDBSocketUDPServer && socket->si_other.sin_port == 0)
			{
				UDBSocket_read(socket, NULL, 0);
				if (socket->si_other.sin_port == 0)
				{
					return 0;
				}
			}
			bytesWritten = (int)sendto(socket->fd, data, dataLength, 0, (const struct sockaddr*)&socket->si_other, sizeof(socket->si_other));
			if (bytesWritten < 0)
			{
				perror("sendto() failed");
				snprintf(UDBSocketLastError, LAST_ERR_BUF_SIZE, "sendto() failed");
				return -1;
			}
			return bytesWritten;
		}
		case UDBSocketSerial:
		{
			int bytesWritten = (int)write(socket->fd, data, dataLength);
			if (bytesWritten < 0)
			{
				perror("write() failed");
				snprintf(UDBSocketLastError, LAST_ERR_BUF_SIZE, "write() failed");
				return -1;
			}
			return bytesWritten;
		}
		default:
			break;
	}
	return -1;
}
Пример #6
0
uint8_t readSockets(void)
{
	uint8_t buffer[BUFLEN];
	int32_t bytesRead;
	uint8_t didRead = 0;
	
	if (transportSocket) {
		bytesRead = UDBSocket_read(transportSocket, buffer, BUFLEN);
		if (bytesRead < 0) {
			UDBSocket_close(transportSocket);
			transportSocket = NULL;
			printf("ERROR: read failed: %s\n", UDBSocketLastErrorMessage());
			exit(1);
		}
		else if (bytesRead > 0) {
			bytesRead = UDBSocket_write(stdioSocket, buffer, bytesRead);
			didRead = 1;
		}
	}
	
	if (stdioSocket) {
		bytesRead = UDBSocket_read(stdioSocket, buffer, BUFLEN);
		if (bytesRead > 0) {
			bytesRead = UDBSocket_write(transportSocket, buffer, bytesRead);
			if (bytesRead < 0) {
				UDBSocket_close(transportSocket);
				transportSocket = NULL;
				printf("ERROR: write failed: %s\n", UDBSocketLastErrorMessage());
				exit(1);
			}
			didRead = 1;
		}
	}
		
	return didRead;
}