00:57:08 rayh has quit 03:50:17 hmmm - cradek, shouldn't those chown/chmod lines use $(DESTDIR)$(bindir)? 03:50:44 (or just $(BIN_DIR) ) 03:51:24 well, they're a hack for run-in-place 03:52:07 ah - OK 03:52:25 make install sets everything right using DESTDIR etc 03:52:46 ok - I just saw the commit, didn't see which part of the file it was in 03:53:37 out of curiosity, do you know a reasonably easy way to boot an old computer from CDROM (using some form of grub boot disk or the like)? 03:53:53 there's a floppy that sometimes works 03:53:56 actually, to start a CDROM, booting from floppy 03:54:16 I tried grub and isolinux, but neither knows about my SCSI CDROM 03:54:21 http://timeguy.com/cradek/smartboot 03:54:24 sorry - syslinux 03:54:33 SCSI CDROM will need support in the SCSI card's BIOS 03:54:40 it rarely works. 03:54:51 try smartboot... 03:55:02 got that, but the mainboard BIOS doesn't seem to like it (even though it has CDROM and lots of other boot options) 03:55:31 drop an IDE CD in it temporarily 03:55:34 heh 03:55:40 really 03:55:46 booting from SCSI CD usually doesn't work. 03:55:51 you'd think that Adaptec and Supermicro parts would work, but oh, well 03:55:59 (and an NEC CDROM) 03:56:07 maybe I should throw in the Toshiba? 03:56:16 hmmm - I think it's in the Indigo2 right now 04:06:21 rayh has joined #emc-devel 04:06:38 hiya Ray 04:07:51 Hi Steven 04:08:57 did you see the post on CCED from the guy who wrote software to run the Galil motion cards (in Windows)? 04:09:34 No I don't go there much anymore. 04:09:43 What was the gist of it. 04:10:48 well - he wrote software that can drive the Galil DMC18xx PCI servo cards 04:10:58 plus some CAM sofwtare to convert DXF to G-Code 04:11:12 it's a work in progress though 04:11:26 both or the converter? 04:12:27 both, I gather 04:12:46 though apparently the card works well enough for his laser machine 04:13:17 I emailed him asking if he'd open-source the driver and DXF converter, and gave him links to EMC info 04:13:36 Mitts had a Galil clone and 95 long years ago. 04:13:42 (haven't heard back yet) 04:13:59 Mitts? 04:14:09 Mittsubishi 04:14:20 maybe that's one t 04:14:22 - got one of their VFDs 04:14:27 ah ... 04:14:33 one day, I'll hook it up 04:14:47 They build the control and drive hardware for Mazak. 04:15:02 cool 04:16:06 You and jmk get anywhere with halwatch? 04:16:13 not really 04:16:44 I'm making some benchmarking code, so I can see just how bad the name-based searches are 04:17:13 I'll put a wait statement in the watch stuff and see if that cures the early return problem. 04:17:38 hmm - can you refresh my memory about the "early return problem" ?? 04:18:06 it's a race condition I think. 04:18:35 I set up a loop with after x000 {loopWatch} 04:18:57 Then proceed to add additional variables with a mouse click. 04:19:13 Great when it works but... 04:20:15 One problem with tcl is that you can't stop the after command. 04:20:24 It has to complete. 04:20:56 So you sit there twiddling thumbs until x000 time has passed. 04:21:22 so after ... isn't a "yield" - it spins? 04:21:41 It looks like that to me. 04:21:59 ok, where's the race? 04:22:00 after registers the script after it with the event handler. 04:22:12 ok - so it shouldn't be spinning - it's a timer 04:22:29 Well if the click to add a new signal is very close to the end of the time 04:22:46 you get overlapping or missed returns from halcmd. 04:23:23 ah - OK. you're calling exHAL from both WatchHAL and watchloop 04:23:36 naughty naughty 04:23:42 I tried putting a flag in the system. To redirect the return. 04:23:49 that was a bust. 04:24:04 yep. 04:24:12 and several other places as well. 04:24:14 actaully, either of those should work fine 04:24:32 lemme look at this for a sec 04:25:47 exHAL should protect itself with a "busy" flag 04:26:41 Yes it should. 04:27:08 presumably, if exHAL is executing (because of the after clause), and someone clicks on a new watch (causing WatchHAL to riun exHAL), they'll be different instances of the function? 04:27:21 (ie, local variables will be different) 04:28:26 true for building the new widgets but the return from the timer 04:28:48 seems to get seen by the new. 04:29:50 watchHAL should just add to the list, and let the next refresh take care of the data update 04:30:46 But it must read a return from the var to know what kind of widget to use to show it. 04:31:42 ah - watchloop doesn't create widgets, it only changes their appearance 04:32:27 ok - so the thing to do is make a separate list of watch variables in watchHAL "newWatches" 04:32:58 and watchloop actually creates widgets for anything in newWatches, and removes the items from that list as the widgets are created 04:33:48 as long as watchHAL is appending, and watchLoop is taking off the front of the array, it should work even if watchHAL is called during a run of watchLoop 04:34:14 values converted to led or value 04:34:32 ? 04:35:03 all watchHAL does is read values and set widgets. 04:35:22 right - I'm saying that it should be the "watch display manager" 04:35:30 I has to do it for the entire list of displayed vars on each loop. 04:35:38 anything you want to display should be created in that function 04:36:20 sort of an "oh this is new, let's make a display for it. 04:36:24 yep 04:36:44 or "here's the list of new things to add widgets for" 04:37:00 watchloop moves items from the new list to the displayed list 04:37:05 so watchHAL sets its list of vars to oldlist and compares each loop? 04:37:05 as it creates the widgets 04:37:29 it could do that, but a "newWatches" list would do just as well 04:37:36 You can't click leaves fast enough to get a list of new. 04:37:53 it may be one element long then ;) 04:38:09 I don't understand "newWatches" at all 04:38:28 How does a newWatch get merged with the running list. 04:38:38 ok - here's how I envision it 04:39:09 when the user clicks on a tree node, the item gets added to "NewWatches" by WatchHAL 04:39:32 WatchHAL no longer creates the widgets, so it doesn't need to run exHAL to get the type 04:40:19 watchLoop will run through the normal watch list ($which), just like it does now 04:41:08 after doing that, it will run through $NewWatches, and will add widgets for each item in that list (and delete the item from the list as the widget is added) 04:41:56 since you get the data value when you get the type from exHAL, it hardly takes any extra effort 04:42:39 I'd still have watchHAL check both the NewWatches list and the "which" list for duplicates, so that watchLoop doesn't have the burden 04:43:06 (though it might be more efficient for weatchLoop to check when it's about to move an item from $NewWatches to $which) 04:43:15 did that make sense? 04:44:23 sorta. I'll copy it and read over in the morning. 04:44:28 heh - OK 04:44:36 there are probably details that I haven't thought through 04:44:46 (almost guaranteed, in fact) 04:45:03 That is exactly how I feel about my own work. 04:45:30 well - those get sorted out eventually 04:46:28 By the time they do, I usually have such a glob of junk that it is hard to make sence of any of it. 04:47:02 Thanks for the ideas. 04:47:17 well - this stuff is sensible, but tcl/tk doesn't seem to have any good synchronization primitives (semaphores / mutexes), so it makes pseudo-multi-threaded stuff hard 04:47:23 sure - happy to help 04:48:03 Yes. I wonder how it does real threading. 04:48:18 For a while we got 3 versions of emcsh each startup. 04:48:31 weird 04:48:36 They wouldn't shut down using the emc script either. 04:48:46 weirder 04:48:56 it uses killall, doesn't it? 04:49:09 Had to recompile the tcl source without multiple threading. 04:49:35 hmm 04:49:39 Yes it does but the threads were interlocked so you could not kill except by starting at one end. 04:49:52 wish has near-threading, since events cause non-linear execution 04:50:07 but it's only "near" 04:50:15 Yep. 04:50:44 I've often wished that we could marry emc's status variables with corresponding 04:51:11 tcl vars. Then we could just register all the variables with the event loop 04:51:25 and forget the after and that update proc. 04:51:32 that would be nice 04:52:02 I tried it on some test stuff but don't know c well enough to pull it off. 04:52:16 I wonder if a check of chanflag at the beginning of exHAL would help anything 04:52:36 like (while chanflag == rd) wait 04:52:57 I tried something like that but don't remember the result. 04:53:04 I'll try that in the morning as well. 04:53:35 While is so prone to locking up the system that I try to avoid it. 04:53:50 do global variables get created when they're first referenced as globals in a function? 04:53:51 heh 04:53:54 My use of while needs a watchdog. 04:53:59 gotta love possibly-infinite-loops 04:54:04 yep 04:54:05 Yes. 04:54:21 ok - I didn't see a declaration of chanflag anywhere 04:54:59 the loop could be while (chanflag == rd && count < 100000) { after 100 count = count + 1} 04:55:11 make that count < 100 04:55:37 sure. 04:56:12 chanflag is global in exHAL 04:56:27 I saw that - that's why I asked about creation 04:57:00 Some coders do tend to put a global list at the start of their program. 04:57:17 probably people who are used to C ;) 04:58:31 Don't you type the vars there also. 04:58:50 yep - hence the global list at the beginning of the program 04:59:27 you don't need to explicitly declare them as globals in functions though - they'll be used automatically (unless there's also a local variable of the same name) 05:00:07 Using namespaces it is possible to work vars from a distance but I've never gotten the hang of it. 05:00:18 Almost like pointers. 05:00:22 heh 05:00:27 almost 05:00:50 I'd say C++ is better with pointers, but somebody might throw things at me 05:01:25 not me. 05:01:30 nope 05:01:57 it's funny - a lot of the stuff that jmk did with pin types and that kind of thing would be nearly automatic in C++ 05:02:09 Gotta get out of here. Hope to finish up most of halconfig tomorrow 05:02:13 Really. 05:02:20 ok - see you. have a good night 05:02:26 like inheritance 05:02:47 yes - inheritance, "virtual tables", run-time type information ... 05:03:00 the ability to "overload" functions 05:03:15 (some people hate it, but I think it's great) 05:03:22 "overload" ? 05:03:43 yep - you can define several functions with the same name, but different arguments 05:04:13 so you can have, say, 6 versions of hal_pin_new, each of which takes a differnet pin type, and does the right thing with it 05:04:38 but you always call a function called "hal_pin_new" with your type that inherits from "hal_pin" 05:05:03 (or signals - call one version with a bool, one with an int, and one with a float ...) 05:05:27 you can even add definitions for symbols, like +, - * etc 05:05:36 I can feel nightmares on the horizon. 05:05:40 heh 05:05:56 I remember some discussion about redefining things like + 05:05:58 I wouldn't suggest that HAL be rewritten in C++, don't worry 05:06:16 like I said - it's great if used well, but it does hide what's "actually happening" 05:06:30 Paul made a C++ class out of the emcPose, remember? 05:06:53 so you can say "Pose1 = Pose2+Pose3", and it does the right thing 05:06:53 vaguely 05:07:20 but it's a function call hidden behind a plus sign, so some people don't like it 05:08:07 what's interesting about it is that you could also do things like having kinematics be automatic 05:09:00 by automatic you mean ready to be used if needed or defined. 05:09:05 reassign the = so that a variable of WorldPoseType can be directly assigned to MachinePoseType, and the correct kinematic transform gets called 05:09:31 so "MachinePose = WorldPose" would just work 05:09:44 it would call the kinematic transform function 05:10:10 (if you write the overloaded = correctly) 05:11:27 I wish I could find my C++ book - I should read up on this stuff more 05:11:32 I can see how the line reads okay to represent the transform. 05:12:07 yep, but it can be hard to tell how much work a simple little '=' will have to do, hence the issues 05:12:21 conceptually, it's great 05:12:27 in RT, it can be deadly 05:12:27 I can also see how the overload of the function can cause massive debug issues. 05:13:07 yeah - though a debugger will show the real function call (to the function "operator=" ) 05:14:19 anyway - you wanted to get to bed, I should stop blathering 05:14:28 It's a question of getting from the simple looking formula "MachinePose = WorldPose" down to the function and back. 05:14:46 how do you mean? 05:15:34 Well machinepose is made up of many elements/variables 05:15:46 when the source code "MachinePose = WorldPose" is encountered, the compiler inserts the function call "MachinePose.operator=(&MachinePose, &WorldPose)" 05:16:26 so it's just a function call, as though one had done "InverseKinematics(&MachinePose, &WorldPose)" 05:16:38 (the ampersand means "the address of") 05:17:31 the programmer still writes those functions though, there's no way around that ;) 05:17:53 I guess I was thinking of the load of variables on each side of the equals 05:18:02 right 05:18:14 even worse is the fact that a machine may not be cartesian 05:18:19 and how each is properly handled by the maths hidden behind it. 05:18:38 right. hiding complexity is good at some levels, and bad at others 05:18:47 Well trivkins is a bit easier although genhexkins isn't that bad conceptually. 05:19:10 "octapodkins" would still look the same, which is a benefit and a problem 05:19:22 depending on how you look at it 05:19:32 Sagar's scarakins was really quite easy to see. 05:19:52 that's the radial arm with a quill-like Z? 05:20:02 actually, two horizontal joints 05:20:04 ? 05:20:50 Yes. Looks like a shoulder and elbow 05:21:06 with z at the hand and no wrist 05:21:08 right - I saw that one. looks cool for some PCB-style applications 05:21:10 yep 05:21:29 gotta crash. see you guys. 05:21:35 rayh has quit 15:27:30 rayh has joined #emc-devel 20:39:31 I see that we are missing the old help files from emc. 20:40:02 what do you think of emc2/docs/help as a location for these. 20:40:18 fine with me 20:40:46 I'd like to make the names of each help file refer to the program that uses it. 20:41:22 so one file might look like emc2/docs/help/tkemchelp.txt 20:41:28 or some such. 20:41:57 how about tkemc.help (or tkemc.hlp) ? 20:43:11 that should be okay. If we expanded the help function in tkemc to include html we'd name it tkemc.html 20:43:57 right 20:44:24 Okay. If others don't object, I'll do that bit of work tomorrow. 20:44:46 Then modify all the ini files to find it there. 20:45:01 don't 20:45:15 that complicates run-in-place vs. install 20:45:24 I'd rather have tkemc find it on it's own 20:45:36 maybe based on the runscript 20:49:28 how does that sound? 21:05:49 rayh has quit 22:16:16 logger_devel has joined #emc-devel 22:16:16 topic is: "Welcome to the Enhanced Machine Control development place. | Regular Developers' meetings 24/7 !" 22:16:16 Users on #emc-devel: logger_devel LawrenceG cradek steves_logging @ChanServ SWPadnos anonimasu jtr_ alex_joni