RS485 Output to NI9871 RS485 Module, Adapter needed?

I have a device sending out an RS485 signal. It is a Multitek MultigGen M820-GM. It has a pinout labeled RS485 output "+", "-", and "S".
I've attached a manual "MultiGen Manual - 8xx.pdf". Page 71 has the pinout I above. I have also followed the setup instructions on page 43 for the RS485 output and matched them in my code. (snippet attached)
I have the NI 9871 module on my cRIO, which has 4 ethernet ports. I've wired directly from the + and - outputs of the device to the RX + and - wires on an ethernet cable and don't see anything.
Do I need an adapter to make this work? The module's page here on ni.com doesn't have any accessories listed, but maybe I'm missing something. I don't have much experience with modbus, rs485, or ethernet in general.
Thank you,
James
LabVIEW Professional 2014
Attachments:
MultiGen Manual - 8xx.pdf ‏629 KB
multigen.pdf ‏800 KB
Test RS485 Input Snippet.png ‏67 KB

I've looked in to a little bit further and I don't think an adapter is required... The picture here on the NI's website has a cable going straight from ethernet to RS485 without an adapter. The module itself has a power input, so I believe this means the module itself has some circuitry that takes care of this.
James
LabVIEW Professional 2014

Similar Messages

  • Module Adapter - String Change in XML

    Module Adapter
    I have been reading "How to Create Modules for the J2EE Adapter Engine" and am trying to implement an adapter module to change a few strings in the message.
    I understand I can grab the XI message using the getPrincipalData such as:
    // get the XI message from the environment
    Message msg = (Message) inputModuleData.getPrincipalData();
    and return the message using:          
    // provide the XI message for returning
    inputModuleData.setPrincipalData(msg);
    What is the proper method of searching for strings inside this message and changing a value. We have tried the approach of using XSLT and Java maps to change values but the items we need to change need to occur at the adapter level. Any sample code around changing payload information in an adapter module would be appreciated.
    Regards

    Hi,
    The methods which you use with SAX parser are:
    1) Start of the document(startDocument)
    2) start of the element(startElement)
    3) end of the element(endElement)
    4) end of the document(endDocument)
    5) chars()
    Build your logic using these. These blogs should help you in the process:
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-i
    /people/prasad.ulagappan2/blog/2005/06/29/java-mapping-part-ii
    You could write the java code in the process method of your bean or you could call the class from the process method.
    What exactly do you mead by testng the adapter module? You could test your the java code i.e the SAX parser as you would test any standalone java code. You would be using the same in your bean.
    Regards,
    Chandra

  • Throw Error in Module Adapter EJB

    Hi experts,
    In order to make some validations when getting file in File Adapter, was developed a EJB Module Adapter. When the validation failed, it must to be generate a throw error with a text that appears in Runtime workbench.
    throw new ModuleException("Error al crear objeto Archivo para procesar el legacy: "+legacy);
    But, it doens't happen. In Runtime workbench I just can see a Exception null . 
    Follow Below the Java Code of Module EJB:
    package clasesSox;
    import java.io.IOException;
    import java.io.InputStream;
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    import java.util.StringTokenizer;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    import com.sap.aii.af.mp.module.ModuleException;
    @author martin.j.rodriguez
    public class Archivo extends XMLParser {
         private Log log = LogFactory.getLog(Archivo.class);
         private Config config;
        private String nombre, tipoSistema, pais;
        private Date fecha;
        //private boolean procesado;
         //private org.xml.sax.XMLReader xr;
         private double totimp, importeParcial;
        private String buscaTOTIMP, regImporte, buscaTOTLIN;
        private String [] tags;
        private InputStream inputStream;
        private int totlin, regCuenta;
        public Archivo(InputStream is, String legacy) throws ModuleException {
             super();
             Map properties = getConfig().getConfig(legacy);
              if (properties == null) {
                   if (log.isErrorEnabled()){
                        log.error("Error al crear objeto Archivo para procesar el legacy: "legacy" - No se encontro la configuración.");
                   throw new ModuleException("Error al crear objeto Archivo para procesar el legacy: "+legacy);
              this.buscaTOTIMP = (String)properties.get(Config.CAMPO_IMPORTE_TOTAL);
              this.regImporte =  (String)properties.get(Config.CAMPO_IMPORTE);
              this.buscaTOTLIN = (String)properties.get(Config.CAMPO_LINEAS_TOTAL);
              String tagstosearch = (String)properties.get(Config.CAMPO_LINEAS_CONTAR);
              StringTokenizer st = new StringTokenizer(tagstosearch, ",");
              tags = new String[st.countTokens()];
              int i=0;
              while(st.hasMoreTokens()){
                   String token = st.nextToken();
                   tags[i++] = token.trim();
              setInputStream(is);
        public List validaArchivo() throws ParserConfigurationException, SAXException, IOException {
              regCuenta = 0;
             importeParcial = 0;
              DefaultHandler handler = this;
              SAXParserFactory factory = SAXParserFactory.newInstance();
              SAXParser saxParser = factory.newSAXParser();
              saxParser.parse(inputStream, handler);
              String s = "";
              roundValues();
              String stotimp = new BigDecimal(totimp).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
              String simporteParcial = new BigDecimal(importeParcial).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
              if (log.isDebugEnabled()){
                   log.debug("Resultados: TOTIMP: "stotimp" - CONTEO: "+simporteParcial);
                   log.debug("Resultados: TOTLIN: "totlin" - CONTEO: "+regCuenta);
              List results = new ArrayList();
              if (totimp != importeParcial) {
                   s = "Error al contar el total del importe, deberia ser: "stotimp" y el calculado es: "+simporteParcial;
                   if (log.isDebugEnabled()){
                        log.debug(s);
                   results.add(s);
              if (totlin != regCuenta) {
                   s = "Error al contar el total del lineas, deberia ser: "totlin" y el calculado es: "+regCuenta;
                   if (log.isDebugEnabled()){
                        log.debug(s);
                   results.add(s);
              return results;
         private void roundValues() {
              totimp = roundValue(totimp);
              importeParcial = roundValue(importeParcial);
    redondea un numero a 2 decimales
         private double roundValue(double d) {
              BigDecimal bd = new BigDecimal(d);
              bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
              return bd.doubleValue();
         public void startElement(String namespaceURI, String lName, String qName, org.xml.sax.Attributes attrs) throws org.xml.sax.SAXException {
              String etiqueta = getTagName(qName, lName);
              //niveles.add(etiqueta);
              // Cuenta registros
              for (int i = 0;i< tags.length; i++){
                   if (etiqueta.equals(tags+)){
                        regCuenta++;
                        break;
         public void endElement(String namespaceURI, String lName, String qName)     throws org.xml.sax.SAXException     {
              String etiqueta = getTagName(qName, lName);
              //niveles.remove(niveles.size() - 1);
              // set valor totlin
              if (buscaTOTLIN.equals(etiqueta)){
                   totlin = parseInt(valor);
              // set valor totimp
              if (buscaTOTIMP.equals(etiqueta)){
                   totimp = parseDouble(valor);
              // suma importe parcial
              if (regImporte.equals(etiqueta)){
                   importeParcial += parseDouble(valor);
        public InputStream getInputStream() {
            return inputStream;
        public void setInputStream(InputStream texto) {
            this.inputStream = texto;
        public String getNombre() {
            return nombre;
        public void setNombre(String nombre) {
            this.nombre = nombre;
        public String getTipoSistema() {
            return tipoSistema;
        public void setTipoSistema(String tipoSistema) {
            this.tipoSistema = tipoSistema;
        public String getPais() {
            return pais;
        public void setPais(String pais) {
            this.pais = pais;
        public java.util.Date getFecha() {
            return fecha;
        public void setFecha(java.util.Date fecha) {
            this.fecha = fecha;
         public static void main(String args[]) {
                   String fileName = "FI_MAS_SAP_RENBAN_####_AAAAMMDD_HHMMSS.TXT";
                   java.util.StringTokenizer st = new java.util.StringTokenizer(fileName, "_");
                   for (int i = 0; i < 5; i++)
                        st.nextToken();
                   String anioMes = st.nextToken();
                   if (anioMes != null)
                        if (anioMes.length() > 5) {
                             System.out.println(anioMes);
                             System.out.println(anioMes.substring(0, 4) + " " + anioMes.substring(4, 6));
         private double parseDouble(String number){
              if (number == null || number.trim().length()==0 || number.trim().equals("/"))
                   return 0;
              // remuevo los 0 a la izquierda que afectan al parseint
              number = number.trim().replaceAll("^0+","");
              number = number.replaceAll(",",".");
              double result = 0;
              try {
                   result = Double.parseDouble(number);
              catch (NumberFormatException nfe){
                   System.err.println("Error parseando numero "+number);
              return result;
         private int parseInt(String number){
              if (number == null || number.trim().length()==0 || number.trim().equals("/"))
                   return 0;
              // remuevo los 0 a la izquierda que afectan al parseint
              number = number.trim().replaceAll("^0+","");
              number = number.replaceAll(",",".");
              int result = 0;
              try {
                   result = Integer.parseInt(number);
              catch (NumberFormatException nfe){
                   System.err.println("Error parseando numero "+number);
              return result;
    Carga la configuracion
    @return
         protected Config getConfig(){
              if (config == null){
                   ConfigParser cp = new ConfigParser();
                   config = cp.readConfig();
              return config;
    Could anyone help me about this problem ?
    Thanks in advance.+

    Hi,
    do u think, u will get the error text in the RWB ? I don't think so, it will provide the output in the RWB.
    The output of the Adapter module is nothing but XI -XML message. So this will not come
    check it out for the how to work on Adapter Modules-
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/f013e82c-e56e-2910-c3ae-c602a67b918e
    Hope this helps,
    Regards,
    Moorthy

  • Lowlevel video output switch controls? Modulized, why?

    Hi
    Well, i use Arch on my laptop. And there is one thing, which makes me wanna jump on it. The Lowlevel video output switch controls kernel module. I need this activated in order to switch between the projector and my laptop, I have my finals soon so its important this works as it should.
    Would it be possible to enable this module in later pacman-versions of the kernel? At the time beeing, I would have to recompile everything my self. Which I have yet to become successful at, something is always wrong. But I`ll summarize what I would like to do:
    #Build a kernel with this option, choosing it from grub at boot-time. But still have the "pacman-version" in case i mess up somethings up.
    NOTE I use luksEncrypted root, does this option do anything to the kernel? Since the installer asks if you need to boot from an encrypted volume. Just asking...
    Anyway, can I just download the kernel source. Run make menuconfig, activate the Low level video output switch controls. Then -> make modules_install? And then copy the kernel-version over to boot, and use it? Or what else?
    Thank you so much for helping, took me ages discovering this feature was disabled on purpose.

    sveinemann wrote:Nice, any idea when it`ll be in core? I cant risk having an unstable kernel, this is my work laptop <3
    Not before next weekend. My best guess is next Wednesday or later.

  • Value mapping access from XI module adapter

    Hi,
    is it possible to access a value mapping from an XI module adapter?
    Thanks
    Yann

    hi
    1)what is the differnce between ValueMappingReplication(Asynchronous) and ValueMappingReplicationSynchronous .
    In sync you will get the value mapping replication status back and in async you won't. In sync based on the response u can update again in case of any failure. If data size is large use async.
    2) Message type ValueMappingReplication contains Operation ,GroupId,Context,scheme,agency.
    what is the meaning of Operation??
    The operation that you are going to perform. Below is the operations list and the contents to be set in the message for the same
    Insert = all fields must be set;
    Delete =all fields must be set;
    DeleteGroup = fields GroupID and context must be set;
    DeleteContext = field Context must be set;
    DeleteContextGeneric = Context contains the starting part for the context to be deleted
    what is the use of group ID??
    Displays the different representations of an object.
    A value mapping group is identified uniquely by a GUID.
    You can also assign a name to a value mapping group.
    is this necessary to maintain all these values in Ztable and also source and target values ?? and use them in Abap aproxy logic??
    no. system creates the value mapping table. you can take it frm there. no need of any ztables.
    3) is there any Message Mapping Needed.?? and Interface Mapping Needed to implement value Mapping replication??
    You will be sending the value mapping data from a sender system. If it can sent in the same format not required, otherwise you will have to.
    4)what is the Sender Adapter type ??
    Any adapter...depends on the sender system.
    5) if I did replication from SAP..can I see the details in ID
    You can see it in Cache monitoring in RWB.
    for more details refer
    http://help.sap.com/saphelp_nw70/helpdata/EN/13/ba20dd7beb14438bc7b04b5b6ca300/content.htm
    rgds
    Arun

  • Strange output of the PID module

    Dear all, 
    I meet a problem when using the PID module. I am only set P and use the PID as a linear gain. I found in some of my VIs , the output of the PID module is the opposite value, while in other VIs, the output is normal. In these case, I used to set the linearity of the PID as -1. Even though the VI can run normally in this way, I want to figure out what shall be the wrong about the PID module. Could you help me explain about the strange behavior about the PID module?
    Please see the attached file, I add some probes like 24 and 25 to show the values that represent this problem.
    Thanks
    best
    Attachments:
    PID module opposite output.png ‏193 KB

    Your set point is set to zero, your process variable appears to be 8.181 i.e. too high and error (SP-PV) is negative, so the output of your controller should be negative (-8.181 x Kp). The controller output is clamped to be between 0.5 and -0.5, and it is -0.5V, which is what you would expect if your Kp is the 0.1 one (I can't see which set of gains it is).
    So it appears to be correct ?
    Note: linearity should be between 0 and 1 (read the manual). Keep this set to 1 until you know things are working and only change if you need nonlinearity with error.
    Consultant Control Engineer
    www-isc-ltd.com

  • Possible to trigger output type through Function module?

    Hi,
    Is it possible to trigger output type through Function modules or through some codings or any standard FM's?
    Regards
    Bala.

    You did not specify what area you need to retrigger an output type for, but here is a sample to retrigger a delivery output.
      CALL FUNCTION 'BAPI_LIKP_PROCESS_MSG_DIRECT'
        EXPORTING
      DYNAMICOUTPUTDEVICE       =
          processing                       = PROCESSING
      SORTMESSAGE               = 1
        TABLES
          deliverynumber                 = delnbrs
          outputtype                       = outputs
          messageprotocol              = bapimsgprot
          return                              = bapiret2.
    Thanks

  • Module Adapter XI

    Hi Guys,
      I need yours help for creating a Module Adapter. In my scenario I have to implement a Java Module that receive a Microsoft Word document. I must to convert this file en Base64 format and push in the principalData.
      The first problem that I saw is when I have captured the file xx.doc in inputModuleData.getPrincipalData is null.
      The suplementary data contains the fileName and FileCompleted parameters with the fileName and FileCompleted have the value 1.
       How can I get the binary data from a java object?
       I don't know any SAP site where I can see the API for Module Adapter.
    Thanks
    Ivá

    Hi,
    Check some links on Module adapter.
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/02706f11-0d01-0010-e5ae-ac25e74c4c81
         http://help.sap.com/saphelp_nw04/helpdata/en/8b/895e407aa4c44ce10000000a1550b0/content.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/12/f9bb2fe604a94cbcb4c50dc510b799/content.htm
    /people/michal.krawczyk2/blog/2006/10/09/xi-dynamic-configuration-in-adapter-modules--one-step-further
         /people/gowtham.kuchipudi2/blog/2006/01/04/testing-sample-adapter
    /people/john.ta2/blog/2006/12/20/to-create-or-not-to-create-an-sap-xi-adapter
         https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/02706f11-0d01-0010-e5ae-ac25e74c4c81
    Exchange Infrastructure How-to Guides for SAP NetWeaver 2004 [original link is broken]
    /people/sap.user72/blog/2005/07/04/read-excel-instead-of-xml-through-fileadapter
    /people/sap.user72/blog/2005/07/15/copy-a-file-with-same-filename-using-xi
    PPT: https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e21106cc-0c01-0010-db95-dbfc0ffd83b3
    How to Guide: https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/f013e82c-e56e-2910-c3ae-c602a67b918e
    Regards,
    Phani

  • Module Context - Module adapter development question

    Hi,
    I've been using the method moduleContext.getContextData(nameParameterChannel) to get values from the communication channel for my custom modules adapter.
    Reading the [API|http://help.sap.com/javadocs/pi/SP3/xpi/com/sap/aii/af/lib/mp/module/ModuleContext.html] there is another method for which I'm not sure what it does:
    --> getContextData(String name, boolean fallback)
    Returns a value of a module configuration parameter and if fallback is true and the parameter cannot be found in the module configuration it is tried to read it from the channel configuration data
    With the usual method --> getContextData(String name), I've been always reading from the channel configuration data (name being the name of the parameter and the string returned being the value).
    So what does that method above do? That place "module configuration" in contrast to "channel configuration data" is not clear to me.
    Thanks!

    Closing (not solution yet)

  • Runtime Error Custom Module Adapter 7.31

    Hi experts.
    We've developed a custom module adapter to be used in HTTP_AAE sender adapter. The deployement is successfull, the module is started but we are facing this error at runtime:
    Error in processing caused by: com.sap.aii.adapter.http.api.HttpAdapterException: ERROR_IN_MODULECHAIN, null
    ¿Any idea what can be happening?
    We are working with version 7.31 SP 10 Java only stack installation.
    Thanks a lot.
    Kind regards.
    Christian.

    Hi Amit.
    Thank u so much but your response.
    Regarding your quesion, yes I have done it.
    Regards.
    Christian.

  • See Burger Error in BICMODULE-module:Adapter call failed. Reason: null

    Hello All,
    Scenario IDOC to File using Seeburger BIC problems in in my receiver adapter when converting from XML to EDI.
    Error is:
    "Message processing failed. Cause: Error in BICMODULE-module:Adapter call failed. Reason: null"
    The Seeburger modules used in my receiver adapter:
    1     localejbs/CallBicXIRaBean     Local Enterprise Bean     BIC_MT
    2     localejbs/CallBicXIRaBean     Local Enterprise Bean     BIC
    3     localejbs/Seeburger/FileStore     Local Enterprise Bean     ARCHIVE_EDI
    4     CallSapAdapter     Local Enterprise Bean     0
    with following module configurations
    BIC     destDelimiter     @http://seeburger.com/xi/bic/destDelimiter
    BIC     destSourceMsg     source
    BIC     destTargetMsg     MainDocument
    BIC     dynamicConfiguration     true
    BIC     newLine     true
    BIC     useAttribIfSet     true
    BIC_MT     PartnerLookup     on
    BIC_MT     destSourceMsg     MainDocument
    BIC_MT     destTargetMsg     MainDocument1
    BIC_MT     mappingName     XML_Generic_ANSI_X12_to_DB_MT_OUT
    BIC_MT     saveSourceMsg     source
    Can some one tell me why there is an Error and what additional module configurations it requires .
    Thank you,

    Hi,
    If possible go to mapping in BIC designer Tool and execute the same by passing your payload there...
    if you encounter any errors then there might be a problem with mapping developed...or can be payload..
    Also check the parameter used for destSourceMsg source ...is that the source message which contains the payload ?
    HTH
    Rajesh

  • Could not find network adapter needed for registration

    Cisco IP Communicator has worked well for a month now. One morning I go to launch the app and I get the error message: Could not find network adapter needed for registration. I rebooted my pc and I got the same result. I reinstalled the app and got the same results. I don't know what if anything changed, but I know I can't even get the application to load to look at any settings. PLEASE HELP!!!
    Brian C

    Hi Brian,
    Have a look at this good thread :)
    http://forum.cisco.com/eforum/servlet/NetProf?page=netprof&forum=Unified%20Communications%20and%20Video&topic=IP%20Telephony&topicID=.ee6c829&fromOutline=&CommCmd=MB%3Fcmd%3Ddisplay_location%26location%3D.2cc0bb6f
    Hope this helps!
    Rob

  • Portege R700 PT311A - Network Adapter needs to be installed

    My Toshiba Portg R700 (PT311A-06600Q) will not connect to the internet.
    It says that a Network Adapter needs to be installed and configured, but I do not have the disc to do this, nor do I have an internet connection on my laptop to download the driver.
    I have attempted to download the driver onto a USB, using another laptop, then using that USB, I have tried to install it onto the problem computer, but it won't install.
    There is no Windows installed on the problem computer, may this be an issue as to why the driver won't install?
    Help me, please!

    Hi
    I hope you picked up the right driver.
    Not quite sure if you are talking about LAN driver or WLan driver and what Windows system you are using but fact is that all drivers for this unit can be found here:
    http://www.mytoshiba.com.au/support/download
    I would recommend you to check once again if you downloaded the proper driver. Then move the driver package to the notebook (desktop). Unzip the package and execute the setup or install exe file.
    In case you would not find any exe files in the package, I would recommend you to install the driver within the device manager.

  • Storing the output of a function module into a custom table

    Hi Gurus,
    Is it possible to store the output of a function module into a custom table.How can this be done?Is it complex?

    hi,
    After u execute the FM and get values in the internal table ITAB_RESULT. Create a custom table having structure same as ITAB_RESULT call it ZRESULT.
    data :wa type ITAB_RESULT.
    call FM and get result it ITAB_RESULT
    loop at itab_result.
    move-corresponding itab_result to wa.
    insert wa to ZRESULT.
    endloop.
    Regards,
    Mansi.

  • TestStand internal mechanism: call sequence/ architecture c++ code module adapter, .dll functions

    I would like to know more about this particular aspect of TestStand's architecture:
    What exactly happens "internally" (class/seq diagram ?)when a c/c++ dll code module adapter step invokes/ calls an exported .dll function (testStand sequence executed from sequenceEditor) ?
    My guess (wrong/correct ?) is that:
    I execute
    SeqEdit.exe
    which hosts
    teengn.dll
    which hosts
    cppAdp.dll
    which hosts
    "myDllWithExportedFunctions.dll"
    and (finally) directly calls exported functions of "myDllWithExportedFunctions.dll"

    Christoph -
    Your binary file presentation at a high level is correct.
    The object relationship is:
    - The Sequence Editor is just a client of the TestStand engine.
    - The Engine is the creator of all TestStand objects.
    - The Engine creates the Sequence File object for the Sequence Editor.
    - The Sequence File has a reference to a Sequence object, i.e. RunState.SequenceFile.Data.Seq["MainSequence"]
    - The Sequence has a reference to a Step object, i.e. RunState.SequenceFile.Data.Seq["MainSequence"].Main["Action"]
    - The Step has a Module object, i.e. RunState.SequenceFile.Data.Seq["MainSequence"].Main["Action"].TS.SData
    - The Module object uses its associated Adapter class to Load/Run code modules.
    - The DLL handle and function pointer are stored
    in the Module object.
    - The Module object with the Adapters help knows how to call the function in the DLL.
    Scott Richardson (NI)
    Scott Richardson
    National Instruments

Maybe you are looking for

  • Airport no longer connects on startup

    It used to be that when I started up my computer I had it set to automatically connect to a specific network. In my Network settings that network is correctly entered into the proper field. Now it no longer connects automatically and I have to either

  • PACKAGE

    Dear all, 1) Can anyone tell me how to import all java packages like java.util , java.io in a single import statement. 2) If i want to find a perticular .class file from the all packages of java , how can I achieve this? With Regards. SUJOY

  • How to delete a folder having "access is denied"

    sir my problem is:  i had created 3 folders "updates" ,  "mount" and "win8.1" and extracted the windows 8.1 image into win8.1 folder and msu files in "update" folder. using DISM command i have mounted it as: c:\>Dism  /mount-wim  /wimfile:c:\win8.1\s

  • File uploading in jsp

    this is rambabu, i am new to fileuploading concepts. any body help me how to upload a file .please send me the code to mail.my mail id is [email protected]

  • 5.1 Audio Support for MacBook

    Hi Guys, I intend to purchase a nice set of external speakers to boost my music and movie enjoyment. However, I'm not sure if my MB can support the 5.1 nature of the speakers. Some posts here indicate that I have to purchase the Griffin FireDrive (??