Is there a master list of UPB devices?

123

Senior Member
Does anyone know where I can get a list of available UPB devices and their Product ID's?

On page 25 of the UPB Technology Description document it refers the reader to the 'UPB Device Manufacturers Catalog' for a list of the "currently assigned PIDs". I couldn't find this document on the PulseWorx site.

I need this info to enhance a UPB driver. Currently, it is aware of the following devices (the first number is the device's PID):

Simply Automated
1, LM1, Lamp Module
5, AM1, Appliance Module
22, USQ, Multi-Switch
30, SerialPIM, Powerline Interface Module
40, CM01, Input/Output Module

Powerline Control Systems
1, WS1D6, Wall Switch 1 Dimmer 600W
3, WMC6, Wall Mount Controller 6-Button
4, DTC6, Desktop Controller 6-Button
13, WMC8, Wall Mount Controller 8-Button
14, DTC8, Desktop Controller 8-Button
48, SerialPIM, Powerline Interface Module

Is it possible that a master list of UPB devices, and their PIDs, is buried somewhere within the UPstart software or its documentation?
 
Have you considered using the export file from the UPStart program? I know others are doing it that way. It seems that the hard coded way means every time a new product comes out someone would need to recode the driver. If you could import from the UPStart file, it could save a lot of time.

Don't have a clue about how that would work though :)
 
... It seems that the hard coded way means every time a new product comes out someone would need to recode the driver. If you could import from the UPStart file, it could save a lot of time. Don't have a clue about how that would work though :)

That make's two of us. :) Modifying the existing Premise UPB driver to import a UPE file is beyond my current abilities. C++ coder and driver guru, I am not.-

I found the answer to my question in the following document: UPStart Export File Description
It contains a list of all current UPB devices and their Product IDs.

Sam, if you can let me know what UPB devices you have (that Premise's driver doesn't support) I'll try to add them into either upbPCS.dll or upbSA.dll.
 
Here is the info on what I have that is currently unsupported and how it shows up in Premise (Unknown Modules):

HAL RS-101 - Dimmer Switch
Manufacturer ID: 90 (shows up as Company - Powerline Control Systems)
Product ID: 222


HAL RAM01 - Appliance Module
Manufacturer ID: 0 (shows as company Universal Power Bus - yes it's different than the other HAL - ??)
Product ID: 205


HAL RLM01 - Lamp Module
Manufacturer ID: 0 (shows as company Universal Power Bus - yes it's different than the other HAL - ??)
Product ID: 201


SA SerialPIM
Manufacturer ID: 4 (Simply Automated
Product ID: 48


SA USQ - I have 2 different versions apparently. One with an ID of 22, which is supported and one with an ID of 29 which is not.

Now, if you get this working, I'll have to run over to Fry's and see if they have any of the Appliance and Lamp mods left at $4.99 each since they have been closing them out :) .
 
Thanks for the list!

I'm not sure I can add support for devices other than PCS or SA. I think Premise's UPB driver works like this:
upb.dll is the core driver and serves as the communications channel.
upbPCS.dll handles UPB devices manufactured by PCS (i.e. devices with a Manufacturer ID = 1)
upbSA.dll handles UPB devices manufactured by SA (i.e. devices with a Manufacturer ID = 4)

I suspect that if the driver discovers a device with a Manufacturer ID other than 1 or 4 it will simply flag it as Unknown. To create a DLL to support another vendor's devices would require the ability to compile the source-code and I don't know how to do that yet.

FWIW, according to the UPStart Export doc, devices 201, 205, and 222 are made by SA for another vendor.

I'll try to add device 29 to the upbSA.dll. According to the doc, it is a "US2-40 Series Dimming Switch". I don't know how it differs from device 22, "US1 / US2 Series Dimming Switch". For now, I'll define the 29 to be equivalent to a 22.
 
I was able to "hack" the PCS driver and turn it into a HAL driver for the RS-101 switches. But this is because I have no PCS devices. I just changed the identifiers from the corresponding PCS part. I changed the manufacturer ID, the product ID and the product name. I did this with XN Resource editor, editing the dll directly. It works. I can see all of my RS-101 switches. But of course, It means I can never use any PCS devices :(.

And it also means that I couldn't do anything with the modules since they have a different manufacturer's ID.

An all new driver (upbHAL?) would be needed.

But that's as far as I could take it.

As far as I can tell, you are right in that the main UPB driver loads, then looks to see what "sub-drivers" are loaded to identify devices.

Wish I had learned to code :unsure:
 
Sam,

I think you've already blazed the path that Rosengui helped me discover!

The XN Resource Editor is a good find because it lets you edit the XML device list without the need of Visual Studio.

You indicated that you altered upbPCS.dll to support UPB devices from HAI by altering the Manufacturer ID, Product ID, etc. Why not make a copy of upbPCS.dll, rename it upbOEM.dll, and change its Manufacturer ID, Product ID, etc to support the non-PCS/SAI/HAL modules.

The only additional step is to ensure that each item in the XML list gets a new, unique, GUID. You can use http://www.guidgen.com/ to generate unique numbers. Otherwise, the two DLLs will contain device definitions with identical GUIDs and that will cause problems.
 
Sam,

I think you've already blazed the path that Rosengui helped me discover!

The XN Resource Editor is a good find because it lets you edit the XML device list without the need of Visual Studio.

You indicated that you altered upbPCS.dll to support UPB devices from HAI by altering the Manufacturer ID, Product ID, etc. Why not make a copy of upbPCS.dll, rename it upbOEM.dll, and change its Manufacturer ID, Product ID, etc to support the non-PCS/SAI/HAL modules.

The only additional step is to ensure that each item in the XML list gets a new, unique, GUID. You can use http://www.guidgen.com/ to generate unique numbers. Otherwise, the two DLLs will contain device definitions with identical GUIDs and that will cause problems.

So I've discovered WHY this doesn't work. Just not how to fix it.

Seems that there is a Type Library embedded in these DLLs that has the DLL file name AND the manufacturer class GUID embedded within it. And a couple of other unique GUIDs as well. Unfortunately XN Resource Editor shows it as HEX with none of the above showing in the test portion. And PE Explorer (demo) shows it as text, but does NOT seem to allow editing it. It throws up a validation error. Ugh.

Anyone have any thoughts on how to edit that part of the file? The rest is editable in XN.

Also/otherwise does anyone know what environment the original drivers were compiled in? I don't think it was Visual Studio 2005/HSDK 2.1. I tried to modify the original upbPCS and compile it with the aforementioned and it throws an error when I load it in Premise. Premise sees it and loads it. But it says "Error: Subsystem not registered."

I am determined to get these new UPB devices to work :)

Also/otherwise ( :) ) does anyone have any of the old how-to stuff for driver development? Maybe the pre 2.1 HSDK too?

Then when that's done, I going into the UI HTML ! ;)
 
Sam, you lost me there. I see the DLL's file name embedded in its Type Library entry (at the very bottom of the listing) and I can alter it by modifying the HEX values (can't append; just replace). Where is the "manufacturer class GUID" in the Type Library? Are you saying it is not visible at all in the XN Resource Editor but is visible in PE Explorer?

I am determined to help you get the new UPB devices to work! ;)
 
I didn't see it in XN either.

I downloaded the demo of PE Explorer and it shows the typelib as text. This is what it looks like:

//upbPCS 1.0 Type Library
//Version: 1.0
DriverLib;
GUID = {438A2FF6-7132-442F-9100-CC3811691DDA};


//upbPCS Class
CoClass upbPCS;
GUID = {D40C5093-A19E-46D7-AC98-7128025B998C};

//IupbPCS Interface
Dispatch IupbPCS;
GUID = {9304CA81-D456-4C12-AB93-BB817FD19169};
function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
function AddRef: UI4; stdcall;
function Release: UI4; stdcall;
function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2; pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo: ^EXCEPINFO; out puArgErr: ^UINT); stdcall;

So, a lot more info here than I saw in the HEX version in XN.
 
Back
Top