#linuxcnc-devel | Logs for 2013-10-15

[01:18:55] <KGB-linuxcnc> 03nieson 05master 82f07cf 06linuxcnc 10share/gscreen/ 10skins/gmoccapy/gmoccapy_handler.py 10skins/gmoccapy/locale/rs/LC_MESSAGES/gmoccapy.mo 10skins/gmoccapy/locale/rs/gmoccapy.po 10skins/gmoccapy/release_notes.txt * gmoccapy_0_9_8_1 - new serbian translation
[02:05:58] <KGB-linuxcnc> 03chrisinnanaimo 05master 7ae13b8 06linuxcnc 10src/hal/halmodule.cc * halmodule: improve error message: invalid length of pin name
[07:10:04] <jthornton> are the license lines in the comp examples incorrect now?
[07:10:32] <jthornton> http://linuxcnc.org/docs/html/hal/comp.html#_examples
[08:55:03] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 1a22ebe 06linuxcnc 03src/emc/motion/pause.h * motion/pause.h: pause state machine - states
[08:55:04] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 e55ded4 06linuxcnc 10src/emc/motion/motion.h * motionn.h: emcmot_status_t members to support jog-while-paused
[08:55:07] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 ffe4de1 06linuxcnc 10src/emc/motion/mot_priv.h * mot_priv.h: queue references, HAL support pins
[08:55:14] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 6a43b78 06linuxcnc 10src/emc/motion/motion_debug.h * motion_debug.h: the alternate queue - tp instance data + queue space
[08:55:21] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 e6cc58d 06linuxcnc 10src/emc/motion/emcmotcfg.h * emcmotcfg.h: size the alternate queue
[08:55:29] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 ee9f262 06linuxcnc 10src/emc/kinematics/ 10tp.c 10tp.h * kinematics/tp: add tpIsPaused(), tpSnapshot() methods
[08:55:36] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 43c2222 06linuxcnc 10src/emc/motion/command.c * motion/command.c: fix inRange() and check_axis_constraint()
[08:55:42] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 d26b07a 06linuxcnc 10src/emc/motion/command.c * motion/command.c: jog-while-pause support, queue switching
[08:55:49] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 5b8b91d 06linuxcnc 10src/emc/motion/control.c * motion/control.c: pause FSM support
[08:55:56] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 175d376 06linuxcnc 10src/emc/motion/motion.c * motion/motion.c: tp queues, HAL pin initialization
[08:56:03] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 4566955 06linuxcnc 10src/emc/ 10nml_intf/emc.cc 10nml_intf/emc_nml.hh * jog-while-paused: NML support
[08:56:10] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 5b1ad10 06linuxcnc 10src/emc/task/taskintf.cc * emc/task/taskintf.cc - convey pause fsm, jwp-enable states
[08:56:17] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 be984cf 06linuxcnc 10src/emc/task/emctaskmain.cc * task: in auto mode, pass EMC_JOG_* commands if jwp enable pin set
[08:56:24] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 c18ec36 06linuxcnc 10src/emc/usr_intf/axis/extensions/emcmodule.cc * python/linuxcnc module: expose pause FSM states, jwp enable state, enums
[08:56:32] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 dcc8508 06linuxcnc 10src/emc/ 10(5 files) * jog-while-paused: Python examples
[08:56:38] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 884f5b3 06linuxcnc 10docs/man/man9/motion.9 * man/motion.9: document pin, jog-while-paused behavior
[08:56:45] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 3a75a45 06linuxcnc 10configs/sim/axis/ 03enable-jwp.hal 03ja3-jog-while-paused-rdelta.ini * configs/sim: jog-while-paused demo config - joints_axes3 assumed
[08:56:53] <KGB-linuxcnc> 03git 05keyboard-jog-while-pause-joints-axes4 6b523e5 06linuxcnc 10src/emc/usr_intf/axis/scripts/axis.py
[08:56:56] <KGB-linuxcnc> ui/axis.py: brutally patch into submission to pass jog commands during auto/paused
[08:57:05] <KGB-linuxcnc> 03TODO: deletor 05keyboard-jog-while-pause-joints-axes3 3318741 06linuxcnc 04. * branch deleted
[09:26:51] <cradek> seb_kuzminsky: yay!! thanks for all that work!
[09:27:07] <cradek> can't believe it's been 5.5 years
[09:29:44] <mhaberler> also available as: https://github.com/mhaberler/linuxcnc/tree/keyboard-jog-while-pause-joints-axes4-ubc3
[09:32:58] <cradek> slick
[09:33:25] <mhaberler> you were right, zero problems picking those 18 commits ontop
[09:34:44] <mhaberler> I'll be away a lot until beginning of nov, but I wouldnt like to fall our tlo-in-motion thread into oblivion
[09:35:32] <mhaberler> I wander if there is some way to validate if the dual-offset scheme is clean, like writing out example sequences of canon cmds and motion actvity
[09:36:55] <cradek> I was also wondering how on earth we could do regression tests of that system
[09:38:51] <mhaberler> just a flow isnt good enough, to describe such sequence I usally use sequence diagrams, like http://static.mah.priv.at/public/ticket-pattern.png
[09:39:15] <mhaberler> that's just a description of distributed activity, doesnt help with testing
[09:39:37] <mhaberler> I assume we would need to have sequenced assertions on canon/interp and motion state
[09:40:40] <mhaberler> a single state snapshot is not going to catch what's happening
[09:40:52] <cradek> I think tpAddLine et.al. parameters will match under the current and new system
[09:41:23] <cradek> er, no
[09:41:24] <cradek> I dunno
[09:41:38] <mhaberler> there is one trick one could play, and that is: kill readahead for regression testing by a ini var
[09:41:51] <cradek> even though it's my design I don't know what the implementation would look like :-/
[09:41:55] <mhaberler> in that case it should come out sequenced, i.e. not dependent on timing
[09:42:33] <mhaberler> it is in fact doable by a remap, see this example - no patch needed at all:
[09:43:36] <mhaberler> the configs/sim/remap/stop-lookahead thing: http://git.linuxcnc.org/gitweb?p=linuxcnc.git;a=tree;f=configs/sim/remap/stop-lookahead;h=193f36f1f25ef90670f9555a5f831ba2523d850b;hb=refs/heads/master
[09:44:47] <mhaberler> now what that would allow you to do is: issue a g code command,the issue this stop-lookahead, then verify hal pins do something right
[09:44:57] <mhaberler> this might work, needs a try
[09:45:22] <mhaberler> regression testing motion needs some creative ideas anyway
[09:48:47] <mhaberler> in fact maybe a few python oword subs, and the existing ';py,assert <expression> ' feature should do it; let me see if I can come up with an example
[09:49:02] <mhaberler> do you think this could help?
[09:51:20] <cradek> I'm picturing two different kinds of test - we need to compare the moves (not canon calls) generated by g43[.x]-containing programs before and after our changes
[09:51:25] <cradek> that's the easier one
[09:51:40] <mhaberler> like comparing endpoints I guess
[09:51:54] <mhaberler> sure, canon params are just noise here
[09:51:58] <cradek> harder is we want to remove those g43[.x] and run the gcode, and change the offsets at approporiate [?] times using our new method instead
[09:52:02] <mhaberler> we want end to end
[09:52:41] <mhaberler> oh, I see - simulate operator action
[09:52:48] <mhaberler> right
[09:52:59] <cradek> it's interesting to ponder whether our design even says the resulting motions should match
[09:53:49] <cradek> appropriate times I think should mean DURING the move before where the g43 was?
[09:53:50] <mhaberler> we'll certainly figure, but operator fiddling can be done like this: either M6x or use 'import hal' in embedded Python
[09:54:24] <mhaberler> realistically I think we can only assert positions when motion is stopped (i.e. inpos)
[09:54:41] <mhaberler> oh you mean during pause
[09:54:41] <cradek> you're thinking of how to do the testing, and I'm still back here wondering what to test and how to even know if it's right (ie what's the design)
[09:54:59] <mhaberler> those can be ships in the night ;)
[09:56:43] <mhaberler> well to describe the design I think we need some time-sequenced diagram like the one I gave above, because here you can assert positions on the y axis of the diagram, like 'must be here now'
[09:58:49] <mhaberler> are we doing assertions on the controlled point?
[10:04:23] <mhaberler> bbl
[13:00:45] <skunkworks_> http://www.youtube.com/watch?v=yR9rCFavFjU
[13:03:53] <awallin> does that use the standard ethernet port on the T60 laptop?
[13:23:34] <mhaberler> hi cradek
[13:24:33] <mhaberler> can we specify behavior by assertions on the controlled point and tlo at certain points in time?
[13:25:56] <mhaberler> just occurred to me we have no formal way to express desired behavior of the interp/canon/motion universe
[13:43:37] <skunkworks_> awallin: did you see... http://www.electronicsam.com/images/KandT/testing/LaptopRTnet.jpg
[13:44:44] <awallin> skunkworks_: is that an ethernet mesa board?
[13:49:45] <skunkworks_> yes
[13:50:16] <skunkworks_> xenomai and rtnet. The asus laptop seems to run the realtime kernel just fine. (probably just luck)
[14:02:29] <mhaberler> ah, we're moving.. good!
[14:05:16] <alex_joni> heh
[17:09:14] <andypugh> I wonder why gladevcp isn't finding my handlers?
[17:21:47] <kwallace> I have a hell of a time trying to figure out where Python looks for and keeps imports. There must be a better way.
[17:22:30] <andypugh> Do I need to do some magic in the UI to tell it where to look for handlers?
[17:24:10] <andypugh> I guess not, because the .ui file is just XML, and working example files have no references in them
[17:26:46] <kwallace> The way we do it, in Glade we select an event type then select a event label such as "on_suchandsuch_button_press...". Then make an entry for Builder in "my_ui.py" and make a function for "on_suchandsuch_button". There seems to be some magic in between.
[17:29:29] <andypugh> Can you elaborate on "make an entry for Builder"?
[17:30:40] <andypugh> Ah, but wait! It works now
[17:31:24] <andypugh> Looks like a problem with the imports. Copying the imports from the examples rather than the manual page seems to be the key..
[17:32:47] <kwallace> Now that it works, I suppose we'll never really know what happened. :)
[17:33:33] <andypugh> Must be the imports
[17:51:48] <kwallace> We basically have two files for our application The UI Glade file and a Python file that pulls all the bits together, I think including GTK, and contains the UI handlers. Builder is called during the UI init and seems to reference the Glade file to figure out which functions or modules connect with which, such as with "my_button", when pressed, run the UI function "on_my_button_pressed" or "on_my_button_released".
[17:53:18] <andypugh> Do you know which event to hook in to when a tab is brought to the front, or sent to the back?
[17:58:58] <kwallace> There is Glade event for when a my_tab is pressed, released, focused, loses focus, or just about anything else you can think of. So the link for my_tab, in Glade is to select the event type, give it a name, in the UI create a function with that name, then tell Builder to link the Glade bit with the UI bit.
[18:03:29] <andypugh> For an embedded GladeVCP tab in Axis, which event is triggered when it is activated? I think that is my question.
[18:06:09] <kwallace> I don't know how VCP works, but I would tend to look at the source with Builder in mind.
[18:11:13] <kwallace> I almost forgot that Glade has the HAL objects on the lower right. These do some of the work for you, but I suppose it helps to know how they do it. We don't use the HAL objects, but build all the bits. So I only have a clue how we do it.
[18:12:09] <kwallace> Oops HAL objects on the lower left. Left is the other right.
[18:12:36] <andypugh> Yes, though it is not clear to me what, for example, a HAL table does
[18:13:17] <andypugh> It probably has an "I am visible HAL pin :-)
[18:14:56] <kwallace> We have used tables for our tool table, drill location list and other table like things. There are Glade events for the table, or cells.
[18:15:17] <andypugh> Ah, no, it has an input pin instead.
[18:16:36] <kwallace> The HAL bit might be an input.
[18:22:14] <andypugh> Ah, so close!
[18:22:44] <andypugh> tool change <gtk.gdk.Event at 0x8b775c0: GDK_VISIBILITY_NOTIFY state=GDK_VISIBILITY_FULLY_OBSCURED>
[18:22:45] <andypugh> tool change <gtk.gdk.Event at 0x8b775c0: GDK_VISIBILITY_NOTIFY state=GDK_VISIBILITY_UNOBSCURED>
[18:23:09] <andypugh> But, once it is unobscured it stays that way
[18:23:28] <kwallace> The HAL table and cell events, handlers and HAL pins I think are all predefined by the HAL Glade object. ... crap, I think you really are wanting to know something else, which I don't know about.
[18:30:08] <kwallace> Everything looks like a nail to me.
[18:30:16] <andypugh> I have a Window as a top-level that becomes an embedded tab. It contains a vpanel which contains a table, which contains buttons. What I want is to find an event that triggers when the tab comes to the front.
[18:31:49] <andypugh> I am not, for example, sure about the difference between GtkWindow events, GtjContainer events, GtkWidget events, GtkObject, GObject..
[18:44:08] <kwallace> I can offer limited experience with say a button. What we do is, in a Window, we create a tabbed container, which contains an event container and finally a graphic container. The graphic container has a file name of a the button image, but the higher level event container has the handler for the button press or release which is in one the lists of events in GtkWidgets or GtkObjects or other, which I can't remember.
[18:44:49] <andypugh> OK.
[18:46:00] <kwallace> The different events and levels are in different container or object lists.
[18:48:12] <kwallace> In Glade, click on a feature, then to the right, click Signals.
[18:49:16] <kwallace> Some of the Gtk headings may be bold which means there is a signal assigned.
[18:50:14] <andypugh> I have tried setting the same action for every single signal of the toplevel, and get nothing..
[18:52:28] <kwallace> You might be either at the wrong level or using the wrong type of object or other. I have only copied a signals from work examples.
[18:52:36] <kwallace> working
[18:52:41] <andypugh> Trying to use a more front-most object looks more hopeful.
[18:53:16] <kwallace> What is the object again?
[18:53:27] <andypugh> I don't care
[18:53:30] <andypugh> Anything
[18:54:32] <andypugh> It's an embedded GladeVCP tab, I am happy to deal with any part of it, or any of the contents
[18:55:15] <kwallace> If you think it might be relevant, our button has this (I'll try to block copy here)
[18:56:09] <kwallace> Oops not working.
[18:56:36] <andypugh> Ah, well, time to sleep anyway
[18:56:59] <kwallace> GtkWidget -> Button Press Event -> "on_button_press..."
[18:57:21] <kwallace> GtkWidget -> Button Release Event -> "on_button_release..."
[18:57:53] <andypugh> I found the generic "event" class, and I am listing the events as they happen :-)
[18:58:16] <andypugh> Interestingly there is no "event" when switching to a different tab in Axis
[18:58:35] <andypugh> I should try Touchy instead.
[18:59:05] <kwallace> There should be, but where it is might be a problem. I look at our app.
[19:04:39] <kwallace> I think what we do has the event in the window that contains the tabs. On window a event, Glade passes the tab name to the UI python file. The "on_tab_window_click_event" has some if's to check the tab name that was passed.
[19:08:55] <kwallace> The tabs for our Conversational routines are in a notebook and is handled with "on_conversational_notebook_switch_page".
[19:09:42] <andypugh> Unfortunately the "containing" tabs are part of Axis, not my GladeVCP
[19:12:24] <kwallace> Do you have the tab names?
[19:13:34] <andypugh> How do you mean?
[19:14:29] <andypugh> I get an expose-event when I switch to the tab, but nothing when I move to a different tab.
[19:15:03] <kwallace> I was thinking if a tab in question had a fairly unique name, you could grep the name and find the source that handles it.
[19:15:38] <andypugh> I choose the tab name in the INI file.
[19:20:45] <andypugh> I probably need to find an alternative solution to the problem. It's actually hardly a problem at all, but I am pursuing it because I expect the solution, when I find it, to be instructive.
[19:21:39] <kwallace> We need the name of the tab's container, which is what we are looking for.
[19:22:18] <andypugh> I don't think it has one.
[19:22:34] <andypugh> Unless you mean "Touchy"
[19:22:57] <andypugh> But my code is embedded at a lower level
[19:29:07] <kwallace> I'm at a loss for now. Dinner soon.
[19:39:54] <andypugh> Night folks
[20:04:52] <cmorley> andypugh: You can't select signals on the top level window, when using a gladeVCP panel that is embedded.
[20:05:13] <cmorley> The embedding process removes the top level window.
[20:08:37] <cmorley> You also can't reference AXIS or TOUCHY's widgets from the handler file so can't actually detect when the tab is changed.
[20:10:01] <cmorley> but you should be able to detect when the Vpane is shown. try hide and show or map and unmap signals.
[20:10:37] <cmorley> hmm maybe i'll test that theory...
[23:23:41] <KGB-linuxcnc> 03nieson 05master 830b7e5 06linuxcnc 10share/gscreen/ 10skins/gmoccapy/gmoccapy.glade 10skins/gmoccapy/gmoccapy_handler.py 10skins/gmoccapy/release_notes.txt * gmoccapy_0_9_8_2 - remade the design of spindle and coolant frames
[23:23:41] <KGB-linuxcnc> 03nieson 05master b21a72f 06linuxcnc 10configs/sim/gmoccapy/gmoccapy.ini * gmoccapy_0_9_8_2 - changed cycle time in gmoccapy.ini to default 100