throbber
RGBLOG.TXT
`
`From 72103.2235@compuserve.com Sat Sep 10 17:30:53 1994
`Received: from arl-img-l.compuserve.com by flash.cmotor.com with SMTP id AA06838
`(5.65c/IDA-1.5 for <stuartg@cmotor.com>); Sat, 10 Sep 1994 17:30:49 -0700
`Received: from localhost by arl-img-l.compuserve.com (8.6.4/5.940406sam)
`id UAA20597; Sat, 10 Sep 1994 20:38:03 -0400
`Date: 10 Sep 94 20:34:49 EDT
`From: Dave Brown <72103.2235@compuserve.com>
`To: Marc McClung <76336.3110@compuserve.com>
`Cc: Jay Clark <72234.627@compuserve.com>, Stuart Goodnick <stuartg@cmotor.com>
`subject: WOSA/XMC Function Evolution
`Message-Id: <940911003449_72103.2235_GHB81-1@CompuServe.COM>
`Status: R
`
`Hi Marc,
`
`If you have any specific suggestions or questions on any of the functions or OLE
`2.0 interfaces within the WOSA/XMC software specification please let me know.
`Also, if you feel there are any confusing areas or technologies described in the
`specification, let me know and I will try to either clarify or add more detail
`to the current document in those locations.
`
`For a general time line, I would like to complete the third revision to the
`speciflcation by october 1.
`
`In the mean time, I will be working on the lower level hardware dependent
`software. ’
`
`Feel free to either call or email me any time. I check my email daily.
`
`Best Regards,
`
`Dave Brown
`ROY-G-BIV Corporation
`
`From 72103.2235@compuserve.com Tue Sep 20 13:56:44 1994
`Received: from dub-img-l.compuserve.com by flash.cmotor.com with SMTP id AA01412
`(5.65C/IDA-1.5 for <stuartg@cmotor.com>); Tue, 20 Sep 1994 13:56:29 -0700
`Received: from localhost by dub-img-l.compuserve.com (8.6.4/5.940406sam)
`id RAA22346; Tue, 20 Sep 1994 17:03:48 -0400
`Date: 20 Sep 94 16:57:08 EDT
`From: Dave Brown <72103.2235@compuserve.com>
`TO: Marc McClung <76336o3110@compuserve.com>
`Cc: Jay clark <72234.627@compuserve.com>, Stuart Goodnick <stuartg@cmotor.com>
`Subject: RE: WOSA/XMC, Draft 2, Section.3.2
`Message-Id: <940920205707_72103.2235_GHB35-2@CompuServe.COM>
`Status: R
`
`Hi Marc,
`
`I am glad to see that you have had a chance to review the specification, with
`regard to your response, I will try to answer your questions as best as
`possible.
`
`>>The good news is that Bob and Kevin have given me permission to spend the
`>>next couple of weeks thoroughly reviewing the WOSA/XMC spec and providing
`>>the feedback that you need. ’
`
`Excellent! If possible I would like to prepare another revision of the
`s~ecification and send it out between October 1 and October 15, In the mean
`tlme, your input will be very helpful.
`
`Page 16
`
`CCI
`
`Highly Confidential-Outside Counsel Eyes Only
`
`PARKER 0034
`
`

`
`RGBLOG,TXT
`
`>>Step 1.
`>>
`>>
`>>
`>>
`>>
`>>
`>>
`>>
`
`In this step I understand that the Driver Administrator is an
`independent window’s application that t~e user runs to add,
`configure, and remove Motion Control Drlvers. I am assuming that
`it is very similar to the printer driver dialog that you can
`launch from the windows 3.1 control Panel program group. The
`printer driver dialog allows the user to select only one printer
`as the default printer, will the Driver Administrator allow the
`user to select more than one motion control device? we have a
`few customers who use several of our products in one application.
`
`Yes, we can build multi driver support into the Driver Administrator, though
`such support may not make it into the initial version of the product for it may
`incur a lot of development time. Even so, I will start designing the system
`for supporting multi drivers running simultaneously.
`NOTE: The Revision #2 of the WOSA/XMC document does NOT support simultaneous
`control of multiple drivers.
`
`In your view, how essential is the feature of simultaneously supporting multi
`drivers?
`
`>>
`>>
`>>
`
`Also, does the Driver Administrator application create a Driver
`Administrator object at this time, or is that actually done in
`Step 5?
`
`Yes, the Driver Admin object is actually implemented within the Driver
`Administrator application. So, when the Driver Administrator application is
`invoked by the user, the Driver Admin object becomes live and is ready for the
`Moton Control Component to use. On the other hand, the Motion Control Component
`can actually load the Driver Administrator (if not loaded) and query it for the
`current driver(s) to use. when this occurs, the Driver Administrator runs as a
`hidden application.
`
`>>step 2. what exactly is the windows Registry? WIN.INI? SYSTEM.INI?
`>> REG.DAT?
`
`The windows Registry is a new technology introduced in windows NT and chicago.
`The registry is also backwards compatible with windows 3.1 via REG.DAT.
`Although, the windows 3.1 registry is more limited than the implementation in NT
`or Chicago. In windows NT and Chicago, the registry acts as (and replaces) all
`.INI files. Special hardware setup information and OLE information are some
`examples of other information included within the registry. In a sense, the
`registry is a database describing the complete system including hardware and
`sottware. ~
`
`>>Step 5.
`>>
`>>
`>>
`>>
`>>
`>>
`
`In this step the Motion Control Component queries (via
`ouervinterfacev) the Driver Administrator for a pointer (pointer
`~o w~ich inter~ace?) to the currently selected Motion Driver.
`In other words, the Motion Control Component tells the Driver
`Administrator to create a Motion Driver object and to pass a
`Motion Driver interface pointer back to the Motion Control
`Component?
`
`QueryInterface isan OLE function supported by every object. Actually, every
`OLE object supports a base interface called Iunknown. Iunknown implements the
`following three methods:
`
`QueryInterface
`AddRef
`Release
`
`- used to get a pointer to other interfaces.
`- used to ~ncrement the objects reference.
`- used to decrement the obJects reference and free the
`
`Page 17
`
`object
`
`Highly Confidential-Outside Counsel Eyes Only
`PARKER 0035
`
`

`
`RGBLOG. TXT
`if its reference is O.
`
`Once a pointer to the IUnknown interface is aquired, the holder of the pointer
`can aquire a pointer to any of the other interfaces exposed by the object.
`s~nce this interface is general, the Driver Admin object doesn’t need to know
`about any of the Driver’s specific interfaces. All that.the Driver Admin cares
`about is creating the driver corresponding with a particular device driver DLL.
`>From that point on, the Driver Admin only knows about an IUnknown pointer
`associated with the DLL implementing the real Driver object. That pointer to
`lUnkgown is the same one returned to the Motion Control Component when it
`querles the Driver Admin for the current driver to use.
`
`>>Step 6. what does the Motion Control Component do with the pointer to
`>>
`the Motion Driver’s IUnknown interface? Or is this just a
`byproduct of object creation?
`>>
`
`once the Motion Control Component has the pointer to the Motion Driver’s
`IUnknown interface, it queries each interface, exposed by the driver, as needed.
`For example, when the~application, using the component, directs the component to
`perform an absolute move (See Section 3.5), the Motion Control Component first
`queryies the Motion Control Driver for its IDrvCore_Motion interface (See
`Section 9.4.7). Depending on whether the driver is run in servo or stepper mode
`the IDrvCore_Servo or IDrvCore_Stepper interface will be queried for by the
`Motion Control Component. After taking care of all state checking and parameter
`validation, the Motion Control Component then performs the move using the
`Driver’s motion interface pointer (Servo or Stepper) by calling its MoveAbs()
`method (See Section 9.4.7).
`
`Note: The reason for having both a IDrvCore_Servoand IDrvCore_Stepper
`interface is to support hardware that one driver will be able to run hardware
`that may be run in seryo or stepper mode.
`
`Note: The Tune method will be added to the IDrvCore_Stepper interface. Even
`though the function will only be a stub that returns an error for it will not be
`implemented, its existance will allow the IMotion interface to treat the stepper
`and servo interfaces in the exact same manner. The only difference between the
`two will be their implementations and their interface ID’s. Havinq two
`different interface ID’s will allow one object to support both implementations.
`
`>>Step 7~ Is the Icurrentstate interface described here the same as the
`>> IUnknown interface described in Step 6?
`
`NO. Like all otherinterfaces in OLE, the ICurrentState interface "inherits"
`from the IUnknown interface. The ICurrentState interface is used to query a
`snap-shot of all state information regarding the specific motion control
`subsystem managed by the Motion Control Driver. The ICurrentState and
`IDrvCore_CurrentState operate independently from all other interfaces, except
`when . For example, when using the IDrvExt_Motion interface (See Section 9.5.9)
`to get the maximum speed, by calling GetMaxSpeedO, the IDrvExt_Motion interface
`would go directly to the hardware and query the value. Later on in the
`controlling application, the user may want to view or set, the hardware state.
`To view the complete state they would use the ICurrentstate interface.
`
`>>In Section 4.0 you show how a C application can create the Motion Control
`>>Component and how to get at IMotion and IEncoder. Its still not clear
`>>to ~e when the Motion Driver object gets created? Does the Motion Control
`>>Component automatically create it via the Drive Administrator?
`
`Refering back to section 3.2 Initialization (core MCAPI), in step 5, the Motion
`Control Component queryies the Driver Admin for the current driver to use. At
`this point, the Dirver Admin creates the Driver object corresponding to the
`Page 18
`
`Highly Confidential-Outside Counsel Eyes Only
`PARKER 0036
`
`

`
`RGBLOG.TXT
`current driver selected by the user (or the default driver). Once created, the
`driver object’s Iunknown pointer is passed back to the Motion Control Component.
`
`>>Shouldn’t the c programmer should have direct control over creation of the
`Motion
`>>Driver object? I could imagine wanting to create a Motion Driver object
`>>for a servo, card at I/O address 768 and interrupt IRQ10. In the same
`>>application another Motion Driver might be created for a stepper card
`>>at I/O address 800 and interrupt IRQ11.
`
`I understand. All driver specific settings, such as the I/O address and IRQ
`used by the motion control hardware (and Driver) are set using the
`IDrvExtUI_ICurrentState::InitializeO method (See section 9.6.2). Either the
`Driver Admin or the Motion Control Component can invoke this method. The Driver
`Admin invokes this method when the user selects a "setup..." button for the
`current driver. And, the Motion Control Component invokes this method when the
`ICurrentState::InitializeEx() method (see section 8.3.3) is called. Note, the
`IDrvExtUI_ICurrentState::Initialize() method will display a driver specific
`di al og.
`
`You bring up a good point that the c++ developer should be able to specify the
`I/O port and IRQ used. Once we do this, though, the hardware independence
`shield will start to break down, for each application using the hardware will
`now have direct access to the IRQ’s and IO ports used by the motion control
`hardware. Instead of configuring each driver from within each application that
`uses the driver via the Motlon Control Component, all driver configurations,
`such as I/O ports and IRQs used should be setup via the Driver Admln or Motion
`Control Component’s InitializeEx() methpd. The same is true when pFogramming a
`printer or when programming to ODBC. when programming a printer, the
`application is not required to tell the print sub-system whether or ndt the
`printer is using a Serial connection or Parallel connection, instead the
`application asks the print subsystem to give it a connection to a printer. For
`example, the application would tell the print sub-system to give it a connection
`to "Printer A". Once the connection is made to "Printer A", the application can
`direct the printer to set itself up. If the application attempts to print
`without setting up the printer the printer object will error letting the
`application know that they need to notify the user to configure the printer
`before printing.
`
`we want to do the same with motion control hardware where the application
`queryies the Driver Admin for a connection to the "Motion Controller A , which
`is made through a pointer to the "Motion controller A" Device Driver objects
`IUnknown interface. Ifthe application attempts a move or some other motion
`control action, and the user has not specified the IRQ or IO port yet, the
`driver will return an error to the component, who will return the error to the
`application, once receiving the error, the application should notify~the user
`that the motion control system needs to be configured. At this time, the user
`should set the IRQ and IO port info for the driver either through the Driver
`Admin or through the application. To have the application configure the driver,
`it will need to supply some user interface object, such as a button or menu
`item, that then triggers code that calls the IMotion::InitializeExO method
`which then calls the IDrvExtUI_CurrentState::InitializeO method which actually
`pops up the Motion Control Driver’s configuration dialog box.
`
`Note, if a driver specific IDrvExtUI_CurrentState::Initialize() method is not
`supported, the Driver Stub IDrvExtUI_CurrentState::InitializeO method will be
`called to display a default configuration dialog box. The default configuration
`dialog box will probably only contain fields allowing the user to set an IRQ and
`IO port.
`
`I hope this information helps. Thepoints you are bringing up will be very
`helpful for the next revision of the specification. If you have any other
`Page 19
`
`Highly Confidential-Outside Counsel Eyes Only
`PARKER 0037
`
`

`
`RGBLOG.TXT
`questions on specification or on this email, please let me know.
`
`Dave Brown
`ROY-G-BIV Corporation
`
`From 72103.2235@compuserve.com Tue Sep 20 13:56:45 1994
`Received: from dub-img-2.compuserve.com by flash.cmotor.com with SMTP id AA01414
`(5.65c/IDA-1.5 for <stuartg@cmotor.com>); Tue, 20 Sep 1994 13:56:31 -0700
`Received: from localhost by dub-img-2.compuserve.com (8.6.4/5.940406sam)
`id RAA08245; Tue, 20 Sep 1994 17:03:49 -0400
`Date: 20 Sep 94 16:57:15 EDT
`From: Dave Brown <72103.2235@compuserve.com>
`To: Marc McClung <76336.3110@compuserve.com>
`Cc: Jay Clark <72234.627@compuserve.com>, Stuart Goodnick <stuartg@cmotor.com>
`subject: WOSA/XMC, Draft 2, Section 3.3
`Message-Id: <940920205714_72103.2235_GHB35-3@CompuServe.COM>
`Status: R
`
`Hi Marc,
`
`See below for response to your email:
`
`>>For this correspondence I would like to brainstorm Section 3.3 that
`>>describes a scenario for code generation as it relates to
`>>"Initialization Tuning". However, I am not familiar with with the
`>>concept of "Initialization Tuning" in our products. Also, I wasn’t
`>>sure which MCAPI code generation interface this refers to, although
`>>I did see an Initialize method in the Icurrentstate interface.
`
`In the scenario ma~ discussed in section 3.3 the application contains the
`initialization tunlng algorithm and the Motion Control Component is used to
`generate the code for the tuned initialization process. I came up with this
`example after reviewing the Motion Architecture product. I wasn’t sure whether
`Motion Architecture tuned the initialization hardware dependent code or just
`helped the user generate it. Anyways, in section 3.3 the application could be
`one just like Motion Architect, but instead of directly generating the
`Compumotor specific motion control codes, the application would use the Motion
`Control Component interfaces and their methods to generate the initialization
`code. Doing so would make the Motion Architect hardware independent.
`
`>>while we’re on the subject of code generation interfaces, I think
`>>there is a better way of implementing code generation than using
`>>code generation interfaces. How about giving each interface the
`>>capability of doing code generation. For example, the c code from
`>>Section 4 (pMove->Interpolated(3, ad)) could either perform the
`>>interpolated move or generate code for the interpolated move and save
`>>it to a file. At the MCAPI level code generation could be turned on/off
`>>via a flag passed to an interface method.
`
`That is the same way I was thinking code generation would work. section 8.4
`talks about this briefly. The general MOtion Control Component interfaces, such
`as ITimer, IMotion, etc, may be run in one of the three modes: real-time, code
`generation, or mixed, when run in code generation mode, code will be generated
`and streamed out to either the personality section within the registry, to file,
`or to some other user specified location. The code generation specific
`interfaces are provided to allow applications to write complete motion control
`programs. In a way these interfaces allow the application developer to write an
`¯ interpreter or compiler for the motion control hardware, Lbut in a hardware
`independent manner. This area of the component will be under investigation for
`a little while for I am not sure that all hardware implementations will support
`all of the code generation methods provided. Ifhardware does not support a
`Page 20
`
`Highly Confidential-Outside Counsel Eyes Only
`PARKER 0038

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket