×

INDI Library v2.0.6 is Released (02 Feb 2024)

Bi-monthly release with minor bug fixes and improvements

Driver for Pegasus Indigo Filter Wheel

  • Posts: 45
  • Thank you received: 3
Hi Jasem,

I was able to get a proper debugging environment setup.

Here's some of the values of res on line 209, from the current head commit (bb0f4b73c375290d8a3e79760812f53c19b68bbd):
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x557a9af2b0, cmd=0x55639a7318 "W#", res=0x7fd6c78ed0 "FW_OK\r\n", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:209
209	        res[nbytes_read - 1] = 0;
(gdb) p res
$2 = 0x7fd6c78ed0 "FW_OK\r\n"
(gdb) c
Continuing.
 
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x557a9af2b0, cmd=0x55639a7328 "FV", res=0x7fd6c79250 ">>\r\n", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:209
209	        res[nbytes_read - 1] = 0;
(gdb) p res
$3 = 0x7fd6c79250 ">>\r\n"
(gdb) c
Continuing.
 
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x557a9af2b0, cmd=0x7fd6c794b0 "WM:1", res=0x7fd6c79430 "WM:1\r\n", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:209
209	        res[nbytes_read - 1] = 0;
(gdb) p res
$4 = 0x7fd6c79430 "WM:1\r\n"
(gdb)

If it helps any, the value at line 210 is:
Breakpoint 2, PegasusINDIGO::sendCommand (this=0x557a9af2b0, cmd=0x7fd6c794b0 "WM:1", res=0x7fd6c79430 "WM:1\r", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:210
210	        LOGF_DEBUG("RES <%s>", res);
(gdb) p res
$5 = 0x7fd6c79430 "WM:1\r"
1 year 3 months ago #89000

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
By the way... I think there's a bug on line 110:

The firmware version command is WV, and not FV. :)
1 year 3 months ago #89001

Please Log in or Create an account to join the conversation.

Ok please git pull and test again.
1 year 3 months ago #89002

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
In progress. I'll let you know when I have results.
1 year 3 months ago #89003

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
The new code seems to be processing reponses correctly.
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x55b18152b0, cmd=0x558bef7318 "W#", res=0x7fcd8c18d0 "FW_OK", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:210
210	        LOGF_DEBUG("RES <%s>", res);
(gdb) p res
$1 = 0x7fcd8c18d0 "FW_OK"
(gdb) c
Continuing.
 
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x55b18152b0, cmd=0x558bef7328 "WV", res=0x7fcd8c1c50 "WV:1.2", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:210
210	        LOGF_DEBUG("RES <%s>", res);
(gdb) p res
$2 = 0x7fcd8c1c50 "WV:1.2"
(gdb) c
Continuing.
 
Breakpoint 1, PegasusINDIGO::sendCommand (this=0x55b18152b0, cmd=0x7fcd8c1eb0 "WM:2", res=0x7fcd8c1e30 "WM:2", cmd_len=-1, res_len=-1)
    at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:210
210	        LOGF_DEBUG("RES <%s>", res);
(gdb) p res
$3 = 0x7fcd8c1e30 "WM:2"
(gdb) c
Continuing.

We could probably trim "WV:" off the front of the version response. I also see a serial port error raised once per second when the filter wheel is disconnected.



I'm trying to enable debug logging, but can't for some reason. Every time I click "Enable" it flicks back to "Disabled"
1 year 3 months ago #89004

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
I suspect the serial write error is related to the WF command I noticed in my original logs. Perhaps this debugging information will be useful?
(gdb) break /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:140
Breakpoint 2 at 0x558bec9db0: file /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp, line 140.
(gdb) c
Continuing.
 
Breakpoint 2, PegasusINDIGO::TimerHit (this=0x55b18152b0) at /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:140
140	            if (sscanf(response, "WF:%d", &position) == 1)
(gdb) p response
$10 = '\000' <repeats 127 times>
(gdb) p TargetFilter
$11 = 3
(gdb) p position
$12 = -1

I get this result even after the wheel has moved to the correct position.
Last edit: 1 year 3 months ago by Chris Barbour.
1 year 3 months ago #89006

Please Log in or Create an account to join the conversation.

You get the serial write error immediately after setting a new filter target in the driver? I pushed a small update for the firmware parsing.
1 year 3 months ago #89008

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
The serial write error shows up after disconnecting the filter wheel, and disappears when I reconnect it.

I'm not 100% sure what triggers it, but I suspect it's part of the wait loop which checks if the filter is moving.
1 year 3 months ago #89009

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
I'm not a C++ guy, but in this block of code I'm not entirely clear how response is updated after sending the WF command:

github.com/indilib/indi/blob/master/driv...indigo.cpp#L132-L149
1 year 3 months ago #89010

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
I'm building the latest version. I'll see if the isConnected check makes the error go away.
1 year 3 months ago #89011

Please Log in or Create an account to join the conversation.

  • Posts: 45
  • Thank you received: 3
The new update makes the Serial write error go away. The filter wheel version number is also correct.

I still see the WF command being sent every second in the debug logs:
INFO	227.063863 sec	: Pegasus INDIGO is online.
DEBUG	227.064552 sec	: CMD <WV>
DEBUG	227.079659 sec	: RES <WV:1.2>
DEBUG	228.064635 sec	: CMD <WF>
DEBUG	229.065935 sec	: CMD <WF>
DEBUG	230.067225 sec	: CMD <WF>
INFO	230.300844 sec	: Setting current filter to slot 2
DEBUG	230.300985 sec	: CMD <WM:2>
DEBUG	230.327024 sec	: RES <WM:2>
DEBUG	231.068405 sec	: CMD <WF>
DEBUG	232.070111 sec	: CMD <WF>
INFO	232.959201 sec	: Setting current filter to slot 1
DEBUG	232.959480 sec	: CMD <WM:1>
DEBUG	232.982931 sec	: RES <WM:1>
DEBUG	233.070819 sec	: CMD <WF>
DEBUG	234.072282 sec	: CMD <WF>
DEBUG	235.073851 sec	: CMD <WF>
DEBUG	236.075557 sec	: CMD <WF>
DEBUG	237.076402 sec	: CMD <WF>
DEBUG	238.077982 sec	: CMD <WF>
DEBUG	239.079320 sec	: CMD <WF>
INFO	239.687003 sec	: Pegasus INDIGO is offline.

As best I can tell, the driver never hits SelectFilterDone() at line 143.
(gdb) break /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp:143
Breakpoint 1 at 0x557de09e20: file /home/stellarmate/Projects/indi/drivers/filter_wheel/pegasus_indigo.cpp, line 143.
(gdb) c
Continuing.

The following diff seems to fix the issue:
diff --git a/drivers/filter_wheel/pegasus_indigo.cpp b/drivers/filter_wheel/pegasus_indigo.cpp
index b184decad..972052857 100644
--- a/drivers/filter_wheel/pegasus_indigo.cpp
+++ b/drivers/filter_wheel/pegasus_indigo.cpp
@@ -134,7 +134,7 @@ void PegasusINDIGO::TimerHit()
     if (isConnected() && FilterSlotNP.s == IPS_BUSY)
     {
         char response[DRIVER_LEN] = {0};
-        if (sendCommand("WF"))
+        if (sendCommand("WF", response))
         {
             int position = -1;
             if (sscanf(response, "WF:%d", &position) == 1)

With that in place, I see the following in the logs:
INFO	181.999770 sec	: Pegasus INDIGO is online.
DEBUG	182.000172 sec	: CMD <WV>
DEBUG	182.015682 sec	: RES <WV:1.2>
INFO	185.342267 sec	: Setting current filter to slot 1
DEBUG	185.342539 sec	: CMD <WM:1>
DEBUG	185.375298 sec	: RES <WM:1>
DEBUG	186.002934 sec	: CMD <WF>
DEBUG	186.015014 sec	: RES <WF:-1>
DEBUG	187.016328 sec	: CMD <WF>
DEBUG	187.038995 sec	: RES <WF:-1>
DEBUG	188.040434 sec	: CMD <WF>
DEBUG	188.062985 sec	: RES <WF:-1>
DEBUG	189.064485 sec	: CMD <WF>
DEBUG	189.086792 sec	: RES <WF:1>
INFO	194.713997 sec	: Setting current filter to slot 7
DEBUG	194.714204 sec	: CMD <WM:7>
DEBUG	194.750045 sec	: RES <WM:7>
DEBUG	195.093203 sec	: CMD <WF>
DEBUG	195.117954 sec	: RES <WF:-1>
DEBUG	196.119440 sec	: CMD <WF>
DEBUG	196.141981 sec	: RES <WF:-1>
DEBUG	197.143499 sec	: CMD <WF>
DEBUG	197.165692 sec	: RES <WF:-1>
DEBUG	198.166977 sec	: CMD <WF>
DEBUG	198.189555 sec	: RES <WF:-1>
DEBUG	199.190985 sec	: CMD <WF>
DEBUG	199.213615 sec	: RES <WF:-1>
DEBUG	200.215133 sec	: CMD <WF>
DEBUG	200.237485 sec	: RES <WF:7>
INFO	206.282713 sec	: Setting current filter to slot 1
DEBUG	206.282891 sec	: CMD <WM:1>
DEBUG	206.316700 sec	: RES <WM:1>
DEBUG	207.245849 sec	: CMD <WF>
DEBUG	207.260594 sec	: RES <WF:-1>
DEBUG	208.261946 sec	: CMD <WF>
DEBUG	208.284591 sec	: RES <WF:-1>
DEBUG	209.285932 sec	: CMD <WF>
DEBUG	209.308229 sec	: RES <WF:-1>
DEBUG	210.309508 sec	: CMD <WF>
DEBUG	210.332186 sec	: RES <WF:-1>
DEBUG	211.333015 sec	: CMD <WF>
DEBUG	211.356101 sec	: RES <WF:-1>
DEBUG	212.357608 sec	: CMD <WF>
DEBUG	212.379995 sec	: RES <WF:1>
INFO	215.036573 sec	: Pegasus INDIGO is offline.
1 year 3 months ago #89012

Please Log in or Create an account to join the conversation.

I forgot to set target filter.. ok try now it should work.
1 year 3 months ago #89022

Please Log in or Create an account to join the conversation.

Time to create page: 0.961 seconds