2012-03-30 3 views
0

Ich versuche eine NodeJS-Bibliothek zu erstellen, die die Verwendung der seriellen (Uart) Ports des BeagleBone ermöglicht. Einige der Pins sind gemuxed, daher müssen einige Konfigurations-Bits in zwei Dateien geschrieben werden. Hier ist meine Funktion, die die Konfigurations-Bits schreibt die uart zu aktivieren:NodeJS auf BeagleBoard fs.write Fehler Unbekannt -1

var setMuxForUart = function (uart, next) { 
    var txFd, rxFd; 
    var txBuf = new Buffer(uart.muxTx.config, 'ascii'); 
    var rxBuf = new Buffer(uart.muxRx.config, 'ascii'); 
    var txBytesWritten, rxBytesWritten; 

    console.log ("Configuring UART MUX for " + uart.path); 

    txFd = fs.openSync (MUX_PATH + uart.muxTx.path, 'w'); 
    rxFd = fs.openSync (MUX_PATH + uart.muxRx.path, 'w'); 

    if (txFd && rxFd) { 
     try { 
      txBytesWritten = fs.writeSync (txFd, txBuf, 0, txBuf.length, 0); 
     } 
     catch (e) { 
      fs.closeSync (txFd); 
      fs.closeSync (rxFd); 
      console.log ('Error Writing to file: '+ MUX_PATH + uart.muxTx.path + ' | ' + util.inspect (e));    
      return; 
     } 

     try { 
      rxBytesWritten = fs.writeSync (rxFd, rxBuf, 0, rxBuf.length, 0); 
     } 
     catch (e) { 
      fs.closeSync (txFd); 
      fs.closeSync (rxFd); 
      console.log ('Error Writing to file: ' + MUX_PATH + uart.muxRx.path + ' | ' + util.inspect(e));    
      return; 
     } 

     fs.closeSync (txFd); 
     fs.closeSync (rxFd); 

     if (txBytesWritten && rxBytesWritten) { 
      console.log ("Uart MUX finished configuration"); 
      next(); 
     } 
     else { 
      console.log ("An error occured writing to the UART MUX."); 
     } 
    } 
    else { 
     console.log ("An error occured while opening the UART MUX files."); 
    } 
}; 

Hier ist die file dieses funcion enthält. Hier ist die Ausgabe läuft diese Funktion:

[email protected]:~/workspace/BonescriptSerial# node BonescriptSerial.js 
The "sys" module is now called "util". It should have a similar interface. 
Opening Serial Port for: /dev/ttyO1 
Configuring UART MUX for /dev/ttyO1 
Error Writing to file: /sys/kernel/debug/omap_mux/uart1_txd | { [Error: UNKNOWN, unknown error] errno: -1, code: 'UNKNOWN', syscall: 'write' } 

ich überprüft haben, dass die korrekte Ausgabe geschrieben wird, um Dateien zu testen, habe ich versucht, zahlreiche Mode-Parameter (‚0777‘ keine Rolle spielt), ich habe schon versucht, diese mit den sync und async-Funktionen vergebens, und ich habe auch versucht, erfolgreich, um diese Dateien in Python zu schreiben. Wenn Sie irgendwelche Ideen haben, die helfen würden, dieses Problem zu lösen, wäre ich sehr dankbar.

Hier ist eine github repo des Projekts, es ist in den Kinderschuhen, so dass es nicht viel Dokumentation gibt. Die Python-Version befindet sich ebenfalls im Repo.

Antwort

0

Dank Ben Noordhuis auf der NodeJS Google-Gruppe wurde ich auf das folgende Problem hingewiesen, das das Problem verursachte. Der Gerätetreiber, mit dem ich zu schreiben versuchte, akzeptiert anscheinend keine Schreibvorgänge mit willkürlichen Suchvorgängen. Um das zu umgehen, musste ich NodeJS dazu bringen, statt pwrite write zu verwenden. Der Trick besteht darin, dem Schreibbefehl mitzuteilen, dass er unter -1 statt 0 zu schreiben beginnt.

fs.writeSync (txFd, txBuf, 0, txBuf.length, -1);