Modyfikacja biblioteki

0

Witam,

nie umiem sobie poradzić z podmianą klasy w bibliotece. Nigdy takiego czegoś nie robiłem więc pewnie to dlatego. Potrzeuję tego w takim przypadku http://rxtx.qbang.org/wiki/index.php/Trouble_shooting#How_does_rxtx_detect_ports.3F__Can_I_override_it.3F gdzie muszę dopisać linijkę "rfcomm" aby biblioteka obsługiwała porty przez bluetootha. Ściągnąłem z podanego linka plik RXTXCommDrivers ale podczas kompilacji mam błędy. Może mógłby mi ktoś to podmienić albo powiedzieć jak to zrobić.
Plik biblioteki to http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip, chodzi o wersję dla linuxa oczywiście.

Pozdrawiam,
daniel

0

Najprościej jest ściągnąć źródła, je zmienić i skompilować.
http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7r2.zip

Można jednak zmieniać pliki class w jarze ręcznie. Jeżeli to jest zwykła podmiana napisu, to może się udać.

np. taki kod:

String[] Temp = {
		"ttyS", // linux Serial Ports
		"ttySA", // for the IPAQs
		"ttyUSB" // for USB frobs
};

Przekłada się na:
^A^@^DttyS^A^@^EttySA^A^@^FttyUSB^A^@^O

Jest więc szansa, że jeżeli podmienisz jeden z tych napisów na swój, to będzie działać.

Tylko do tej zmiany musisz użyć odpowiedniego edytora, który umożliwia edycję plików binarnych - najlepiej vim'a.

0

A nie lepiej, jak ma zrodla, wyszukac ta jedna klase, podmienic po ludzku w pliku tekstowym, skompilowac i podmienic?

0

Ściągnąłem ten folder ftp://ftp.qbang.org/pub/rxtx/rxtx-2.0-7pre2.tar.gz czyli to co niby ma być modyfikowane wg Trouble Shooting, a przynajmniej tam jest plik RXTXCommDriver gdzie są linijki wyglądające tak, jak te które mam podmienić. Pod tym linkiem co podałeś __krzysiek85 nie widziałem czegoś takiego.
W każdym razie dalej. Dopisalem sobie linijke

String[]Temp =
	    {
	      "comx",		// linux COMMX synchronous serial card
		"holter",	// custom card for heart monitoring
		"modem",	// linux symbolic link to modem.
		"rfcomm",	// wirtualny RS232       <-----DOPISANA LINIJKA
		"ttyircomm",	// linux IrCommdevices (IrDA serial emu)
		"ttycosa0c",	// linux COSA/SRP synchronous serial card
		"ttycosa1c",	// linux COSA/SRP synchronous serial card

i teraz co dalej?
Bo jak nie musiałem modyfikować to potrzebowałem plik biblioteki RXTXcomm.jar, jak go teraz zrobić?
Drugi plik to librxtxSerial.so, jak go wygenerować?

0

Przejrzyj http://www.jboss.org/javassist, to może rozwiązać Twój problem

0

Mam wrażenie, że już wiem o co chodzi. Jest tylko taki problem, że jak próbuję skompilować ten podmieniony plik w katalogu ze źródłami to dostaję serię błędów. Dokładnie to chodzi o to:

					if(osName.equals("Linux"))
					{
						String[] Temp = {
						"ttyS", // linux Serial Ports
						"ttySA", // for the IPAQs
						"ttyUSB", // for USB frobs
						"rfcomm"
						};
						CandidatePortPrefixes=Temp;
					}
					else if(osName.equals("Linux-all-ports"))
					{
					/* if you want to enumerate all ports ~5000
					   possible, then replace the above with this
					*/
						String[] Temp = {
						"comx",      // linux COMMX synchronous serial card
						"holter",    // custom card for heart monitoring
						"modem",     // linux symbolic link to modem.
					        "rfcomm",       // bluetooth serial device
						"ttyircomm", // linux IrCommdevices (IrDA serial emu)
						"ttycosa0c", // linux COSA/SRP synchronous serial card
						"ttycosa1c", // linux COSA/SRP synchronous serial card
						"ttyC", // linux cyclades cards
						"ttyCH",// linux Chase Research AT/PCI-Fast serial card

W konsoli otrzymuję:

daniel@daniel-laptop:~/Pulpit/rxtx-2.1-7r2/src$ sudo javac RXTXCommDriver.java
RXTXCommDriver.java:36: cannot find symbol
symbol: class CommDriver
public class RXTXCommDriver implements CommDriver
                                       ^
RXTXCommDriver.java:794: cannot find symbol
symbol  : class CommPort
location: class gnu.io.RXTXCommDriver
	public CommPort getCommPort( String PortName, int PortType )
	       ^
RXTXCommDriver.java:57: cannot find symbol
symbol  : variable RXTXVersion
location: class gnu.io.RXTXCommDriver
		String JarVersion = RXTXVersion.getVersion();
		                    ^
RXTXCommDriver.java:60: cannot find symbol
symbol  : variable RXTXVersion
location: class gnu.io.RXTXCommDriver
		        LibVersion = RXTXVersion.nativeGetVersion();
		                     ^
RXTXCommDriver.java:160: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
				CommPortIdentifier.addPortName(
				^
RXTXCommDriver.java:257: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
						CommPortIdentifier.addPortName(
						^
RXTXCommDriver.java:308: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
		for (int PortType=CommPortIdentifier.PORT_SERIAL;PortType<=CommPortIdentifier.PORT_PARALLEL;PortType++) {
		                  ^
RXTXCommDriver.java:308: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
		for (int PortType=CommPortIdentifier.PORT_SERIAL;PortType<=CommPortIdentifier.PORT_PARALLEL;PortType++) {
		                                                           ^
RXTXCommDriver.java:329: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
				CommPortIdentifier.addPortName(PortName,
				^
RXTXCommDriver.java:380: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
			case CommPortIdentifier.PORT_SERIAL:
			     ^
RXTXCommDriver.java:385: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
			case CommPortIdentifier.PORT_PARALLEL:
			     ^
RXTXCommDriver.java:500: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
				case CommPortIdentifier.PORT_SERIAL:
				     ^
RXTXCommDriver.java:731: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
			case CommPortIdentifier.PORT_PARALLEL:
			     ^
RXTXCommDriver.java:800: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
				case CommPortIdentifier.PORT_SERIAL:
				     ^
RXTXCommDriver.java:804: cannot find symbol
symbol  : class RXTXPort
location: class gnu.io.RXTXCommDriver
						return new RXTXPort( PortName );
						           ^
RXTXCommDriver.java:808: cannot find symbol
symbol  : class RXTXPort
location: class gnu.io.RXTXCommDriver
						return new RXTXPort( deviceDirectory + PortName );
						           ^
RXTXCommDriver.java:810: cannot find symbol
symbol  : variable CommPortIdentifier
location: class gnu.io.RXTXCommDriver
				case CommPortIdentifier.PORT_PARALLEL:
				     ^
RXTXCommDriver.java:811: cannot find symbol
symbol  : class LPRPort
location: class gnu.io.RXTXCommDriver
					return new LPRPort( PortName );
					           ^
RXTXCommDriver.java:816: cannot find symbol
symbol  : class PortInUseException
location: class gnu.io.RXTXCommDriver
		} catch( PortInUseException e ) {
		         ^
19 errors

Plik so z tego co wiem to zostaje ten sam, a jakby udało się to skompilować to pakuje jarem i wszystko powinno grać. Pomożecie?

0

Zamiast zmieniac biblioteke mozesz sobie zrobic odpowiednie dowiazanie i np do bluetooth odolywac sie jak do /dev/ttyS5

0

To akurat byłoby też niezłe rozwiązanie, ale nie wiem za bardzo jak to zrobić.

tak? :
ln /dev/rfcomm0 /dev/ttyS5

i wtedy mogę używać normalnie tej biblioteki? już nic nie muszę zmieniać?

EDIT:
niestety nie widzi tego :-/
a tak pięknie by było

A w jaki sposób przebudować tą bibliotekę w Eclipse? teraz robiłem to w terminalu

1 użytkowników online, w tym zalogowanych: 0, gości: 1