#17 FireFlyMini plugin doesn't export 'getHardware' function

Both or unknown
closed
nobody
Hardware (3)
5
2013-08-25
2012-01-07
No

I have tried to use WinLIRC 0.9.0c with the FireFlyMini 1.1 plugin on my Windows XP, but it doesn't work at all.
I have also tried the previous releases of WinLIRC 0.8.7a to 0.9.0b, but it fails with the same exact error message :
"IRRecord.exe -d fireflymini.dll ../config.cfg
The driver doesn't export the required functions."

The FireFlyMini plugin only exports the following 6 functions :
decodeIR
deinit
hasGui
init
loadSetupGui
sendIR

So, I guess this last function is really missing :
getHardware

Discussion

  • Ian

    Ian - 2012-01-07

    Hi José,
    the firefly mini receiver doesn't support IRRecord. All the button names are built into the DLL file. If you see the readme you can see all the names, but in case you missed it.

    CLOSE
    MUTE
    VOL+
    VOL-
    CH+
    LAST
    EXIT
    OPTION
    FIREFLY
    MENU
    REC
    GUIDE
    STOP
    PREV
    PLAY
    NEXT
    REW
    PAUSE
    FWD
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LEFT
    RIGHT
    UP
    DOWN
    OK

    Enjoy :)

     
  • José GONÇALVES

    I've made some progress on this issue.
    Now, I can at least configure and start correctly WinLIRC, using the following 3 steps :
    1. Use WinLIRC 0.8.7a (since this release don't use the 'getHardware' function),
    2. Use the FireFlyMini 1.1 plugin DLL (since it detects correctly the IR reciever on Windows XP),
    3. Replace the ProductID E007->E006 in the FireFlyMini 1.1 plugin DLL file (with an hex editor, since my IR reciever is different with VID_1233&PID_E006).

    to be continued...

     
  • Ian

    Ian - 2012-01-09

    The receiver doesn't export any raw timing information, so it can't work with irrecord.
    As for VID_1233&PID_E006
    It's possible there are different versions of the receiver with different PID values. I am not sure why they would do this but it's possible and this would indeed stop the device from loading correctly. Since winlirc is looking for
    VID_1233&PID_E007

    You may want to change
    if(devices[i].Attributes.ProductID==57351) {
    if(devices[i].Attributes.VendorID==4659) {

    Also
    in hex thats 1233 and E007

     
  • José GONÇALVES

    Indeed, I have now understood that the receiver can't work with IRRECORD, but I guess a minimal 'getHardware' function is still mandatory to avoid the error messages : "The driver doesn't export the required functions.".
    Anyway, you have to provide WinLIRC with a proper/valid config file to complete the configuration of WinLIRC, in my case I choose the "Firefly-Mini.cfg" from the LIRC database, just for reference.

    FYI, my receiver once was sold with a wireless keyboard and is shown with USBVIEW as a 'HOLTEK USB Keyboard'.

    Using HxD, I changed the PID here :
    if(devices[i].Attributes.ProductID==57351) {
    and also here :
    if(deviceList[i].dwType==RIM_TYPEKEYBOARD && strstr(deviceName,"VID_1233&PID_E007")) {

    Now, I have to figure out how to hack the plugin code to receive a lot more buttons/keys...
    But, since the keyboard is broken dead, I will try using a bunch of remotes I have at home. Unless there's another way ???

     
  • Ian

    Ian - 2012-01-10

    <<Anyway, you have to provide WinLIRC with a proper/valid config file to
    complete the configuration of WinLIRC, >>

    No you don't :p The hardware can initiate just fine without any config. The firefly one needs no config, it just returns hard coded button names.

    For a plugin to work
    decodeIR()
    just needs to return a button name. How you get there doesn't matter. The design is somewhat more flexiible than LIRC. The config is sort of an optional extra in WinLIRC.

     
  • José GONÇALVES

    Actually, you are right. No need to provide any config file nor 'getHardware' function !

    I've made some hacking and debugging on the source code of the FireFlyMini plugin 1.1 and found that the init was not complete due to the device type being detected as RIM_TYPEHID instead of RIM_TYPEKEYBOARD.
    So, I changed the line :
    if(deviceList[i].dwType==RIM_TYPEKEYBOARD &&
    strstr(deviceName,"VID_1233&PID_E007")) {
    to :
    if(deviceList[i].dwType==RIM_TYPEHID &&
    strstr(deviceName,"VID_1233&PID_E006")) {

    Now, the hardware can initiate just fine (without any config) on my Windows XP.

     
  • Ian

    Ian - 2012-01-12

    You are welcome to make a plugin for your hardware if you want. But I suggest using winlirc 0.9.0 as a base :) There''s a few minor changes but nothing major from the version you are using.

     
  • José GONÇALVES

    I've tested my hacked FireFlyMini plugin against WinLIRC 0.9.0c and it's OK now.
    I still haven't found any remote working yet :-(
    Is there another way to test it ?

     
  • Ian

    Ian - 2012-01-12

    It will probably work with a remote control using a similar protocol. But I can't remember off hand what protocol it uses.

     
  • Ian

    Ian - 2013-08-25
    • status: open --> closed
    • Group: --> Both or unknown
     

Log in to post a comment.