PDA

View Full Version : Cobra-matic : Retro Bakelite Phonograph



Mach
09-06-2007, 11:15 PM
Ahh new work log! Retro-freakiness continues. :)

This one's going in the books as: Project Cobra-matic. Its a mod based on 1951 Zenith H664 Cobra-matic phonograph. Behold the Bakelite goodness.
http://lh3.google.com/MachModAlbum/Rt95968IozI/AAAAAAAAAug/FtKbV0Hn9SU/s400/ee_1_b.JPG

This is probably the largest piece of Bakelite electronics that I've found next to a Bakelite TV. It measures10"x16"x20" and is made from very heavy quarter inch Bakelite. I'm pretty excited about this one.

So much so, I forgot pics during the tear down. This is what it looked like before I started(From:www.radiophile.com)

http://lh5.google.com/MachModAlbum/Rt99Ra8Io-I/AAAAAAAAAwg/VExXeIEtTUM/s800/h664-1.jpghttp://lh5.google.com/MachModAlbum/Rt99Ra8Io9I/AAAAAAAAAwY/PA-7eRUTVJc/s800/h664-2.jpg

http://lh5.google.com/MachModAlbum/Rt99Qa8Io4I/AAAAAAAAAvw/9tg8NWJqzYc/s400/c703_3.JPG

I'm mostly interested in the case not the record player. Interestingly enough, I was able to flip the record player mechanism on eBay for more than I paid for the whole phonograph. EBay's a funny place.

The plan? This is a gaming, performance PC, not too cutting edge as I want to keep it as quiet as possible. I considered water cooling but am going to stick with air. Although I do have a wicked brass and copper fire extinguisher or a copper toilet tank float :) that would work as cool reservoir. So yeah, like Retromod, brass and copper will play a part as will more "tube-punk"accents.

Hardware specs:
Motherboard: Gigabyte 965PDQ6
Processor: Intel Core Duo E6600
Video Card:XFX GeForce 7950GT
Memory: Corsair XMS2 2GB
Power Supply: Seasonic S12 550
HD: WD SE16 250GB
Cooling:
Thermalright XP-90C CPU Cooler
Antec Bigboy 200mm fan
Nexus 92mm fan

Hardware pics:

http://lh4.google.com/MachModAlbum/Rt95yK8IoXI/AAAAAAAAAvA/jwxD1dhOZZw/s400/IMG_3063.JPG
The pic shows the Thermalright 120. It had to be swapped out for the 90c after I saw all the copper on the motherboard. :)

http://lh4.google.com/MachModAlbum/Rt951K8IobI/AAAAAAAAArc/PlGUT5rQWV0/s400/IMG_3081.JPG
Yowza it's big. This will provide the primary air intake after some modding...of course.

That's about it for now. I'll be time sharing with Retromod (http://www.thebestcasescenario.com/forum/showthread.php?t=272) but thought I'd share a little of the excitement. :p

Eclecticos
09-06-2007, 11:47 PM
Really Diggin' this! :up:
I will be looking foward to seeing how it turns out.

Ouch!
09-07-2007, 08:49 AM
Oh what a cool "Case" I hope you are going to keep this looking as 'stock' as possible. Have you considered a laptop style DVDRW?
You can get slot loading ones, that would hide away nicely, on this excellent case.

Good luck

Ouch!

Xperiment
09-07-2007, 09:07 AM
Wow that 'case' has alot of modding potential. Would be cool to see a fan behind that huge dial on the front. Or even a vertical CD drive with the disk spinning behind it.

Hope it goes well.

Mach
09-07-2007, 04:26 PM
Thanks for the feedback! I'm excited to get on with it.

I'm going to try to keep it as original as possible on the exterior. I like stealthy "found-object" mods too. I looked that maximzed appearance and minimized guilt for the modding but after the experience of not cutting the bakelite on Retromod, I'm a little more relaxed about it now. It'll never be a phonograph again likewise for Retromod on the radio but I love the design of these things so exterior-wise not much if anything noticeable will change.

Inside there will be changes, mostly out of necessity. The case is huge but the space is configured wrong for the motherboard. Check Makro Specials (https://www.especials.co.za/makro/) and Pick n Pay Specials (https://www.especials.co.za/pick-n-pay/). The record player is supported on 4 3 inch "legs" that eat up half the vertical height in the case. They'll be encouraged to leave with the help of my dremel. ;)

The CD/DVD is a bit of a problem. I've got a full size drive and a slot loader that I can mod. I'd love to try this:

http://lh5.google.com/image/MachModAlbum/Rn7flBZOglI/AAAAAAAAALc/ei3bB_J4Hjw/s400/cdplayer1.jpg

Imagine, push the cd eject, the lid raises with an exposed cd. Put in a CD and the lid closes.

My plan is to install the Bigboy behind the grill. Major fan hacking underway.

But....ever have a moment where an idea is so obvious that you get pissed you didn't see it first?

This is the feeling I got when I saw this in DrumThumper's post the other day. Datamancer (www.datamancer.net) is a steampunk madman. Checkout his other mods. :eek:
http://lh3.google.com/MachModAlbum/RuGxVa8IpkI/AAAAAAAAA2o/I93mGCZsETU/s800/computationalengine3.jpg

So, Xperiment, yeah this is what I should have though of but it'll be the bigboy back there and the lift kit on the lid for the cd.

Xperiment
09-07-2007, 04:32 PM
Love the idea for the 'lift lid' CD, kinda retro meets techno, hell you could even invent a new musical genre whilst your at it lol.

Will defo be watching this one +rep.

simon275
09-07-2007, 08:10 PM
Looks like a cool found item mod. I like it.

Also it's good to see you have Paul's book.

Mach
09-16-2007, 11:11 PM
Thanks Simon and Xperiment. :)

More for your viewing pleasure:

A little sketch-up mock-up to explain where this is going. The motherboard and case aren't exactly right but for sizing it'll work. I may need to flip the motherboard around and move the PSU back further in the case to fit the DVD drive in the front.
http://lh6.google.com/MachModAlbum/Ru2qqkEq_3I/AAAAAAAAA4I/a01WFCMl6vc/s800/Untitled%20-%2012.jpg
http://lh4.google.com/MachModAlbum/Ru2qhEEq_2I/AAAAAAAAA4A/K7wQzf522jk/s800/Untitled%20-%2011.jpg

The case from the outside. It had about 6 inches of clearance on the inside before modding with the top of the video card just grazing the lid.
(These pictures were taken after the carnage)
http://lh4.google.com/MachModAlbum/Rt-VxK8IpOI/AAAAAAAAAy8/hseO3XFYzkI/s800/IMG_3767.JPG

The original phonograph turn table was mounted about 2-3 inches above the floor of the case on bakelite standoffs. I'm guessing for airflow(?) reasons.
http://lh3.google.com/MachModAlbum/Rt-Vy68IpUI/AAAAAAAAAzs/j4O_lks8YUs/s800/IMG_3773.JPG

With a dremel cutoff wheel, I removed the standoffs to open the case up.
http://lh5.google.com/MachModAlbum/Rt-Vza8IpVI/AAAAAAAAAz0/Nv-YOizSsr8/s800/IMG_3774.JPG

With the standoffs in place the PSU and video card were sticking out of the case.
http://lh5.google.com/MachModAlbum/Rt-Vxa8IpPI/AAAAAAAAAzE/BbiP65XGrwo/s800/IMG_3768.JPG

After the dremeling, much more room. The metal is cool perforated steel that I found awhile back. It will eventually be brass plated (along with the front bezel) when I've figured out the final place for everything. Needs some primer tho...I can see surface rust in the pic.
http://lh3.google.com/MachModAlbum/Rt-Vz68IpWI/AAAAAAAAAz8/Ht5aMkWe1zQ/s800/IMG_3775.JPG

The front bezel - the gold/brass plating is wearing thin in a few places. It's pot metal underneath.
http://lh4.google.com/MachModAlbum/Rt-V1K8IpaI/AAAAAAAAA0c/T7HUBbpm8OA/s800/IMG_3779.JPG

Mach
09-16-2007, 11:18 PM
Remember this fan? It's an Antec 200mm
http://lh4.google.com/MachModAlbum/Rt951K8IobI/AAAAAAAAArc/PlGUT5rQWV0/s800/IMG_3081.JPG (http://picasaweb.google.com/MachModAlbum/Cobramatic/photo#5106934456838037938)

Turns out the fan was about 1/2-3/4" too wide to fit behind the bezel. The cover wouldn't fit back on. After I dremel'd the outside housing ring off, it fits with some tweaking. I put a thin styrene skin around the outside edge to even it out. (Note to self: White putty (http://www2.towerhobbies.com/cgi-bin/wti0001p?&I=LXFP28" title=White putty) melts styrene if you put too much on.)
http://lh4.google.com/MachModAlbum/Rt953K8IoiI/AAAAAAAAAsU/Zo_ptp1_77M/s800/IMG_3584.JPG

Ready for painting..,
http://lh4.google.com/MachModAlbum/Rt954K8IomI/AAAAAAAAAs0/zqliFBGmakg/s800/IMG_3588.JPG

The Bigboy has a 3 way switch for 980~1720 RPM, 34-60CFM, 20-32 dba depending on the switch position.
http://lh5.google.com/MachModAlbum/Rt954a8IonI/AAAAAAAAAs8/rhfQCAKxpFU/s800/IMG_3589.JPG

Here it is after paint. The fan blades were painted with Fusion (http://www.krylon.com/main/product_template.cfm?levelid=5&sub_levelid=10&prod uctid=1751&content=product_details" title=Fusion) brown, and dusted with black, and panzer grey. The housing was painted with fusion Brown and then coated with textured Rustoleum (http://www.rustoleum.com/product.asp?frm_product_id=642&SBL=1" title=Rustoleum). The color is autumn brown.
http://lh3.google.com/MachModAlbum/Rt95568IosI/AAAAAAAAAto/g6L3anoFBy0/s800/IMG_3624.JPG
http://lh3.google.com/MachModAlbum/Rt95668IovI/AAAAAAAAAuA/AWPnZQVqQSE/s800/IMG_3627.JPG

I put a piece of copper contact paper where the Antec label was.
http://lh3.google.com/MachModAlbum/Rt95968IoyI/AAAAAAAAAuY/MwfYQL4KoFM/s800/IMG_3630.JPG

To mount it to the bezel took some trial and error.
http://lh6.google.com/MachModAlbum/Rt954q8IopI/AAAAAAAAAtQ/QJ-yAWqV7dw/s800/IMG_3591.JPG
To hold the screen on the bezel, it has posts for friction nuts that I just threaded. Then I tapped nylon spacers to hold the screen in place.

http://lh6.google.com/MachModAlbum/Rt952q8IogI/AAAAAAAAAsE/TisJWX_B_Bw/s800/IMG_3582.JPG

And to have a place to mount the fan. Sometimes the simplest answers are the best.
http://lh6.google.com/MachModAlbum/Rt951q8IodI/AAAAAAAAArs/_gi7VRFTJIE/s800/IMG_3579.JPG

The fan mounted
http://lh5.google.com/MachModAlbum/Rt-V1a8IpbI/AAAAAAAAA0k/J2W_HtM8AqI/s800/IMG_3780.JPG

From the front, it's shifted down about 3/8 inch from dead center due to space.
http://lh4.google.com/MachModAlbum/Rt-V3K8IpcI/AAAAAAAAA0s/ypqL6mPqPM0/s800/IMG_3781.JPG

Which pics are better for worklogs? The bigger ones or the smaller ones in the previous posts?

Mach
09-16-2007, 11:21 PM
PSU mounting bracket made from 1/2 aluminum angle and aluminum modder's mesh. (How do you like my simulated fan grill? ;) It helps me remember which side is which.)
http://lh3.google.com/MachModAlbum/Rt-V068IpZI/AAAAAAAAA0U/mO-fvdcIF44/s800/IMG_3778.JPG

I'll either paint it black or a red primer color like the front bezel screen. The angle is one piece notched and held together by JB Weld type epoxy.
http://lh6.google.com/MachModAlbum/Rt-Vtq8IpDI/AAAAAAAAAxg/0yYqbV1SOl8/s800/IMG_3756.JPG

Mach
09-16-2007, 11:37 PM
The CPU cooler in place after a good lapping. The hardware survived burn in so no hardware RMA's yet. It's alot faster than any computer I have now. Sorry I didn't think to get a screen shot of the test scores.
http://lh6.google.com/MachModAlbum/Rt-Vuq8IpGI/AAAAAAAAA3g/ri2ufgQbN0Y/s800/IMG_3759.JPG

Don't let anyone tell you that the Thermalright XP90c fits on the Gigabyte 965PDQ6. Adapter plate my hiney. I made it work with standoffs and the temps are fine but I'll lose 1/2" in vertical clearance due to the extra long standoffs if I don't cut a hole in the perforated metal to allow the adapter plate to clear.
http://lh3.google.com/MachModAlbum/Rt-Vu68IpHI/AAAAAAAAA3k/tC11kJvXyHk/s800/IMG_3760.JPG

A parting shot for an idea I had for cable management but I don't think that I'll have room. I was thinking that it would look cool with led-lit orange plexi behind.
http://lh4.google.com/MachModAlbum/Rt-V4K8IpdI/AAAAAAAAA00/hWpC4Rf7eJw/s800/IMG_3782.JPG

Finally, to automate the lid opening, I've got a linear actuator but know nothing about how best to rig them up. Does anyone have any tips or tutorials on using them? What angle should I place it at? Should I balance the lid with a gas shock? The lid is about 3 or 4 lbs.

Thanks for looking. I'll be out of pocket for the next few weeks due to work but next up, actuator fun. :) Hasta luego...

Mach
07-14-2008, 02:41 AM
Apologies for the lack of update on Cobra-matic and Retromod. I've been in lurk mode on the forums as the new job has been kicking my butt. Enough excuses though, I've been modding for a couple hours here and there so that I've got some progress to at least bring this worklog into this year.

One of the first hurdles was the location of the DVD drive. I wanted it to be upfront like a record player, kinda like this:
http://lh3.ggpht.com/MachModAlbum/SHrpUhbOrpI/AAAAAAAAB0w/V54THxx8law/s800/CD%20Tray.jpg


http://lh5.ggpht.com/MachModAlbum/SHrpU8FDuRI/AAAAAAAAB04/9jbwldco3p4/s800/CD%20Tray2.jpg

The DVD is a slimline drive mounted on a piece of copper with an art nouveau design acid etched (http://www.fullnet.com/~tomg/gooteepc.htm) into the surface. The bezel is from an old mantle clock and covers the cd while spinning. Since the DVD has a locking hub, it'll work with a cutout in the top.

http://lh4.ggpht.com/MachModAlbum/SHr_Z2yawhI/AAAAAAAAB2Y/C_a3M8U3Z0E/s800/IMG_4136.JPG

http://lh4.ggpht.com/MachModAlbum/SHr-zlLLeSI/AAAAAAAAB2Q/nKHKQHlLXO8/s800/IMG_4139.JPG

I'll try to grab a video of it spinning with the LEDs lit up next weekend.

Karbon Killa
07-14-2008, 06:07 AM
My brother had that same mobo. His water cooling system uses the same adapter. We couldn't get it to fit, so we just unscrewed the backside heatsink/heatspreader thing. Worked perfectly. Mod looks great. Love the idea. Keep it up.

Mach
07-17-2008, 02:37 PM
Thanks Karbon!:)

Borrowing an idea from Retromod, here's the HD suspension system. It's suspended to eliminate vibrations. Suspension system add to the HD heat so I'm interested in seeing how it fares.

Sketchup
http://lh4.ggpht.com/MachModAlbum/SH4oYh3_hCI/AAAAAAAAB3Q/ZVbhI7w9P0k/s400/HD%20Cage.jpg


Actual (brass channel and springs sourced from the local hardware store)
http://lh5.ggpht.com/MachModAlbum/SH4Hz9TjUpI/AAAAAAAAB3A/wi93cGh6duc/s400/IMG_4144.JPG


The fan grills are supposed to be back from the laser cutter today or tomorrow. Can't wait to see how they turned out.

The grill will replace the mesh in the front
http://lh5.ggpht.com/MachModAlbum/Rt99Ra8Io-I/AAAAAAAAAwg/VExXeIEtTUM/s400/h664-1.jpg


with something like this (it'll be either copper or brass plated) for better airflow from the Antec bigboy.
http://lh6.ggpht.com/MachModAlbum/SH4Ihif5WuI/AAAAAAAAB3I/hitqAvgr63w/s400/fan%20grill5.jpg

Experimenting with a firgelli L12 actuator to lift the lid but looks like it doesn't have enough power. Anyone have any experience with linear actuators?

p0Pe
07-17-2008, 04:40 PM
i like this:D cant wait to see how this will turn out! very god idea:)

+rep

Mach
07-18-2008, 12:00 AM
DVD Test - Spin up, Spin Down, and LEDs on
GXcaohgXaLw

Mach
07-18-2008, 05:58 PM
Thanks for the comments and Rep, pOPe!

Got the fan grills today. Wow, do they look good. :banana::banana::banana:

Need to add Vintage Manufacturing (http://www.vintagelaser.com/home.html) to the Laser Cutting supplier list. They got the files on Saturday and they mailed on Monday.

Behold the laser cutting goodness:

http://lh4.ggpht.com/MachModAlbum/SIEOoe4ZqPI/AAAAAAAAB6A/tNKNL_Un7_k/s400/IMGP0164.JPG

Polished a little and in the bezel:

http://lh4.ggpht.com/MachModAlbum/SIEOel64VEI/AAAAAAAAB54/CtYhdgJ9Z64/s400/IMGP0162.JPG

The grill is laser cut from 0.0625 (1/16") carbon steel.

I got 3 grills as I want to try copper plating and painting to see which I like better. Just got back from the platers. They won't be able to give me a quote until next week. It'll be about twice what I expected but not enough that I'd try doing myself. Need to check a couple of other places to see if its going to be cheaper.

Went to get my camera and spotted this little guy hanging out on some quartz crystals in the living room. He's about the size of a quarter. Here lizard, lizard...

http://lh6.ggpht.com/MachModAlbum/SIEZz9jx3VI/AAAAAAAAB6M/gBPAXe1pn9c/s400/IMGP0176.JPG

Next up: EL & LED Lighting and how not to mod a power supply :rolleyes:

Maz
07-18-2008, 09:48 PM
you said actuator?
what a coincidence, i am a mechanical engineering student.
okay... so it doesn't have enough power to lift the lid by itself try to help it out with something or get another for the other side.

is it a three or five wire one?

the three has no limit switches and will grind itself apart if it hits the end
five has switches, but you still need to stop it.

you can control it with your io port fairly easily, or you could make it a completely separate system.

but please when you ask a general question you get a general answer

Mach
07-18-2008, 10:59 PM
Thanks Maz, any help that you can provide is appreciated. Understood on the general nature of the question. So specifics, it's a firgelli L12 miniature linear actuator. (http://www.trossenrobotics.com/store/p/5310-L12-100mm-stroke-Miniature-Actuator.aspx)

L12 Specifications
Gearing Option 298
Peak Power Point 67 N @ 2 mm/s
Peak Efficiency Point 30 N @ 3 mm/s
Max Speed (no load) 4 mm/s
Backdrive Force 230 N
Stroke Option 100 mm

It comes with a 3 wire interface (it has both the hobby servo interface and industrial control interface). Beyond being underpowered, I believe this is part of the problem "If the load exceeds the backdrive force, the actuator will backdrive."

It's being controlled through the servo interface using a phidgets USB servo control. (http://www.phidgets.com/products.php?product_id=1000) Because the actuator is 12v dc and the phidget is 5v dc, I've connected them using a servo y-cable.

Offsetting it with a gas spring or counter weight lift maybe possible but space is tight in the case. I also have a Hitec HS-815BB Sail Winch Servo (http://www.hitecrcd.com/servos/show?name=HS-815BB) which can deliver 275 oz/in of torque.

It's too many years since ME101 so any suggestions that you can make would be appreciated. It would be a tremendous help if you can point me to a website or software that can help me with the calculations on how far I'm out with either of these drivers.

I'll grab some pictures of the mounting point and dimensions to highlight the space problems.

Mach
07-19-2008, 06:53 AM
Given the problem with the adapter plate on the motherboard.

http://lh3.ggpht.com/MachModAlbum/Rt-Vu68IpHI/AAAAAAAAA3k/tC11kJvXyHk/s400/IMG_3760.JPG


I added a quarter inch acrylic spacer with standoffs to raise the motherboard:

http://lh3.ggpht.com/MachModAlbum/SIAI4_5r1FI/AAAAAAAAB4s/vleRekDih70/s400/IMGP0149.JPG


With 8 leds:

http://lh3.ggpht.com/MachModAlbum/SIAI5doRxeI/AAAAAAAAB40/G0ecj4rBGl0/s400/IMGP0153.JPG

Inspired by the Decobox mod (http://www.mini-itx.com/projects/decobox/default.asp?page=3) and a desire to try out El Wire:

http://lh6.ggpht.com/MachModAlbum/SIAI56bSnZI/AAAAAAAAB48/qxazcJ262ak/s400/IMGP0154.JPG

The El Wire is run inside of polyethylene tubing for a more muted effect. Helpful El Wire soldering tutorial (http://www.instructables.com/id/SCWIMIKF82EU3OK/).

Once in place behind the fan and grill, the El wire will add a soft amber glow to the inside:
http://lh3.ggpht.com/MachModAlbum/SIAI6L3SuQI/AAAAAAAAB5E/e5tTSZ2Eb7U/s400/IMGP0155.JPG

Taped in place for now:
http://lh3.ggpht.com/MachModAlbum/SIAI8in8QNI/AAAAAAAAB5U/x7Vkk4S0w0g/s400/IMGP0157.JPG

My girlfriend pointed out that the copper shelf liner on the back of the fan looks cheesy so I'll etch a replacement at some point.

Fan spinning:
http://lh4.ggpht.com/MachModAlbum/SIAI60BQ7AI/AAAAAAAAB5M/b6T5eKkwUHQ/s400/IMGP0156.JPG

DonT-FeaR
07-19-2008, 07:00 AM
thats looks cool keep it up

Mach
07-20-2008, 10:41 PM
Thanks DonT-FeaR, I'll keep at it. ;)

Instead of the update on the psu, time to do something about the backside cover for the fan. Speed mod time:

Review method at:
http://www.fullnet.com/u/tomg/gooteepc.htm

Design new back cover in CorelDraw:

http://lh6.ggpht.com/MachModAlbum/SIP24vA8PEI/AAAAAAAAB7k/Rd8KhJn3uWE/s400/Untitled%20-%201.jpg

Race to Kinko's and print the reverse image (always pays to have more than one):

http://lh3.ggpht.com/MachModAlbum/SIP24dQ-WPI/AAAAAAAAB7c/OXtbduXTtmY/s400/IMGP0225.JPG

Cut copper to approximate size (note stove background):

http://lh4.ggpht.com/MachModAlbum/SIP4GSwnyDI/AAAAAAAAB8M/0YER7Lk5w0w/s400/IMGP0196.JPG


Put cutout laser print on copper; turn stove to 11:
http://lh5.ggpht.com/MachModAlbum/SIP4TufbiXI/AAAAAAAAB8Y/zeeZ7b167AI/s400/IMGP0199.JPG

Ensure SWMBO is gone :twisted:; use rolling pin to apply a metric assload pressure:
http://lh4.ggpht.com/MachModAlbum/SIP4iGdEQLI/AAAAAAAAB8g/6Pg69qN-L3U/s400/IMGP0201.JPG

Turn off stove; dunk copper in water to peel paper:

http://lh4.ggpht.com/MachModAlbum/SIP40udiMCI/AAAAAAAAB8o/SbwlUufm37w/s400/IMGP0203.JPG

Use thumb to clear more paper off; cover back in duct tape:

http://lh3.ggpht.com/MachModAlbum/SIP5D7k4tpI/AAAAAAAAB8w/z7r991KmR1c/s400/IMGP0207.JPG

Recite "Do what you oughta, add acid to water" 3X, dunk in acid/ peroxide mixture for 45 minutes:
http://lh5.ggpht.com/MachModAlbum/SIP5dJKdFmI/AAAAAAAAB84/TpDWKKllqiE/s400/IMGP0216.JPG

Rinse with baking soda & water, remove tape, clean with acetone:

http://lh4.ggpht.com/MachModAlbum/SIP56qMO-fI/AAAAAAAAB9I/z_zB-VXmDVM/s400/IMGP0218.JPG

Grin, Clean-up and go to bed:
http://lh4.ggpht.com/MachModAlbum/SIP5pHrg2II/AAAAAAAAB9A/mvTIcoWphH8/s400/IMGP0217.JPG

Night folks.

DonT-FeaR
07-21-2008, 03:34 AM
lol nice very good work i like it

Mach
07-23-2008, 10:40 AM
Thanks for the comment. I was trying to wedge some progress in but the weekend was too crazy for much.

Plating is a no-go for the bezel front. It's pot metal which is going to be too expensive, $80-160 depending on the quote. I may get a fan grill done since they were cheaper but first I'm going to experiment with Dupi-Color's Metalcast paint (http://www.duplicolor.com/products/metalcast.html).

Mach
07-24-2008, 04:25 AM
Small update, the etched fan label epoxied in place
http://lh3.ggpht.com/MachModAlbum/SIg7pK1qHHI/AAAAAAAAB-A/unokqcNTEJE/s400/P1000122.JPG


99.9% less cheese.

DonT-FeaR
07-24-2008, 04:33 AM
you know you gain 3kg from that 0.1% of cheese

Mach
07-24-2008, 04:57 AM
lol, sure but my 3DMark scores just jumped up too. So I'm thinking I got that going for me.

Mach
07-25-2008, 01:42 AM
Original color looks anodized but its paint:
http://lh6.ggpht.com/MachModAlbum/Rt954q8IopI/AAAAAAAAAtQ/QJ-yAWqV7dw/s400/IMG_3591.JPG

Boiling in water and detergent:
http://lh6.ggpht.com/MachModAlbum/SIlheZC3q2I/AAAAAAAAB-o/Tgn2b9kWWG4/s400/IMG_4164.JPG

Came off, easy-peasy, with a paper towel after boiling.
http://lh6.ggpht.com/MachModAlbum/SIlhghE6OJI/AAAAAAAAB-4/hFIDpY1Hafk/s400/IMG_4166.JPG

Polished with steel wool
http://lh6.ggpht.com/MachModAlbum/SIlhhBto6EI/AAAAAAAAB_A/TTxXhKf4uFo/s400/IMG_4167.JPG

Boiled the station selector also. It's solid brass, not plate.
http://lh4.ggpht.com/MachModAlbum/SIlhf32DEPI/AAAAAAAAB-w/fkDsivSoVHg/s400/IMG_4165.JPG

Teaser shot of the paint for next time.
http://lh5.ggpht.com/MachModAlbum/SIlhcrQRoAI/AAAAAAAAB-g/OPtwQXUAe5Y/s400/IMG_4163.JPGv

DonT-FeaR
07-25-2008, 03:45 AM
thats alot of paint i cant wait

Mach
07-25-2008, 11:42 PM
Mixed results on the paint. Alot of overspray and uneveness. I'll strip it off and try again tomorrow. The color is not too bad on the bezel but the grill is too flat.

http://lh4.ggpht.com/MachModAlbum/SIqZ3qIbKOI/AAAAAAAAB_M/PWLc7v13juQ/s400/IMG_4170.JPG



http://lh4.ggpht.com/MachModAlbum/SIqZ4c9sOWI/AAAAAAAAB_U/DvORU7AbJQk/s400/IMG_4172.JPG

Mach
07-27-2008, 12:45 AM
Alot of progress to report on today. First, the second attempt at the dupli-color, went too heavy with the orange.

http://lh5.ggpht.com/MachModAlbum/SIvyh3KugtI/AAAAAAAACAM/eO6cr81rQ-g/s400/IMG_4189.JPG

Stripped and polished for a 3rd attempt
http://lh4.ggpht.com/MachModAlbum/SIvzE7yN3CI/AAAAAAAACAU/-bDCHcLHSdI/s400/IMG_4193.JPG

The key was 7-8 light coats and wiping down the metal before each coat to remove powdered paint. I wasn't painting in the sun so not sure why the paint was powdered as bad as it was. It was hot today so maybe that's part of it.

Here's the final result. I'll let it cure for a week before hitting it with some rubbing compound.
http://lh6.ggpht.com/MachModAlbum/SIvzguUAa8I/AAAAAAAACAc/ewq3GMBfLQo/s400/IMG_4194.JPG

Power supply painted
http://lh4.ggpht.com/MachModAlbum/SIv0Re4T6uI/AAAAAAAACAk/vZQkkFM3tHw/s400/IMG_4218.JPG

Aluminum mounting plate for the knobs
http://lh4.ggpht.com/MachModAlbum/SIv1PmZeWjI/AAAAAAAACAs/Kxw41v9L7B4/s400/IMG_4222.JPG

More later...

dfigravity
07-27-2008, 01:03 AM
this is a fantastic mod bro...I LOVE the mod to the cd drive...nice touch with the "vinyl" cd's too...I used to have a bunch of those. +rep for such a unique mod! Keep it up!

Mach
07-30-2008, 02:26 PM
Thanks dfigravity!

Small update (pics forthcoming):
Attempts to put together a PWM controller for the bigboy fan based on the a QKits Speed Controller (http://store.qkits.com/moreinfo.cfm?Product_ID=411) met with mixed results.

Soldered kit together:up:, tests fine :up:, wired to fan :up:, growls like a cat :down:. Plan B. Anybody have the pinouts on an Antec Tricool 3 way switch. Details would help the tear down that's going to occur.

Edit: Ok, think I understand (http://www.bcae1.com/switches.htm)

The idea is to make the middle knob control the fan speed. Any other ideas are welcome. :think:

http://lh5.ggpht.com/MachModAlbum/Rt99Ra8Io-I/AAAAAAAAAwg/VExXeIEtTUM/s400/h664-1.jpg


The interface for the 3 knobs that can be manually controlled goes like this. The left knob = Power, On, Reset
The right knob = Volume but can be switched to other inputs
The middle knob = Fan speed?

For programmatic control, the leds and the el wire will be controlled by a phidgets relay control (http://www.phidgets.com/products.php?product_id=1014).

The lid lift...still working on it which will be a post in itself but it'll be controlled via a program.

More later...

kris
07-30-2008, 05:50 PM
Dude that is awnesome!
Really like the way you use radio parts:)
+rep for the idea:up:

Mach
07-30-2008, 10:14 PM
Thanks kris! As you like the old radio parts, I'll post up the details on how not to mod your psu that I promised a few posts back.

Some of the wiser TBCS member schooled me on the need for a momentary switch to turn on the pc and to also reset the pc if it locks up. Rotary switches are NOT momentary; they're in it for the long haul. Old radio knobs are no exception...or are they? Exhibit #1 for your perusal.

http://lh6.ggpht.com/MachModAlbum/SJEEJrLyDDI/AAAAAAAACCo/7ZroPFxQ9bM/s400/IMG_4231.JPG


Thats a 3 pole - 4 throw rotary switch. Google will give you a better explanation but that means 4 knob positions that control 3 different things at once.

http://lh3.ggpht.com/MachModAlbum/SJEDygi7XNI/AAAAAAAACCI/vc9zqhva5c4/s400/IMG_4232.JPG

EEs and folks who've been at electronics for awhile will think thats nothing but to me, pretty cool to think a granny somewhere was using one of these to shift hundreds of volts around. But that's neither here nor there.

http://lh6.ggpht.com/MachModAlbum/SJEBkHfoiaI/AAAAAAAACB8/nBI7c-p3eK8/s400/IMG_4233.JPG

See that wire bit there? That's a return spring! Or momentary switch in a knob. You see the last position isn't locked; it'll snap back to position 3 if you let go of the knob. It can work as reset or power button. Here's where our story goes wrong though...

http://lh5.ggpht.com/MachModAlbum/SJEHJEwP-5I/AAAAAAAACDg/PesV6TPhcQQ/s400/IMG_4229.JPG


See that nicely painted power supply with the yellow lamp cord sticking out the base? Yes...lamp cord...I am duly ashamed to admit it. Tell me who I turn my dremel into now.

In a modding frenzy, the idea evolved that I could use the first position on the knob to replace the switch on the back of the power supply (which would have been hidden in the case). That means 115 volts through the center of the case attached to an antique radio switch.

Decidedly cool for granny's, not so much for me.

After doing this warranty voiding mod,which involved opening the power supply, cutting the switch post, and bridging the two halves with lamp cord, I got the feeling that there was an easier way....staring me in the face all along.

http://lh6.ggpht.com/MachModAlbum/SJEZFu7y5ZI/AAAAAAAACEE/HhAN9fdVTfs/s400/IMG_4245.JPG


That's the jumper to make the power supply work when it's not connected to the mother board (http://www.frozencpu.com/psu-173.html). It does the same thing as my bright idea but a lower voltages......

So....


http://lh6.ggpht.com/MachModAlbum/SJEZhNe8TCI/AAAAAAAACEk/pH4-lnk8NZc/s400/IMG_4243.JPG
http://lh4.ggpht.com/MachModAlbum/SJEZyCjm6PI/AAAAAAAACFE/0tQ0VvpdT80/s400/IMG_4247.JPG

http://lh5.ggpht.com/MachModAlbum/SJEaOVX2hTI/AAAAAAAACFU/7c_8XcT-EaA/s400/IMG_4234.JPG

http://lh3.ggpht.com/MachModAlbum/SJEaDi5P5PI/AAAAAAAACFM/2aGntkhIOb4/s400/IMG_4241.JPG


Let us never speak of this again. :rolleyes:

xmastree
07-31-2008, 02:10 AM
What's wrong with connecting the knob to the motherboard, just as the normal power button would be?
Use two different poles on the switch, one for power, one for reset.

Mach
07-31-2008, 06:43 AM
Let us never speak of this again.

Unless of course, xmastree wanders through and sees what I've done. :)

I was looking for 4 states Off, Power, On, Reset. In other words, replacing the power switch on the PSU.

xmastree
07-31-2008, 04:23 PM
Trouble with that idea is that you need normal for off and power, but momentary for on and reset.
Now, if you could find one with a push-pull action as well as rotary, you could make it work.

Mach
08-01-2008, 02:29 AM
Thanks for cross checking the idea. I was planning on adding a pulse circuit (capacitor tied to a relay) for the On position similar to the circuit for Retromod. Can you see a reason it won't work?

http://img91.imageshack.us/img91/8134/img24327jq.jpg

xmastree
08-01-2008, 03:35 AM
Hmm, so just three position.
1 = off
2 = on (via pulse)
3 = reset (via pulse)



I thought that 4 could be to hold down the power button and force it, but then you'd need to go back through 2 when turning off. And if you really need to force it off, just go to 1 anyway.

Should work, so long as the switch can handle the mans power.

Mach
08-01-2008, 08:20 AM
More like below. I'm shorting the contact because its a break before make switch. I didn't think that the motherboard sense wire (green wire) carried mains power. I'll put a multi-meter across it tonight.

Pole 1
1-1 OFF
1-2 Green mother board sense wire
1-3 Shorted to 1-2
1-4 Shorted to 1-2

Pole 2

2-1 Empty
2-2 Empty
2-3 Motherboard header "On" with circuit described
2-4 Motherboard header "Reset" with spring return so no circuit needed

Does this make sense, more importantly do you see a problem? Thanks much for the input.

xmastree
08-01-2008, 04:28 PM
In a modding frenzy, the idea evolved that I could use the first position on the knob to replace the switch on the back of the power supply (which would have been hidden in the case). That means 115 volts through the center of the case attached to an antique radio switch.



I didn't think that the motherboard sense wire (green wire) carried mains power.
Now I'm confused as to what you are trying to achieve with this switch. The earlier post suggested you want to interrupt the mains, replacing the black switch on the back of the PSU.

And why are you messing with the green wire at all?

By far the simplest solution is to leave the mains alone, and just use the momentary switch to operate either the power or the reset. If you must turn off the mains too, it's still possible, but the switch needs to stay in two positions.

I think the wiring would be:
Pole 1 mains in
1/1 NC
1/2 mains out
1/3 mains out (2-3 connected together so there's power in both positions)

Pole 2 one side of pulse trigger
2/1 NC
2/2 other side of trigger
2/3 other side of trigger (again, 2-3 connected)

Pole 2 one side of mobo reset header
2/1 NC
2/2 NC
2/3 other side of mobo reset header

So, position 1, mains is off, nothing else matters.
Position 2, mains on, power signal is pulsed
Position 3, mains still on, power unaffected, reset is activated.

It would be nice if the spring could make pos'n 3 spring back to pos'n 3

Also, the switch needs to me make before break or you'll interrupt the power when going for the reset, and probably retrigger the power on pulser too.

Personally, I wouldn't mix mains and low voltage on the same switch. I'd just go with the simple solution. Failing that, get a wafer switch (http://www.tpub.com/content/neets/14175/css/14175_138.htm) and two wafers, one regular and one for the mains.

Luke122
08-01-2008, 04:44 PM
I think the original plan was to jumper the green wire, then use the mains switch to power up the psu.

He then realized that it wasnt a very safe idea, so removed the line to the mains switch, and instead wants now to use the green line on the 20pin connector to power up the board.

Doing so *would* technically save you from having to add a power switch to the header pins on the mobo, so if you are really against having unnecessary cabling to the board, this option *should* work.

HOWEVER.. xmastree's idea is better.

Mach
08-01-2008, 08:01 PM
Hmm, Luke122 has the general gist of it. Original plan was to move the mains power (but that didn't seem very safe). So xmastree the plan was to replace the toggle switch on the psu.

Then I thought that I could in essence do the same thing by switching at the atx connector green wire instead of the toggle switch replacement. I thought this because the power supply doesn't work without the jumper on the green wire. I assumed that the power supply is dead if the green wire is not connected. I'm starting to believe that's wrong given the confusion. In other words, the psu is hot when plugged to mains with the toggle switch on and the atx connector not jumpered. Yes?

As you mentioned, mains connection on same switch with low voltage is bad so I'll do as you suggest but with just the motherboard header. I can change the rotary swich to a make before break and a 3 position fairly easily with the spring back to position 3.

So

1/1 NC
1/2 pulse circuit->MB header On
1/3 MB header Reset with spring return to On with a solder bridge across the contact path from 2-3

Any clearer? Thanks for the patience.

xmastree
08-02-2008, 03:34 AM
I assumed that the power supply is dead if the green wire is not connected. No, it's still live. Basically the motherboard makes or breaks that connection as necessary. There's really no need to touch it.


1/1 NC
1/2 pulse circuit->MB header On
1/3 MB header Reset with spring return to On with a solder bridge across the contact path from 2-3

You don't need the pulser either.

Spring load the switch to pos'n 2. Then 1 - on, 3 = reset.

That way you can also hold it in pos'n 1 to force a power down if necessary.

Mach
08-02-2008, 01:05 PM
Ok I think I understand. I'll give it a go this weekend. Thanks!!

DonT-FeaR
08-04-2008, 03:05 AM
glad you do because i dont =) nice paint work

xmastree
08-04-2008, 03:57 PM
Ok I think I understand. I'll give it a go this weekend. Thanks!!


glad you do because i dont =) nice paint work

Right, it seems that what's obvious to me may not be quite so obvious to non-electronic engineers, so here's a quick and dirty diagram.

Most rotary switches are supplied in multiples of 12. So that's 1x12, 2x6, 3x4, 4x3, 6x1. Mach is using a 4 pole 3 way, so I've drawn that one.

http://www.cginternet.net/pictures/RotarySwitch.gif

You'll see that it's normally in position 2. The four poles are labelled A-D to save confusion.

The animation is pretty close to the actual construction of the switch.

Power on is position 1, so connecting two wires, one to A and one to the 1 associated with A will short them together when the switch is turned to position 1. Releasing it back to the centre opens them again.

The reset works similarly, but using position 3 so using a different pole, two wires again, same principle.

Is it clear now?

DonT-FeaR
08-05-2008, 03:03 AM
you could of just said that :) i get it now sounds really cool

Mach
08-05-2008, 10:56 AM
Thanks for the great diagram xmastree! That makes it much clearer. It's taken me a while to get my head around the interaction of the psu, MB, and switch. I'm having a good time with it though. The soldering iron is my new favorite tool.

@DonT-Fear: Thanks! I was able to sneak some clear coat on this weekend. A run on the bezel that will need to be sanded out but it turned out much better than expected. I'm traveling this week in the UK so pics after I get back.

Langer
08-05-2008, 11:01 AM
Looking good mate, keep it up! ;)

Mach
08-07-2008, 03:14 AM
Thanks Langer! I'll get back after it this weekend.

Mach
08-12-2008, 08:04 PM
Hey folks, small update as the weekend progress fell victim to jet lag. Wound up stripping the bezel again cause the paint didn't stick to the pot metal on a pea sized place on the top edge. Tried to convince myself it wouldn't bother me but in the end, had to re-do it. Waiting on more paint now as none of the auto parts stores had it in stock.

Mounted the switch plate and the volume control encoder. I hope to get the on off switch mounted this week.

http://lh6.ggpht.com/MachModAlbum/SKDrLT8EnwI/AAAAAAAACH4/dOksXY4t8fA/s400/IMG_4257.JPG

http://lh3.ggpht.com/MachModAlbum/SKDqv1n_biI/AAAAAAAACHo/H_mUF7FuBM8/s400/IMG_4255.JPG

http://lh3.ggpht.com/MachModAlbum/SKDq8XbpOHI/AAAAAAAACHw/7qS_-v1GG8A/s400/IMG_4254.JPG

Started work on the servo lift mechanism. I've landed on a crank slider setup. Still needs to be tested against the lifting capacity of the mondo servo.

Mach
08-13-2008, 02:13 AM
Doesn't look like the slider crank is going to work either. It comes down to space and time at this point. Take a look at the test fit:

http://lh4.ggpht.com/MachModAlbum/SKJ3RAABY1I/AAAAAAAACJI/L8avmhiuidQ/s400/IMG_4266.JPG

http://lh6.ggpht.com/MachModAlbum/SKJ3SCn__2I/AAAAAAAACJY/3CiZj49YuI0/s400/IMG_4268.JPG

There's about 5-6 inches for the crank to fully extend on close. The PSU is going to be in the way and a psu duct still needs to be added. A linear actuator might still work but I'm going to cut my losses on the idea of a lid lift. Disappointing to say the least but not enough space and I'd like to finish this mod some time soon.

DonT-FeaR
08-13-2008, 05:37 AM
that looks cool

what is the original thing again... ive seemed to of forgoten.

Mach
08-13-2008, 11:58 AM
It was a phonograph or record player.

http://lh5.google.com/MachModAlbum/Rt99Qa8Io4I/AAAAAAAAAvw/9tg8NWJqzYc/s400/c703_3.JPG

DonT-FeaR
08-14-2008, 03:12 AM
ahhhh its all clear now... that makes it even better nice work

Vision
08-14-2008, 07:24 PM
Now, this is what I call a piece of work! Excellent, can't wait to see it finished

Vision

Mach
08-25-2008, 02:36 AM
Thanks Vision!

A brief update this time to show that I haven't forgotten the mod. Just been stuck at that 90% mark for the last week or so with small changes here and there.

Buffed out the bezel which came out a little greener than expected but not too bad otherwise. Still need to add white paint for the letters.
http://lh3.ggpht.com/MachModAlbum/SLJL9SBLsuI/AAAAAAAACKU/iZEFQodFTAQ/s400/IMG_4283.JPG


The knob in the center didn't match with bare brass so as much as it kills me, I had to paint it also. First try failed so that's next on the to do list.

Converted the switch on the Bigboy fan to a rotary switch for the front knob.

http://lh6.ggpht.com/MachModAlbum/SLJMW6vYswI/AAAAAAAACKc/g_TUG0P1Tg0/s400/IMG_4263.JPG


The rotary switch is a 3 way light switch from a lamp that I cut down to clear the fan when mounted.
http://lh6.ggpht.com/MachModAlbum/SLJMk8pASKI/AAAAAAAACKk/Md-5ofN38Vk/s400/IMG_4284.JPG

Installed the sound card and the wireless card with a few tweaks to the hold down bracket and antenna. The cards attach to the bottom of the case which is the reverse of the brackets requiring a chop and flip.

Also painted the video card cable ends. The white connectors didn't go with anything in the case.
http://lh3.ggpht.com/MachModAlbum/SLJNnvJKyVI/AAAAAAAACK0/D-YoFB0Nnys/s400/IMG_4294.JPG

Still a bunch of wiring and cable-gami to do. Traveling this week and next so not much on the update front planned til after. Thanks for looking.

http://lh6.ggpht.com/MachModAlbum/SLJNMc9ODkI/AAAAAAAACKs/TpodN8lMwxE/s400/IMG_4288.JPG

DonT-FeaR
08-25-2008, 03:19 AM
cool i know about the 90% mark

my case has been at 90% mark for like 2 months now

only get 1/2 day to work on it a week so its understandable


nice work

Mach
08-26-2008, 02:02 PM
Thanks! The doldrums of case modding, they make the mod master's work all the more impressive. Looking at Bod's BG mod makes me believe that I'm sleeping way too much. :)

Mach
09-12-2008, 02:17 PM
Milestone post! The first post from Cobra-matic. Woot!:banana:

I connected everything and fired it up. DVD and wireless work fine. Big sigh of relief after the modding on both.

http://lh3.ggpht.com/MachModAlbum/SMqt_q7SEZI/AAAAAAAACNA/NE7KdlF_hA8/s400/IMG_4299.JPG

Still have some wiring to do but it's close...so close

http://lh4.ggpht.com/MachModAlbum/SMqrSV0IKAI/AAAAAAAACMM/_ElwGKb2iP4/s400/IMG_4301.JPG

Added the power led to the front using an amber led and acrylic

http://lh4.ggpht.com/MachModAlbum/SMqs18liTAI/AAAAAAAACMY/CmToQh7NRbk/s400/IMG_4300.JPG


Added a duct for the psu to vent the exhaust from the case.
http://lh5.ggpht.com/MachModAlbum/SMqryALWoaI/AAAAAAAACMQ/SFFL3eJCIDc/s400/IMG_4302.JPG

So some progress, more later when Hurricane Ike blows through. Modding time is currently going to covering windows and moving plants inside.:down:

DonT-FeaR
09-14-2008, 05:54 AM
nice work mate looks sweet

Langer
09-14-2008, 12:28 PM
Great to see the progress mate, looking really good.

Cant wait to see it all together.

The Infamous Mr D
09-16-2008, 11:05 AM
Indeed, the whole project just oozes quality. Looking forward to seeing it finished.

Mach
09-16-2008, 12:18 PM
Thanks guys for the rep and the compliments! I had a chance to mod a little last night when the power came back on but fell asleep before doing too much. Got the throbber circuit hooked up but its not slow enough. I'll post a review on the throbber when I get more time.

Hurricane Ike blew through on Saturday so we're still cleaning up tree limbs and leaves. Some water damage to the house but not as bad as some folks. Hopefully things will be back to normal this weekend and modding can resume. Later....

DonT-FeaR
09-17-2008, 02:51 AM
good to know your ok.

Mach
09-19-2008, 08:24 AM
Thanks DonT-FeaR, Houston is still a mess but nothing like Galveston which was closer to the coast.

More work done on Cobra-Matic, the off-on-reset knob is working as is the usb rotary encoder for volume, temperature sensor, and relays for the leds. Nothing particularly picture worthy but one step closer.

On order is phosphorescent invisible orange (glows orange in the dark but is white under normal light) pigment for the letters on the bezel and some thin mini usb cable to finish the wiring. So not done yet but it's close.

Mach
09-30-2008, 12:56 PM
Still waiting on the thin usb cables to be delivered but look what came in.

This is a half ounce of glow powder. Apparently a little goes a long way.
http://lh6.ggpht.com/MachModAlbum/SOJNQ6KEtvI/AAAAAAAACjQ/DRGQSlEzPZs/s400/IMG_4345.JPG

Lights out, how cool is that? I can see what they mean about a little going a long way.
http://lh3.ggpht.com/MachModAlbum/SOJNPDesjBI/AAAAAAAACjI/6bYbxSEOAg8/s400/IMG_4347.JPG

Source: www.blacklite.com

Hooked up a Top Shelf Led controller (http://www.frozencpu.com/products/4098/lit-134/Top_Shelf_Labs_PCLC-1_PC_LED_Controller.html?tl=g6c79s127) to the power led so now Cobra-matic has a heart beat. :)

http://lh4.ggpht.com/MachModAlbum/SOJYyQWQwOI/AAAAAAAACjw/ksfvyRs8R5I/s400/IMG_4359.JPG

While waiting for the paint and cables to arrive, I hacked together a control program. This launches at startup to turn on and off the LEDs and El wire, adjust the system volume and mute from the knob (http://www.phidgets.com/products.php?product_id=1052) on the case, and sample case temperature.

http://lh6.ggpht.com/MachModAlbum/SOJMpUXq_LI/AAAAAAAACjA/ZHgUzhQjS_8/s400/cobra%20control.JPG

This is all being driven by a phidgets 8/8/8 interface kit (http://www.phidgets.com/products.php?product_id=1018), a 0/0/4 relay kit (http://www.phidgets.com/products.php?product_id=1014), and a temperature sensor (http://www.phidgets.com/products.php?product_id=1124). Slight overkill without the linear actuator lift kit but I can add other sensors if I want.

Lastly, I've been playing with the DVD drive. To recap, I hacked a window in the top so the DVDs go in and out without closing the CD tray.

http://lh3.ggpht.com/MachModAlbum/SMqt_q7SEZI/AAAAAAAACNA/NE7KdlF_hA8/s400/IMG_4299.JPG

The problem is that XP doesn't know a new DVD has been put in (no open close event) so it doesn't refresh. Using google-fu only finds people with autorun setting problems. I'm guessing it'll take a software hack or to cycle power on the DVD rom.

To that end I need your help. Anyone familiar with IOCTL calls in VB or other ways to manipulate DVD rom refresh? Can I put a relay on the DVD power and cause it to refresh by cycling the power? Actually it would be cool to put a micro switch on the DVD rom lid to have it refresh when the lid closes.

DonT-FeaR
09-30-2008, 09:06 PM
nice glow powder... keep up the top quality work man

SXRguyinMA
10-01-2008, 10:43 PM
this thing is awesome! nice work! +rep

blueonblack
10-02-2008, 01:17 AM
Oustanding work, I love the retro look myself. Will be trying to incorporate it into my current mod when I get back to it. Keep it up!!
________
Larry Shinoda (http://www.ford-wiki.com/wiki/Larry_Shinoda)

p0Pe
10-02-2008, 11:41 AM
this is looking fantastic:D
+rep! love the glow powder xD

jdbnsn
10-02-2008, 06:48 PM
This is coming along great Mach!

Mach
10-03-2008, 12:46 AM
Thanks for the rep and compliments!
@DonT-FeaR & p0Pe: It'll be more subtle when it's painted on but it's very cool stuff
@SXRguyinMA & jdbnsn : It makes me grin to see it finally coming together
@blueonblack: Can't wait to see it, the HD activity gears idea is genius.

Paint testing underway, it's going to take multiple coats to get a strong effect from the glow powder. Its interesting stuff. You pour the powder into the clear finish and shake it up. It doesn't dissolve but is suspended in solution so you have to keep it mixed while painting.

The DVD rom is going to take some more work. Tried the idea of cycling the power on and off and resetting the drive from VB but no luck.

BerticusPryme
10-03-2008, 12:55 AM
hey mach check this.http://www.eggheadcafe.com/software/aspnet/29310719/cd-drive-wont-refresh.aspx look at the 2nd post. the guy wrote a peice of software that might help you out a little. Thought I would try and shed some light on this and definatly give soem rep for the awesome mod.

Mach
10-03-2008, 01:54 AM
@BerticusPrime: Thanks for the tip. Unfortunately, after trying it out, no go. I'm thinking its in the DVD Rom controller. It has to show ready before windows can even talk to it. As it takes a full shutdown and restart to reset the drive, a low level re-initialize or reset command is probably the only thing that's going to work. Or figure out where the trip switch is and mod the drive.

Mach
10-03-2008, 03:27 AM
Good news: It's possible to make the DVD work.
http://www.austinmodders.com/modules.php?name=Forums&file=viewtopic&t=1467

Bad news: It'll take a hardware hack. The sound you hear is one step back :bash:

The killer is that I've been lurking at austinmodders but never saw that thread. I went looking over there tonight cause I had a bookmark to a mod done by Zapwizard on a slot loading DVD. Looks like it's time to find the tiny soldering iron tip. :devious:

BerticusPryme
10-03-2008, 05:46 AM
Hey least you are somewhat making headway here. The drive placement is great and I would ahte to see you lose that. Hopefully this works.

DaveW
10-07-2008, 06:52 AM
This is a great mod. Though I'm curious-are you running that RAM in Dual-Channel mode? I know different boards do it differently, but I was under the impression that Gigabyte boards usually want both sticks together. That being said, I can see red and yellow on both slots, so I thought I'd ask.

-Dave

Mach
10-08-2008, 09:12 AM
Berticus: I've got the drive torn down again and 486Hawk from austinmodders is guiding me. I got sidetracked on work stuff this week but will give the soldering a shot next week.

DaveW::redface:, yes the ram is setup for dual channel but I set it up that way without really understanding what I was doing. I just followed the manual for installing the ram which said put them in the same colored slots


To enable Dual Channel mode with two or four memory modules (it is recommended to use memory modules of identical brand, size, chips, and speed), you must install them into DIMM sockets of the same color.

Mach
10-11-2008, 10:03 AM
Too jet lagged to sleep last night so I had a go at the DVD Rom.

This has to be the toughest soldering that I've ever done. At 2.5x magnification, I could barely see the connections. How you guys do this I'll never know.

http://lh3.ggpht.com/MachModAlbum/SPCqr0KLHWI/AAAAAAAACmY/5RUpBHZ48qM/s800/IMG_4399.JPG
This is to move the dvd eject button to a limit switch on the lid. Those 2 black wires are 30 gauge.

For the tray sense switches, from this:
http://lh6.ggpht.com/MachModAlbum/SOcFdgKMlLI/AAAAAAAACkQ/VzFPQbREF7E/s400/IMG_4388.JPG

To this:
http://lh3.ggpht.com/MachModAlbum/SPCq8V7NRzI/AAAAAAAACmg/Q3dK-Npsr-s/s400/IMG_4403.JPG

The switches are about the size of a pencil eraser.

If you ever have to de-solder something this small, Chip Quik (http://www.curiousinventor.com/store/product/102) works like magic.

Next up is the limit switch for the lid and computer code to sequence it all.

Mach
10-13-2008, 01:41 AM
d_stilgar: Thanks for the rep!

And to the unnamed person who asked for a tutorial on the copper etching, will do. I've got another project waiting in the wings in which etching figures prominently.

I've spent the better part of a day getting the drive back in working order. I've been posting progress pics over at Austinmodders.com but haven't really given you guys a full breakdown. So here goes...

If you review the worklog, you can see that I cut a window in the top of a hub locking, tray loading slim line drive. This makes the DVD visible while its spinning (which is cool) and makes it look more like a record player (which fits the mod theme). The problem is in changing out DVD discs. Windows doesn't know a new disc is in the drive because the drive hasn't reset (a Windows (f5) reset doesn't work).

What make it reset? Pushing the button on the front and opening the tray which clues the DVD rom into the fact that a new DVD is coming. When the tray closes, it resets the drive. Its pretty simple actually. Making it reset without opening the tray is a little more difficult. Add to that the drive needs to stop before you can pull out the DVD makes it an interesting problem.

With the help of electronics kung-fu master, 486hawk, I've learned that you have to simulate the eject button press and simulate the open tray event. By soldering wires to pins 3 and 4 of the drive control header, and using a relay, then I can simulate the button press by shorting the two pins momentarily.

The header is found here:
http://lh6.ggpht.com/MachModAlbum/SPLXzSWmcPI/AAAAAAAACoI/HRDSuiPiOBo/s800/IMG_4378%20circle.JPG

A close up shot:
http://lh3.ggpht.com/MachModAlbum/SPCqr0KLHWI/AAAAAAAACmY/5RUpBHZ48qM/s800/IMG_4399.JPG

I used an ohm meter to test all 10 pins of the header with the button pressed and open to find that pins 3 and 4 were the correct ones. YMMV.

With that done, then I de-soldered the switches and soldered wires to the contacts. My drive had 2 switches but after testing, I only need to trigger one to reset the drive. The two images in the previous post describe what it looks like after soldering.

Lastly I had to remove the mechanisms that physically move when opening the tray. Wouldn't want it to pop open.

Before

http://lh6.ggpht.com/MachModAlbum/SOcFsTLtJcI/AAAAAAAACko/sALxjlSt7V8/s400/IMG_4371.JPG

After

http://lh6.ggpht.com/MachModAlbum/SOcFo0lDF8I/AAAAAAAACkg/4_eMBzVVi5s/s400/IMG_4376.JPG

Then I soldered on connectors for the switches and added a small limit switch to the lid to sense when its open.

http://lh6.ggpht.com/MachModAlbum/SPLb2Lt_9PI/AAAAAAAACoY/5HnzLBncPKI/s800/IMG_4416%20CIRCLE.JPG

http://lh3.ggpht.com/MachModAlbum/SPLaER_bAII/AAAAAAAACoQ/6S6eTyODKL8/s400/IMG_4412.JPG

I then sealed the entire underside with foil tape to keep out any dust.

It works as expected when connected the phidgets controller but I'll need to test further when connected to the motherboard to be sure it works properly.

http://lh4.ggpht.com/MachModAlbum/SPLN73GOzUI/AAAAAAAACno/FQKnUPxyTCs/s400/IMG_4410.JPG

Finally, here's the link to the austinmodders.com discussion.

http://www.austinmodders.com/modules.php?name=Forums&file=viewtopic&t=1467. Thanks again to 486hawk for all the help! To anyone who wants to try it, I hope the pics and description help. The only hairy part was soldering to the header. I was fortunate to have access to a decent soldering iron (Hakko 936) and a great deal of luck.

That gets me pretty much back on track which is seeing how badly I can plug up an airbrush with glow in the dark paint. :)

Till next time...:up:

DonT-FeaR
10-14-2008, 02:21 AM
nice work man... i would of put a break in the cd rom power lines and waited or it to stop the swapped discs and turned on again.... but ur way works to ???

Mach
10-14-2008, 03:48 AM
Thanks for the comment. I tried cycling the power by disconnecting the drive. It still locked up Windows Explorer.

blueonblack
10-14-2008, 03:57 AM
Wow. Just wow for the electronics work. I'd have been way too scared to try anything that small. Excellent work. +rep
________
Mercedes-benz 260 d history (http://www.mercedes-wiki.com/wiki/Mercedes-Benz_260_D)

Mach
10-17-2008, 06:50 AM
Thanks blueonblack! More luck than skill but I'll take it. :)

I've been modding, brain modding. Based on my last foray into circuit design (http://www.thebestcasescenario.com/forum/showpost.php?p=198603&postcount=41), I've learned to ask first and cut second. It helps reduce the general TBCS confusion level. :redface:

So, here's my attempt at a circuit that gives a momentary pulse and then waits a period of time before opening the second relay. This is used to first simulate the eject button being pressed and the DVD rom tray opening. I'd appreciate comments on whether this is overkill or any changes that I should make.

I'm leaving this diagram in place for completeness. I was never able to get it working.

http://lh6.ggpht.com/MachModAlbum/SPhlyD4F3lI/AAAAAAAACpU/Ub4Qs1Vi0b4/s800/circuit.jpg
Note: R3 can be varied to increase the duration of the wait. The LEDS connected to the relays are there for testing purposes.

Also, I've got a normally open SPST switch on the lid of the CD. To make this circuit work, do I need to swap it for a normally closed SPST?

Oh yeah, I'm using Circuit Wizard to simulate the circuit. I picked mine up at Maplin's in the UK but it looks like its available in the US through Kelvin.com although more expensive than Maplins.

Mach
10-27-2008, 12:43 AM
Thanks for the rep & comments d_stilgar & Xpirate

An update for your perusal.

Still waiting on a couple of parts for the DVD rom circuit so I took a look at another problem. When Cobra-matic up & running, the video card and HD were running on the high temperature side. (Both of which were passively cooled) I didn't like the looks of an add-on fan on the video card, so why not a new one, video card that is...

http://lh4.ggpht.com/MachModAlbum/SQU85R_Z6XI/AAAAAAAACuY/01Vi5bnKG-M/s800/Capture_00073.JPG

And one of these:

http://lh5.ggpht.com/MachModAlbum/SQU84nQN45I/AAAAAAAACuQ/0cmDJAzfsWA/s800/Capture_00071.JPG

Only problem is the ram heatsinks and the fan leds are blue which don't fit the theme of the mod. The heatsinks were easy.

http://lh4.ggpht.com/MachModAlbum/SQU8-GLqt6I/AAAAAAAACvY/AxscK3gLzcg/s800/Capture_00084.JPG

http://lh4.ggpht.com/MachModAlbum/SQU8_NhmtgI/AAAAAAAACvo/q-iKAmIXIi8/s800/Capture_00090.JPG

The leds took a little bit of effort, dremeling, and chipquick.

http://lh4.ggpht.com/MachModAlbum/SQU80cJp7AI/AAAAAAAACs0/GIaELq-bfjc/s800/Capture_00053.JPG

http://lh5.ggpht.com/MachModAlbum/SQU813L0s9I/AAAAAAAACtM/u2ugz9Hk6QU/s800/Capture_00056.JPG

http://lh5.ggpht.com/MachModAlbum/SQU82LlLaZI/AAAAAAAACtc/wVKYdiEjAtg/s800/Capture_00061.JPG

http://lh6.ggpht.com/MachModAlbum/SQU83HIkl5I/AAAAAAAACts/GA47X0J7L4o/s800/Capture_00063.JPG

http://lh3.ggpht.com/MachModAlbum/SQU83xt2RTI/AAAAAAAACuI/0f6iuH5GUhI/s800/Capture_00070.JPG

http://lh3.ggpht.com/MachModAlbum/SQU8_rEn3UI/AAAAAAAACvw/bpTXKNkE9M4/s800/Capture_00091.JPG

http://lh3.ggpht.com/MachModAlbum/SQU8sK25K5I/AAAAAAAACqs/nLQi-Y6y0fI/s800/IMG_4481.JPG

Silenx 60mm fan mounted on the HD:

http://lh4.ggpht.com/MachModAlbum/SQU8rnZAg0I/AAAAAAAACqk/iamUBMSS29Q/s800/IMG_4480.JPG

Thanks for looking!

DonT-FeaR
10-27-2008, 02:01 AM
great looks cool...

nice work with the leds man

blueonblack
10-27-2008, 06:02 AM
Beautiful work, not sure why but lots of copper sure helps that retro look. Love that VGA cooler, I have those same heatsinks on my video card. I'm actually looking for a pretty copper cooler for it for transplant into Clockwork, the Accelero I have on it now is cool but not that pretty. What make/model is that?
________
XJ (http://www.ford-wiki.com/wiki/Jaguar_XJ)

Mach
10-27-2008, 07:51 AM
DonT-Fear: Thanks! The ChipQuick made easy work of the de-soldering after that it was simple

blueonblack: Agreed, the XFX card is (was?) a good card but the green and silver really didn't match the overall look. The cooler is a Zalman VF 1000. Here' the review that made me decide to replace the stock cooler.

http://www.silentpcreview.com/article769-page1.html

Mach
11-02-2008, 10:56 PM
Today was a good day to mod!:banana:

I dug out my Paasche VL airbrush (http://www3.towerhobbies.com/cgi-bin/wti0001p?&I=LXDD38). I got it years ago as a christmas gift but never got around to using it. I then loaded up an ounce bottle of Floquil crystal clear (http://www.internettrains.com/merchant2/merchant.mvc?Screen=PROD&Store_Code=IT&Product_Code=FLO-110004) with a quarter ounce of the orange glow powder. The powder only stayed in solution for 2-3 minutes before it settled in the bottom of the bottle. I had to keep shaking the airbrush to keep it in solution. I was blown away with how well it worked.

You can see the texture of the powder. Oh yeah, it went on great but more importantly how does it glow?

http://lh6.ggpht.com/_UdQdiSb7gT4/SQ4wQrid2_I/AAAAAAAACyQ/-gsJipvMmgM/s800/IMG_4495.JPG


You be the judge, :)
http://lh3.ggpht.com/_UdQdiSb7gT4/SQ4wGEFYwxI/AAAAAAAACyI/LiSMHexrl78/s800/IMG_4505.JPG

Remember the bezel?
http://lh5.ggpht.com/_UdQdiSb7gT4/SQ49C4SzokI/AAAAAAAACyk/IOIY8pl0IDw/s800/Capture_00006.JPG

It got some paint also. It needs some glow too but the paint will need to harden up first. This is all brush work so no airbrush here.
http://lh5.ggpht.com/_UdQdiSb7gT4/SQ4-EK8WViI/AAAAAAAACy0/SGFQ5pkdjpg/s800/Capture_00026.JPG

In the meantime, I started sanding out scratches from the case. Ever hear of 12,000 grit sandpaper (http://www.rockler.com/product.cfm?page=11435&filter=micromesh)? The guys who know bakelite (what the case is made from) tell me I can use it to sand out scratches and polish the case.

After a few hours of sanding, the case is exceptionally smooth but still doesn't have the shine that I'm looking for so next step is the buffing wheel.

I also breadboarded the circuit but the relays aren't closing when I power down. It appears that the capacitor is still holding a charge. I'll continue to play with it but I'm falling back to the phidgets board to control the DVD.

blueonblack
11-02-2008, 11:04 PM
:eek: Wow! That glow is excellent!! Can't wait to see the bezel.
________
Chrysler Sohc V6 Engine History (http://www.dodge-wiki.com/wiki/Chrysler_SOHC_V6_engine)

DonT-FeaR
11-03-2008, 02:19 AM
well said /\ i agree 100%

Ouch!
11-03-2008, 05:07 AM
Absolutely fantastic! The attention to detail is phenominal!

Langer
11-04-2008, 09:41 PM
12000grit?

that's just too cool... I want some!

Looking great man... keep it coming.

Mach
11-05-2008, 01:36 AM
Thanks for the comments guys! I'm glad you like it. I was extremely stoked that the paint came out as well as it did.

blueonblack & DonT-FeaR: I'll have some bezel pics for you this weekend and a few other glow accents.
Ouch!: Thanks, man! More details to come, stay tuned.
Langer: Eh, you can have it. After hand sanding my way through 1500 to 12,000 in 11 increments, I'm pretty well done with sanding. :)

Spent the evening watching the election results and shortening cables. I've got some connectors to paint before pics. More soon. 8)

DonT-FeaR
11-05-2008, 03:12 AM
cool im looking forward to it..

GO OBAHMA... cant spell..

nevermind1534
11-05-2008, 10:02 AM
McCain should have won. Ok, enough with that.

SXRguyinMA
11-05-2008, 05:08 PM
lookin good so far!

Mach
11-07-2008, 10:46 PM
Ack Frontpage! Now its serious, where's my dremel? Time to get this one finished. :)

Thanks Jon!

Mach
11-09-2008, 01:00 AM
Thanks SXRguyinMA! Politics done, back to modding.

Spent the morning polishing and painting the knobs and bezel. I painted an indicator line on the on-off and volume knobs as well as a painted in the recesses on the fan pointer.

http://lh6.ggpht.com/_UdQdiSb7gT4/SRZURAMLsmI/AAAAAAAACzs/KHnz7LUqOgw/s800/IMG_4512.JPG

The fan pointer mounted:
http://lh4.ggpht.com/_UdQdiSb7gT4/SRZUScNUeYI/AAAAAAAACz8/y68sX6VcHZ8/s800/IMG_4527.JPG

A little glow:
http://lh5.ggpht.com/_UdQdiSb7gT4/SRZURXh11tI/AAAAAAAACz0/T6aL9a5L5OE/s800/IMG_4518.JPG

blueonblack & DonT-FeaR? Is this what you were looking for?
http://lh3.ggpht.com/_UdQdiSb7gT4/SRZUTBRMlNI/AAAAAAAAC0E/Zj1Nx9xcR1M/s800/IMG_4529.JPG

Finished wiring the case by adding connectors so the motherboard can be easily lifted out if anything needs to be reworked. Still need to add another usb header cable for a goodie that has yet to be delivered.
http://lh3.ggpht.com/_UdQdiSb7gT4/SRZk8SRPeOI/AAAAAAAAC0k/WRy4M7PwPvM/s800/IMG_4534.JPG

In the upper left corner is the on off switch and the phidgets input/output and servo interface boards. In the middle, the black square is a Gigaware Ultra-compact usb hub that will be connected to the motherboard header. It's the smallest one that I could find that takes an external power supply. The retractable cables can be pulled out from the bottom of the case if needed. In the lower left corner is the phidgets usb encoder for the volume knob and the Top Shelf Labs LED Controller.

Shortened the psu cables and put heatshrink on the ones that are not being used. I debated whether to remove them entirely but decided to leave them.
http://lh6.ggpht.com/_UdQdiSb7gT4/SRZk9KIDwZI/AAAAAAAAC0s/SAqFDirHGIk/s800/IMG_4535.JPG

Need to test the wiring, finish the case polishing, and add a few other tricks that I've still got up my sleeve. Getting closer though...thanks for looking and stay tuned.

ContraptionMaker
11-09-2008, 01:27 AM
This is really looking fantastic! Very nice work. I love the fact you started with phonograph instead of a standard case. It's nice to know this old phono has a new life and will not end up in some dump some where (at least not for the next several years!) :D
+rep

DonT-FeaR
11-09-2008, 06:25 AM
no thats not what im looking for :( its like 100x better :) frigan super duper man...

Mach
11-09-2008, 07:51 PM
DonT-FeaR: Glad you like it :)
ContraptionMaker: Thanks man, I love the style of the old stuff. Naw, no dump for this one. ;)

Vision
11-09-2008, 11:29 PM
simply superb, amazing quality in this build. Good work, can't wait to see the finished piece!

blueonblack
11-09-2008, 11:37 PM
:eek: That dial is AWESOME. This whole thing is great but it's been a while since a photo did that for me. Wow.

+ rep yet again
________
Jugalettes (http://juggalos.org/)

DonT-FeaR
11-10-2008, 02:48 AM
like it.... pfft i love it

Vitz¥^
11-10-2008, 07:38 AM
hot damn that looks ace! good modding :D

Matthew
11-13-2008, 12:22 PM
I'll be honest. I am loving this. Bravo!

blackbox
11-16-2008, 06:05 AM
nice work there dude. i hope i can also mod something like that. availability of materials here is a major problem

Mach
11-16-2008, 09:12 PM
blackbox: Thanks! Where are you located that materials are a problem?

Matthew, DonT-FeaR, blueonblack, Vision, SgtM: Thank you for the kind comments and the rep. I'm pretty happy about how its turning out. It's been over a year since I started this thing and its time to bring it to a close. Sorry for being out of pocket but I've been working hard to get it all wrapped up. So...

Mach
11-16-2008, 09:17 PM
Polishing is finished, labels are on, all that's left to do is…nothing :banana::banana:

I could bore you with details but I think I'll let the pics do the talking.
http://lh3.ggpht.com/_UdQdiSb7gT4/SSCogDiScyI/AAAAAAAAC4Q/tAwjXOW14gg/s800/IMG_4539.JPG

http://lh3.ggpht.com/_UdQdiSb7gT4/SSCnJU1NwAI/AAAAAAAAC1U/ZjpIs7WOw9g/s800/IMG_4559.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnKE8LYOI/AAAAAAAAC1c/V-23VGeB9BY/s800/IMG_4571.JPG

http://lh6.ggpht.com/_UdQdiSb7gT4/SSCnLInJr4I/AAAAAAAAC1k/agBJ4ymdcHI/s800/IMG_4573.JPG

http://lh3.ggpht.com/_UdQdiSb7gT4/SSCnSB9udyI/AAAAAAAAC3Y/C2IV8UPbPn4/s800/IMG_4846.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnS008GoI/AAAAAAAAC3g/uSS1Yc5MDH8/s800/IMG_4848.JPG

http://lh6.ggpht.com/_UdQdiSb7gT4/SSCnOXBMx4I/AAAAAAAAC2Y/_HEU-TGDqWU/s800/IMG_4631.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnOF3T2HI/AAAAAAAAC2Q/BIqVSo2bsfs/s800/IMG_4619.JPG

http://lh5.ggpht.com/_UdQdiSb7gT4/SSCnPUQznlI/AAAAAAAAC2o/ArQ-4WLL-HQ/s800/IMG_4768.JPG

http://lh5.ggpht.com/_UdQdiSb7gT4/SSCnPiWOZjI/AAAAAAAAC2w/pzfQQMv34H4/s800/IMG_4776.JPG

http://lh5.ggpht.com/_UdQdiSb7gT4/SSCnQeVja5I/AAAAAAAAC24/UuRSZO9sW30/s800/IMG_4788.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnQwz8_LI/AAAAAAAAC3A/jmRsShZ0wcI/s800/IMG_4798.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnRuUBTYI/AAAAAAAAC3Q/1WngFCehdhA/s800/IMG_4818.JPG

http://lh3.ggpht.com/_UdQdiSb7gT4/SSCnLQEFaII/AAAAAAAAC1w/MCvAG7-eS0U/s800/IMG_4584.JPG

http://lh3.ggpht.com/_UdQdiSb7gT4/SSCnM5TrZ9I/AAAAAAAAC14/kR3BPXklD8M/s800/IMG_4593.JPG

http://lh6.ggpht.com/_UdQdiSb7gT4/SSCnNGWZ9WI/AAAAAAAAC2A/6PFSzQnUubY/s800/IMG_4609.JPG

http://lh4.ggpht.com/_UdQdiSb7gT4/SSCnNvCBP7I/AAAAAAAAC2I/vWPThGWIhnA/s800/IMG_4615.JPG

Mach
11-16-2008, 09:18 PM
One last thing before I visit the "Is your worklog finished?" thread, when I was sanding down the case, I found these on the bottom side.
http://lh6.ggpht.com/_UdQdiSb7gT4/SSC0r9T6y8I/AAAAAAAAC5A/1mJeH0SKDtE/s800/IMG_4487.JPG
They were pretty far gone but this one in particular gave me an idea.
http://lh6.ggpht.com/_UdQdiSb7gT4/SSC0wdQYh6I/AAAAAAAAC5I/MXEt74SejC0/s800/IMG_4488.JPG
I made a new label; one a little more appropriate.
http://lh6.ggpht.com/_UdQdiSb7gT4/SSCojopXJcI/AAAAAAAAC4Y/Id4OSiaSe9w/s800/IMG_4543.JPG
I think you'll agree, no?
http://lh5.ggpht.com/_UdQdiSb7gT4/SSC3YhPiZJI/AAAAAAAAC5U/u77MefV1MWI/s800/LABEL3.jpg

Maestro, a little traveling music if you please. This one's moving to the land of completed projects. ;)

jdbnsn
11-16-2008, 09:31 PM
OMG, that is so beautiful! Excellent work my friend, a true masterpiece! And thanks for the TBCS plug there on the disc ;)

Mach
11-16-2008, 10:37 PM
Thanks jdbnsn! I figured it started on TBCS then it should finish here too. :)

blueonblack
11-16-2008, 10:54 PM
Oh. My. God. That was absolutely awesome until I saw the data sticker. *That* is one of the coolest things I have seen! An absolutely perfect finishing touch. +rep for sure

:bowdown:
________
Honda nsr125 history (http://www.honda-wiki.org/wiki/Honda_NSR125)

DonT-FeaR
11-17-2008, 01:30 AM
/\ agreed that made the cake so to speak

video, video!!! start a chant..

Mach
11-17-2008, 01:57 AM
:redface: Thanks guys glad you like it. Without you guys encouraging me, it'd have been another year before I was done. Least I could do.

nevermind1534
11-17-2008, 02:08 AM
It all turned out great +REP

Vitz¥^
11-17-2008, 06:12 AM
i seriously love that mod. all came together amazinly! + rep

gramatton
11-18-2008, 01:06 PM
top notch man. just saw this today. absolutely amazing work.

love the glowing #s and dial. nice idea with the sticker. but if you don't mind me asking, how did you not notice it till the end? lol

Mach
11-18-2008, 01:31 PM
nevermind1534, Vitz¥^: Thank you for the compliments and rep! Its my first finished mod (Retromod's been on hold for this one) so its nice to finally be done.

gramatton: Thanks! I must have seen them when I cut the case a year ago but didn't really think much about them or forgot. Since then, most of the work happened outside of the case as the whole motherboard lifts out of the case. When I was polishing, I actually had to think about the stickers and whether I'd leave them or not. :)

DonT-FeaR
11-19-2008, 02:03 AM
yea the sticker has to be the perfect touch

Ouch!
11-19-2008, 11:08 AM
Absolutely fantastic stuff....Real attention to detail!

Well done

Ouch!

Mach
11-19-2008, 11:12 AM
Thanks DonT-FeaR & Ouch!. :up:

SXRguyinMA
11-19-2008, 01:31 PM
absolutley beautiful :bowdown: :bowdown: love the label too! :D

DonT-FeaR
11-20-2008, 05:01 AM
thats ok ... what else am i for other than praising others :)

Langer
11-22-2008, 01:08 AM
Absolutely beautiful mate.

A job very well done.

Fantastic job, congrats!

Thanks for the plug on the sticker as well man - much appreciated.

rendermandan
11-22-2008, 02:22 AM
Nice job man, i can't believe I never posted in your thread. I've watched it all come together, but for some reason, i never commented. Sorry! +rep for sure.

DonT-FeaR
11-23-2008, 03:01 AM
hmmm.... thats weird i didnt even see the names... ba ha ha i am a part of your case ...

lets make sure im not a rouge piece :)

Mach
02-05-2009, 01:53 AM
Thanks for the comments guys and sorry for the delay. I thought I had responded but apparently not. I've been beavering away on my speaker mod and not paying attention.

Ahh, the label. It seemed fitting since tbcs attracted me to modding and your comments kept me going.

Bad news, I was re-routing some wires, preparing to film the case in action, and shorted out the dvd drive. :( Good news, lighting struck twice with same mod to another dvd. Still need to remount it but it works.

This a ts-l632 drive and this is the micro switch (front two contacts are the ones that tell the controller that the drive tray is closed ie closed switch = closed tray)

http://lh5.ggpht.com/_UdQdiSb7gT4/SYp55pzwWLI/AAAAAAAADgk/fi3N7hpgp_s/s800/IMG_5181.JPG

This is the header that is fed from Open DVD momentary switch - Before
http://lh3.ggpht.com/_UdQdiSb7gT4/SYp566EdV2I/AAAAAAAADgs/HcJWWN89ySs/s800/IMG_5182.JPG

After - pins 5 & 6 with two tiny wires attached.
http://lh6.ggpht.com/_UdQdiSb7gT4/SYp58CQjrmI/AAAAAAAADg0/IKDtWcberIY/s800/IMG_5190.JPG

I need a more powerful magnifying glass
http://lh6.ggpht.com/_UdQdiSb7gT4/SYp58vqJnLI/AAAAAAAADg8/2sqUASq2i7A/s800/IMG_5192.JPG

:banana: Pulsing the momentary switch circuit and then opening the micro switch fools the DVD controller into thinking the tray just opened. Closing the switch, makes it thinks it closed.

Using my Radioshack Electronics kit to test :). This happens automatically when its back in the case via the phidget board.
http://lh4.ggpht.com/_UdQdiSb7gT4/SYp5_Re47ZI/AAAAAAAADhE/0R4Tr9ZQuHw/s800/IMG_5197.JPG

Mach
02-12-2009, 05:33 AM
I was hoping that this update would mark the triumphant return of Cobra-Matic but a lightning storm/power surge two nights ago says no. Here's the symptoms: No fans work, psu or otherwise. Lights on the DVD and MB power LED. That's it. The night before it was working fine, all temps looked good, and it was all back together for a couple days so I don't think it was user error on my part.

I'm guessing it's the PSU. Any other guesses? I'll pull it apart this weekend to check each component, @#%$^...:think:

blueonblack
02-12-2009, 06:45 AM
Oh, WOW. Computer problems are bad enough, but to have them in a machine that you put that much time and effort into is SO muc worse. My two cents, you're leaning the right way with the PSU. It's where I would start, anyway. I hope you built it with upgrades/component failures in mind. It's easy not to when you get to working on something like this.

Good luck!!

Mach
02-12-2009, 11:49 AM
Thanks, a bit of a setback but with each passing tear down its getting easier and the lessons learned are increasing. The big problem to date was getting it positioned in the case since it's such a tight fit. I built a jig to lower it into the case which has come in handy but it could be easier. To be sure, the next case will be more modular.

I need to post up everything I've learned for found case mods as there will be a few more in the future. In the long view, its all good because of the knowledge gained. Short view, it sure would be nice to be done.

bennyrux
02-12-2009, 05:40 PM
My condolences for the setback, but I appreciate the update...otherwise I wouldn't have seen your mod. You have done/are doing a fantastic job. It looks great!! :up: +rep

Mach
02-13-2009, 12:10 AM
Thanks bennyrux!

Color me confused, I'm not sure what's going on at this point. I tested the power supply while still in the case and the readings were not good. The 5v was reading between 3 & 4 volts and the 12 volt was around 1-2 volts. This was using a multi-meter and using this link as a go by: http://www.lockergnome.com/it/2005/03/02/learn-how-to-diagnose-power-supply-problems/

Based on that, I pulled the power supply. Bench testing with the green and black wires shorted, all voltages checked out ok except for the -12v which showed about -11.3v. Hmmm, maybe not the psu?

I then pulled all the ram and cards and started adding back, one by one, first the ram and then the cards, restarting at each change. Each time it started up fine. I'm still leaning toward it being a failing psu or HD problem (the only thing that I haven't checked) but I'm puzzled. I'm going to hook it all back up outside the case and let it burn in for awhile to see. :think: Is there any way that interaction with the motherboard could have caused the weird psu readings initially?

Mach
02-15-2009, 02:55 AM
Thanks pope!

Well tear down and re-build complete. I'm still scratching my head on the whole thing. I'm hoping that I over reacted. I had the BIOS set to autostart with power on but for some reason, the setting was lost. When the PC didn't start automatically and with the weird knob configuration, I thought the PSU has failed. I left it burn in last night. It was still chugging along this morning. I'm typing on it now. So no blood, no foul.

While I had it apart, I fixed a ground loop by soldering in a GLI. I also got rid of the Asus Xonar card. The card was located up against the video card fan and was picking wicked bad noise from the fan. After I pulled the card, I noticed that something was stuck in the center channel socket. Turns out it was a broken silver tip off a 3.5mm connector. Funny thing is that I didn't put it there (my connectors are gold). I'm guessing it was a return to New Egg. Lesson learned completely test hardware when it's delivered.

Just glad everything is now working. A little polish and touch up left. Pics with speakers soon. Thanks for reading.

blueonblack
02-15-2009, 05:44 AM
Excellent news!! May it serve you well for years to come!

DonT-FeaR
02-16-2009, 03:30 AM
good work mr fix it :)

Mach
05-30-2009, 02:02 AM
Story summary - Badness happens:facepalm:, Modding occurs:think:, Upgrades follow:up:, Happiness ensues:banana:

That's the gist of the story. The details include a failing motherboard that wouldn't post, an RMA to Gigabyte (no fuss, no muss, Gigabyte rocks!), another tussle with the open faced DVD-Rom, conclusion that DVD Sata boards from Hong Kong suck, a discovery of an easily moddable slim line DVD-Rom, the addition and modding of a ram cooler, and an upgrade from an E6600 to a Q6600.

If you want to window a slim-line drive, find one of these:
http://lh5.ggpht.com/_UdQdiSb7gT4/SiC5y2eN8GI/AAAAAAAAEwo/sNNza1JOdCo/s800/20090419164353.jpg

See the red wire in the lower right?
http://lh3.ggpht.com/_UdQdiSb7gT4/SiC6SJZm8fI/AAAAAAAAEww/Y2SGOT02iTU/s800/IMG_0104.JPG

That connects to a mini PCB that is simple to desolder the micro switch and solder in a set of wires. No need to solder to a tiny, tiny pins like before.
http://lh6.ggpht.com/_UdQdiSb7gT4/SiC5zuCjmpI/AAAAAAAAEws/UIjS6RRlzCk/s800/20090419164353-2.jpg

It wouldn't be a tear down without an upgrade.
http://lh6.ggpht.com/_UdQdiSb7gT4/SiC7tJ2lhPI/AAAAAAAAEw0/ZRvraSxCZ0Q/s800/20090411233520.jpg

Stock clock wasn't stable after several tries re-seating the CPU heatsink, upping the fan speeds, and finally, adding a ram cooler killed off the problem.
http://lh3.ggpht.com/_UdQdiSb7gT4/SiC3-6PLwpI/AAAAAAAAEwc/fkG8NFpmaQU/s800/41sPw6OHHdL._SS500_.jpg

with a little modding of course.
http://lh5.ggpht.com/_UdQdiSb7gT4/SiC2ufj7WVI/AAAAAAAAEv8/prRNYGI9d9o/s800/IMG_5263-1.JPG

http://lh6.ggpht.com/_UdQdiSb7gT4/SiC2xChR0WI/AAAAAAAAEwA/bUGVk3X2HI8/s800/IMG_5264-1.JPG

With luck, I'll button it back up this weekend and shoot some video and photos next week.
http://lh3.ggpht.com/_UdQdiSb7gT4/SiC2rxlXA6I/AAAAAAAAEv4/o0vPGvC3sBU/s800/IMG_5262-1.JPG

billygoat333
05-30-2009, 02:59 AM
looking sexxy! :)

DonT-FeaR
05-30-2009, 03:18 AM
that looks so cool
love the ram cooler.

blueonblack
05-30-2009, 05:02 AM
Wow, man. You actually managed to make this thing better. I'm impressed.

I have to say the brass on the RAM cooler is a beautiful touch. +rep

nevermind1534
05-30-2009, 11:26 AM
Nice. So the RAM cooler actually helped you with the OC? I'm seriously considering hooking mine up now.

Mach
05-30-2009, 01:06 PM
Thanks guys! No, no overclock yet. The ram cooler helped with a stable burn in on the bench. I've either got a dodgy stick of ram or the Q6600 is dumping alot of heat into the ram stack. 4 attempts at stress test end before the 24 hours had finished. After the ram cooler, 2 more tries passed. Conclusion through the process of elimination was ram cooling was the problem.

Temps on the CPU fluctuate between 38-42C loaded which is about where the E6600 was but I had to set the fan to max instead of the motherboard managing fan speed as before. I knew the extra speed would add to the heat but it seems it uncovered the tipping point on the XP90C heat sink and Arctic Cooling fan.

madd0ct0r
05-31-2009, 03:32 PM
wow. A whole lot of things to think about.

Page 5 - Why don't I add a windowed dvd drive?
Page 7 - Ahh. that's why.
Page 15 - hmmm, actually.

why do you tease me so?
+rep

Mach
05-31-2009, 05:02 PM
why do you tease me so?

Its what I do man, its what I do. ;)

Seriously, I learned alot along the way so I can't complain too much. I'm sure it shortens the life of the drive but its the challenge, so go for it. I'll post up any details or pics if it helps.

Mach
07-12-2009, 02:05 PM
Following up on a few loose ends. For future reference, here's the VB code that I used to interface with the phidgets board.


Option Explicit
Dim WithEvents relay As PhidgetInterfaceKit
Dim WithEvents kit As PhidgetInterfaceKit
Dim WithEvents knob As PhidgetEncoder
Dim dumpfirst

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim volR As Long
Dim volL As Long
Dim volume As Long
Dim mymute As Long
Dim mute As MIXERCONTROL
Dim unmute As MIXERCONTROL
Dim ONOFF As MIXERCONTROL
Dim hmixer As Long ' mixer handle
Dim VolCtrl As MIXERCONTROL ' master volume control
Dim rc As Long ' return code
Dim ok As Boolean ' boolean return code





Private Sub knob_OnInputChange(ByVal Index As Long, ByVal NewState As Boolean)

If NewState <> False Then
chkMute.Value = chkMute.Value * -1 + 1
End If
End Sub

Private Sub Knob_OnPositionChange(ByVal Index As Long, ByVal Time As Long, ByVal EncoderDisplacement As Long)
Dim myVol As Long
myVol = VolumeControl(0).Value - EncoderDisplacement * 800
If myVol >= 65535 Then
VolumeControl(0).Value = 65535
ElseIf myVol <= 0 Then
VolumeControl(0).Value = 0
Else
VolumeControl(0).Value = myVol
End If
VolumeControl_Scroll (0)
'Slider1.Value = Slider1.Value + EncoderDisplacement
'Label1.Caption = phidgetEnc.EncoderPosition(0)

End Sub

Private Sub chkMute_Click()
If chkMute.Value = 0 Then
ok = GetMixerControl(hmixer, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, MIXERCONTROL_CONTROLTYPE_MUTE, mute)
SetMuteControl hmixer, mute, 1
ElseIf chkMute.Value = 1 Then
ok = GetMixerControl(hmixer, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, MIXERCONTROL_CONTROLTYPE_MUTE, unmute)
unSetMuteControl hmixer, unmute, 1
End If

End Sub


Private Sub Form_Load()

Set relay = New PhidgetInterfaceKit
relay.Open (9106)
Set kit = New PhidgetInterfaceKit
kit.Open (6602)
Set knob = New PhidgetEncoder
knob.Open (13932)

'Open the mixer with deviceID 0.
rc = mixerOpen(hmixer, 0, 0, 0, 0)
If ((MMSYSERR_NOERROR <> rc)) Then
MsgBox "Couldn't open the mixer please check if a audio mixer is installed then retry."
Exit Sub
End If

ok = GetMixerControl(hmixer, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, MIXERCONTROL_CONTROLTYPE_VOLUME, VolCtrl)
volume = GetVolumeControlValue(hmixer, VolCtrl)
ok = GetMixerControl(hmixer, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, MIXERCONTROL_CONTROLTYPE_MUTE, mute)
mymute = GetVolumeControlValue(hmixer, mute)
If volume <> -1 Then
chkMute.Value = mymute
'Debug.Print GetVolumeControlValue(hmixer, VolCtrl)
VolumeControl(0) = 65535 - volume
End If
dumpfirst = 0
Call add_system_tray_icon(Me)
End Sub
'Report the value of the input whenever it changes
Private Sub kit_OnInputChange(ByVal Index As Long, ByVal NewState As Boolean)

If Index = 0 Then
If dumpfirst > 0 Then 'dumps the first input change - debounce?
If NewState = False Then
Call MoveRec(True)
relay.OutputState(0) = True
Sleep (300)
relay.OutputState(0) = False
Sleep (1000)
relay.OutputState(1) = True
ElseIf NewState = True Then
Call MoveRec(False)
relay.OutputState(0) = False
relay.OutputState(1) = False
End If
End If
ElseIf Index = 7 Then
If NewState = True Then
dlgShutdown.Show


End If
End If
dumpfirst = 1
End Sub


'Report the value of the sensor whenever it changes
Private Sub kit_OnSensorChange(ByVal Index As Long, ByVal SensorValue As Long)
If Index = 0 Then
lblTemp.Caption = CLng(9 / 5 * ((SensorValue / 1000) * 222.22 - 61.11) + 32.5) & "F/" & CLng(((SensorValue / 1000) * 222.22 - 61.11) + 0.5) & "C"
End If

End Sub
Private Sub chkGlow_Click(Index As Integer)
If chkGlow(Index).Value = 0 Then
relay.OutputState(Index) = False
chkGlow(Index).BackColor = &H8000000F
Else
relay.OutputState(Index) = True
chkGlow(Index).BackColor = &H80C0FF
End If
End Sub



Private Sub VolumeControl_Scroll(I As Integer)
volume = 65535 - CLng(VolumeControl(I).Value)
SetPANControl hmixer, VolCtrl, volume, volume ' Stereo Mixer Control
End Sub

Private Sub MoveRec(RecPos As Boolean)
'On Error Resume Next

If Me.WindowState <> vbNormal Then
Me.WindowState = vbNormal
LoadFormPosition
End If

Dim I As Integer
If RecPos = True Then
'For I = 1980 To 2745 Step 10
Form1.Height = 3225
'Sleep (10)
'Next I
ElseIf RecPos = False Then
'For I = 2745 To 1980 Step -10
'Debug.Print Image1.Top
Form1.Height = 1980
'Sleep (10)
'Next I
SaveFormPosition Me.Left, Me.Top, Me.Height, Me.Width, Me.WindowState
Me.WindowState = vbMinimized
Me.Hide
End If

End Sub


Private Sub Form_Unload(Cancel As Integer)
Call remove_system_tray_icon
End Sub

Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then
Me.Hide
Else
SaveFormPosition Me.Left, Me.Top, Me.Height, Me.Width, Me.WindowState
End If
End Sub

Mach
07-12-2009, 02:09 PM
Here's the code for the module that interface with the Windows volume controller
Credit goes to micracom2 (i'm removing his email for spam purposes).


'This is an update from my cd/mixer I have taken the cd player away
'and put the slider/mutes/balance controls into arrays.
'this makes it alittle more harder to understand but it is better/faster coding.
'If you wish to comment or get the VU meters working for me email me at
'[deleted] and I shall see if I can help.

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Public Const MMSYSERR_NOERROR = 0
Public Const MAXPNAMELEN = 32
Public Const MIXER_LONG_NAME_CHARS = 64
Public Const MIXER_SHORT_NAME_CHARS = 16
Public Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Public Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
Public Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2& ' separate left-right volume control
Public Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
Public Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
Public Const MIXERCONTROL_CT_CLASS_SWITCH = &H20000000
Public Const MIXERCONTROL_CT_SC_SWITCH_BOOLEAN = &H0&
Public Const MIXERCONTROL_CT_UNITS_BOOLEAN = &H10000
Public Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
Public Const MIXERCONTROL_CT_CLASS_CUSTOM = &H0&
Public Const MIXERCONTROL_CT_CLASS_LIST = &H70000000
Public Const MIXERCONTROL_CT_CLASS_MASK = &HF0000000
Public Const MIXERCONTROL_CT_CLASS_METER = &H10000000
Public Const MIXERCONTROL_CT_CLASS_NUMBER = &H30000000
Public Const MIXERCONTROL_CT_CLASS_SLIDER = &H40000000
Public Const MIXERCONTROL_CT_CLASS_TIME = &H60000000
Public Const MIXERCONTROL_CT_SC_LIST_MULTIPLE = &H1000000
Public Const MIXERCONTROL_CT_SC_LIST_SINGLE = &H0&
Public Const MIXERCONTROL_CT_SC_METER_POLLED = &H0&
Public Const MIXERCONTROL_CT_SC_SWITCH_BUTTON = &H1000000
Public Const MIXERCONTROL_CT_SC_TIME_MICROSECS = &H0&
Public Const MIXERCONTROL_CT_SC_TIME_MILLISECS = &H1000000
Public Const MIXERCONTROL_CT_SUBCLASS_MASK = &HF000000
Public Const MIXERCONTROL_CT_UNITS_CUSTOM = &H0&
Public Const MIXERCONTROL_CT_UNITS_DECIBELS = &H40000
Public Const MIXERCONTROL_CT_UNITS_MASK = &HFF0000
Public Const MIXERCONTROL_CT_UNITS_PERCENT = &H50000
Public Const MIXERCONTROL_CT_UNITS_SIGNED = &H20000
Public Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Public Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
Public Const MIXERLINE_COMPONENTTYPE_SRC_ANALOG = &H1000& + 10
Public Const MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = &H1000& + 9
Public Const MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = &H1000& + 5
Public Const MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = &H1000& + 1
Public Const MIXERLINE_COMPONENTTYPE_SRC_LAST = &H1000& + 10
Public Const MIXERLINE_COMPONENTTYPE_SRC_LINE = &H1000& + 2
Public Const MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = &H1000& + 4
Public Const MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = &H1000& + 0
Public Const MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = &H1000& + 8

Public Const MIXERLINE_COMPONENTTYPE_SRC_I25InVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
Public Const MIXERLINE_COMPONENTTYPE_SRC_LINEVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
Public Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
Public Const MIXERLINE_COMPONENTTYPE_SRC_MIDIVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
Public Const MIXERLINE_COMPONENTTYPE_SRC_CDVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
Public Const MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
Public Const MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
Public Const MIXERLINE_COMPONENTTYPE_SRC_WAVEDSVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
Public Const MIXERLINE_COMPONENTTYPE_SRC_AUXVol = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)

Public Const MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
Public Const MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
Public Const MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
Public Const MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
Public Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
Public Const MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
Public Const MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
Public Const MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
Public Const MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
Public Const MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)

Public Const MMIO_READ = &H0
Public Const MMIO_FINDCHUNK = &H10
Public Const MMIO_FINDRIFF = &H20
' Mixer control types

Public Const MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_BASS = (MIXERCONTROL_CONTROLTYPE_FADER + 2)
Public Const MIXERCONTROL_CONTROLTYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BOOLEAN Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Public Const MIXERCONTROL_CONTROLTYPE_TREBLE = (MIXERCONTROL_CONTROLTYPE_FADER + 3)
Public Const MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
Public Const MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
Public Const MIXERCONTROL_CONTROLTYPE_EQUALIZER = (MIXERCONTROL_CONTROLTYPE_FADER + 4)
Public Const MIXERCONTROL_CONTROLTYPE_LOUDNESS = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
Public Const MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_SIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
Public Const MIXERCONTROL_CONTROLTYPE_BOOLEANMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Public Const MIXERCONTROL_CONTROLTYPE_BUTTON = (MIXERCONTROL_CT_CLASS_SWITCH Or MIXERCONTROL_CT_SC_SWITCH_BUTTON Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Public Const MIXERCONTROL_CONTROLTYPE_CUSTOM = (MIXERCONTROL_CT_CLASS_CUSTOM Or MIXERCONTROL_CT_UNITS_CUSTOM)
Public Const MIXERCONTROL_CONTROLTYPE_DECIBELS = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_DECIBELS)
Public Const MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_MULTIPLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Public Const MIXERCONTROL_CONTROLTYPE_MICROTIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MICROSECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_MILLITIME = (MIXERCONTROL_CT_CLASS_TIME Or MIXERCONTROL_CT_SC_TIME_MILLISECS Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_MIXER = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
Public Const MIXERCONTROL_CONTROLTYPE_MONO = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
Public Const MIXERCONTROL_CONTROLTYPE_SLIDER = (MIXERCONTROL_CT_CLASS_SLIDER Or MIXERCONTROL_CT_UNITS_SIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_STEREOENH = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
Public Const MIXERCONTROL_CONTROLTYPE_UNSIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_SINGLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or MIXERCONTROL_CT_SC_LIST_SINGLE Or MIXERCONTROL_CT_UNITS_BOOLEAN)
Public Const MIXERCONTROL_CONTROLTYPE_MUX = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
Public Const MIXERCONTROL_CONTROLTYPE_PAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
Public Const MIXERCONTROL_CONTROLTYPE_PERCENT = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_PERCENT)
Public Const MIXERCONTROL_CONTROLTYPE_QSOUNDPAN = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
Public Const MIXERCONTROL_CONTROLTYPE_SIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or MIXERCONTROL_CT_UNITS_SIGNED)
' Mixer line flags
Public Const MIXERLINE_LINEF_ACTIVE = &H1&
Public Const MIXERLINE_LINEF_DISCONNECTED = &H8000&
Public Const MIXERLINE_LINEF_SOURCE = &H80000000
' Mixer line target types
Public Const MIXERLINE_TARGETTYPE_AUX = 5
Public Const MIXERLINE_TARGETTYPE_MIDIIN = 4
Public Const MIXERLINE_TARGETTYPE_MIDIOUT = 3
Public Const MIXERLINE_TARGETTYPE_UNDEFINED = 0
Public Const MIXERLINE_TARGETTYPE_WAVEIN = 2
Public Const MIXERLINE_TARGETTYPE_WAVEOUT = 1
' Error constants
Public Const MIXERR_INVALLINE = 1024 + 0
Public Const MIXERR_BASE = 1024
Public Const MIXERR_INVALCONTROL = 1024 + 1
Public Const MIXERR_INVALVALUE = 1024 + 2
Public Const MIXERR_LASTERROR = 1024 + 2
Type MIXERCAPS
wMid As Integer ' manufacturer id
wPid As Integer ' product id
vDriverVersion As Long ' version of the driver
szPname As String * MAXPNAMELEN ' product name
fdwSupport As Long ' misc. support bits
cDestinations As Long ' count of destinations
End Type

' Mixer line types
Type Target
dwType As Long ' MIXERLINE_TARGETTYPE_xxxx
dwDeviceID As Long ' target device ID of device type
wMid As Integer ' of target device
wPid As Integer ' "
vDriverVersion As Long ' "
szPname As String * MAXPNAMELEN
End Type

Type MIXERLINE
cbStruct As Long ' size of MIXERLINE structure
dwDestination As Long ' zero based destination index
dwSource As Long ' zero based source index (if source)
dwLineID As Long ' unique line id for mixer device
fdwLine As Long ' state/information about line
dwUser As Long ' driver specific information
dwComponentType As Long ' component type line connects to
cChannels As Long ' number of channels line supports
cConnections As Long ' number of connections (possible)
cControls As Long ' number of controls at this line
szShortName As String * MIXER_SHORT_NAME_CHARS
szName As String * MIXER_LONG_NAME_CHARS
lpTarget As Target
End Type

' MM Control types
Type MIXERLINECONTROLS
cbStruct As Long ' size in Byte of MIXERLINECONTROLS
dwLineID As Long ' line id (from MIXERLINE.dwLineID)
dwControl As Long ' used with MIXER_GETLINECONTROLSF_ONEBYTYPE or MIXER_GETLINECONTROLSF_ONEBYID
cControls As Long ' count of controls pmxctrl points to
cbmxctrl As Long ' size in Byte of _one_ MIXERCONTROL
pamxctrl As Long ' pointer to first MIXERCONTROL array
End Type

Type MIXERCONTROL
cbStruct As Long ' size in Byte of MIXERCONTROL
dwControlID As Long ' unique control id for mixer device
dwControlType As Long ' MIXERCONTROL_CONTROLTYPE_xxx
fdwControl As Long ' MIXERCONTROL_CONTROLF_xxx
cMultipleItems As Long ' if MIXERCONTROL_CONTROLF_MULTIPLE set
szShortName(1 To MIXER_SHORT_NAME_CHARS) As Byte
szName(1 To MIXER_LONG_NAME_CHARS) As Byte
Bounds(1 To 6) As Long
Metrics(1 To 6) As Long
End Type

Type MIXERCONTROLDETAILS
cbStruct As Long ' size in Byte of MIXERCONTROLDETAILS
dwControlID As Long ' control id to get/set details on
cChannels As Long ' number of channels in paDetails array
item As Long ' hwndOwner or cMultipleItems
cbDetails As Long ' size of _one_ details_XX struct
paDetails As Long ' pointer to array of details_XX structs
End Type

Type MIXERCONTROLDETAILS_BOOLEAN
fValue As Long
End Type

Type MIXERCONTROLDETAILS_LISTTEXT
dwParam1 As Long
dwParam2 As Long
szName As String * MIXER_LONG_NAME_CHARS
End Type

Type MIXERCONTROLDETAILS_SIGNED
lValue As Long
End Type

Type MIXERCONTROLDETAILS_UNSIGNED
dwValue As Long
End Type

Declare Function mixerClose Lib "winmm.dll" (ByVal hmx As Long) As Long
Declare Function mixerGetControlDetails Lib "winmm.dll" Alias "mixerGetControlDetailsA" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
Declare Function mixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (ByVal uMxId As Long, pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long
Declare Function mixerGetID Lib "winmm.dll" (ByVal hmxobj As Long, pumxID As Long, ByVal fdwId As Long) As Long
Declare Function mixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, ByVal fdwControls As Long) As Long
Declare Function mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, ByVal fdwInfo As Long) As Long
Declare Function mixerGetNumDevs Lib "winmm.dll" () As Long
Declare Function mixerMessage Lib "winmm.dll" (ByVal hmx As Long, ByVal uMsg As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long) As Long
Declare Function mixerOpen Lib "winmm.dll" (phmx As Long, ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
Declare Function mixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
Public Declare Function RegisterDLL Lib "Regist10.dll" Alias "REGISTERDLL" (ByVal DllPath As String, bRegister As Boolean) As Boolean
Declare Function mmioClose Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Declare Function mmioDescend Lib "winmm.dll" (ByVal hmmio As Long, lpck As MMCKINFO, lpckParent As MMCKINFO, ByVal uFlags As Long) As Long
Declare Function mmioDescendParent Lib "winmm.dll" Alias "mmioDescend" (ByVal hmmio As Long, lpck As MMCKINFO, ByVal X As Long, ByVal uFlags As Long) As Long
Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, lpmmioinfo As mmioinfo, ByVal dwOpenFlags As Long) As Long
Declare Function mmioRead Lib "winmm.dll" (ByVal hmmio As Long, ByVal pch As Long, ByVal cch As Long) As Long
Declare Function mmioReadFormat Lib "winmm.dll" Alias "mmioRead" (ByVal hmmio As Long, ByRef pch As waveFormat, ByVal cch As Long) As Long
Declare Function mmioStringToFOURCC Lib "winmm.dll" Alias "mmioStringToFOURCCA" (ByVal sz As String, ByVal uFlags As Long) As Long
Declare Function mmioAscend Lib "winmm.dll" (ByVal hmmio As Long, lpck As MMCKINFO, ByVal uFlags As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal length As Long)

Mach
07-12-2009, 02:10 PM
Second half


Declare Sub CopyStructFromPtr Lib "kernel32" _
Alias "RtlMoveMemory" _
(struct As Any, _
ByVal ptr As Long, ByVal cb As Long)

Declare Sub CopyPtrFromStruct Lib "kernel32" _
Alias "RtlMoveMemory" _
(ByVal ptr As Long, _
struct As Any, _
ByVal cb As Long)

Declare Function GlobalAlloc Lib "kernel32" _
(ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long

Declare Function GlobalLock Lib "kernel32" _
(ByVal hmem As Long) As Long

Declare Function GlobalFree Lib "kernel32" _
(ByVal hmem As Long) As Long

Dim rc As Long

' variables for managing wave file
Public formatA As waveFormat
Dim hmmioOut As Long
Dim mmckinfoParentIn As MMCKINFO
Dim mmckinfoSubchunkIn As MMCKINFO
Dim bufferIn As Long
Dim hmem As Long
Public numSamples As Long
Public drawFrom As Long
Public drawTo As Long
Public fFileLoaded As Boolean

Type waveFormat
wFormatTag As Integer
nChannels As Integer
nSamplesPerSec As Long
nAvgBytesPerSec As Long
nBlockAlign As Integer
wBitsPerSample As Integer
cbSize As Integer
End Type

Type mmioinfo
dwFlags As Long
fccIOProc As Long
pIOProc As Long
wErrorRet As Long
htask As Long
cchBuffer As Long
pchBuffer As String
pchNext As String
pchEndRead As String
pchEndWrite As String
lBufOffset As Long
lDiskOffset As Long
adwInfo(4) As Long
dwReserved1 As Long
dwReserved2 As Long
hmmio As Long
End Type

Type MMCKINFO
ckid As Long
ckSize As Long
fccType As Long
dwDataOffset As Long
dwFlags As Long
End Type

Private Type VS_FIXEDFILEINFO
dwSignature As Long
dwStrucVersionl As Integer ' e.g. = &h0000 = 0
dwStrucVersionh As Integer ' e.g. = &h0042 = .42
dwFileVersionMSl As Integer ' e.g. = &h0003 = 3
dwFileVersionMSh As Integer ' e.g. = &h0075 = .75
dwFileVersionLSl As Integer ' e.g. = &h0000 = 0
dwFileVersionLSh As Integer ' e.g. = &h0031 = .31
dwProductVersionMSl As Integer ' e.g. = &h0003 = 3
dwProductVersionMSh As Integer ' e.g. = &h0010 = .1
dwProductVersionLSl As Integer ' e.g. = &h0000 = 0
dwProductVersionLSh As Integer ' e.g. = &h0031 = .31
dwFileFlagsMask As Long ' = &h3F For version "0.42"
dwFileFlags As Long ' e.g. VFF_DEBUG Or VFF_PRERELEASE
dwFileOS As Long ' e.g. VOS_DOS_WINDOWS16
dwFileType As Long ' e.g. VFT_DRIVER
dwFileSubtype As Long ' e.g. VFT2_DRV_KEYBOARD
dwFileDateMS As Long ' e.g. 0
dwFileDateLS As Long ' e.g. 0
End Type

Function GetMixerControl(ByVal hmixer As Long, _
ByVal componentType As Long, _
ByVal ctrlType As Long, _
ByRef mxc As MIXERCONTROL) As Boolean

' This function attempts to obtain a mixer control. Returns True if successful.
Dim mxlc As MIXERLINECONTROLS
Dim mxl As MIXERLINE
Dim hmem As Long
Dim rc As Long

mxl.cbStruct = Len(mxl)
mxl.dwComponentType = componentType
' Obtain a line corresponding to the component type
rc = mixerGetLineInfo(hmixer, mxl, MIXER_GETLINEINFOF_COMPONENTTYPE)
If (MMSYSERR_NOERROR = rc) Then
mxlc.cbStruct = Len(mxlc)
mxlc.dwLineID = mxl.dwLineID
mxlc.dwControl = ctrlType
mxlc.cControls = 1
mxlc.cbmxctrl = Len(mxc)
' Allocate a buffer for the control
hmem = GlobalAlloc(&H40, Len(mxc))
mxlc.pamxctrl = GlobalLock(hmem)
mxc.cbStruct = Len(mxc)
' Get the control
rc = mixerGetLineControls(hmixer, mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE)
If (MMSYSERR_NOERROR = rc) Then
GetMixerControl = True
' Copy the control into the destination structure
CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc)
Else
GetMixerControl = False
End If
GlobalFree (hmem)
Exit Function
End If
GetMixerControl = False
End Function

Function SetVolumeControl(ByVal hmixer As Long, mxc As MIXERCONTROL, ByVal volume As Long) As Boolean
Dim mxcd As MIXERCONTROLDETAILS
Dim vol As MIXERCONTROLDETAILS_UNSIGNED
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = mxc.dwControlID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(vol)
hmem = GlobalAlloc(&H40, Len(vol))
mxcd.paDetails = GlobalLock(hmem)
vol.dwValue = volume
' Copy the data into the control value buffer
CopyPtrFromStruct mxcd.paDetails, vol, Len(vol)
rc = mixerSetControlDetails(hmixer, mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
SetVolumeControl = True
Else
SetVolumeControl = False
End If
End Function

Function SetPANControl(ByVal hmixer As Long, mxc As MIXERCONTROL, ByVal volL As Long, ByVal volR As Long) As Boolean
'This function sets the value for a volume control. Returns True if successful
Dim mxcd As MIXERCONTROLDETAILS
Dim vol(1) As MIXERCONTROLDETAILS_UNSIGNED
mxcd.item = mxc.cMultipleItems
mxcd.dwControlID = mxc.dwControlID
mxcd.cbStruct = Len(mxcd)
mxcd.cbDetails = Len(vol(1))
' Allocate a buffer for the control value buffer
mxcd.cChannels = 2
hmem = GlobalAlloc(&H40, Len(vol(1)))
mxcd.paDetails = GlobalLock(hmem)
vol(1).dwValue = volR
vol(0).dwValue = volL
' Copy the data into the control value buffer
CopyPtrFromStruct mxcd.paDetails, vol(1).dwValue, Len(vol(0)) * mxcd.cChannels
CopyPtrFromStruct mxcd.paDetails, vol(0).dwValue, Len(vol(1)) * mxcd.cChannels
' Set the control value
rc = mixerSetControlDetails(hmixer, mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
SetPANControl = True
Else
SetPANControl = False
End If

End Function
Function GetVolumeControlValue(ByVal hmixer As Long, mxc As MIXERCONTROL) As Long
'This function Gets the value for a volume control. Returns True if successful
Dim mxcd As MIXERCONTROLDETAILS
Dim vol As MIXERCONTROLDETAILS_UNSIGNED
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = mxc.dwControlID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(vol)
mxcd.paDetails = 0
hmem = GlobalAlloc(&H40, Len(vol))
mxcd.paDetails = GlobalLock(hmem)
rc = mixerGetControlDetails(hmixer, mxcd, MIXER_GETCONTROLDETAILSF_VALUE)
CopyStructFromPtr vol, mxcd.paDetails, Len(vol)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
GetVolumeControlValue = vol.dwValue
Else
GetVolumeControlValue = -1
End If
End Function

Function GetMuteControl(ByVal hmixer As Long, mxc As MIXERCONTROL) As Boolean
Dim mxcd As MIXERCONTROLDETAILS
Dim vol As MIXERCONTROLDETAILS_UNSIGNED
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = mxc.dwControlID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(vol)
hmem = GlobalAlloc(&H40, Len(vol))
mxcd.paDetails = GlobalLock(hmem)
rc = mixerGetControlDetails(hmixer, mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
CopyStructFromPtr vol, mxcd.paDetails, Len(vol)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
GetMuteControl = vol.dwValue
Else
GetMuteControl = False
End If
End Function

Function SetMuteControl(ByVal hmixer As Long, mxc As MIXERCONTROL, mute As Boolean) As Boolean
Dim mxcd As MIXERCONTROLDETAILS
Dim vol As MIXERCONTROLDETAILS_UNSIGNED
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = mxc.dwControlID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(vol)
hmem = GlobalAlloc(&H40, Len(vol))
mxcd.paDetails = GlobalLock(hmem)
vol.dwValue = volume
CopyPtrFromStruct mxcd.paDetails, vol, Len(vol)
rc = mixerSetControlDetails(hmixer, mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
SetMuteControl = True
Else
SetMuteControl = False
End If
End Function


Function unSetMuteControl(ByVal hmixer As Long, mxc As MIXERCONTROL, ByVal unmute As Long) As Boolean
Dim mxcd As MIXERCONTROLDETAILS
Dim vol As MIXERCONTROLDETAILS_UNSIGNED
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = mxc.dwControlID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(vol)
hmem = GlobalAlloc(&H40, Len(vol))
mxcd.paDetails = GlobalLock(hmem)
vol.dwValue = unmute
CopyPtrFromStruct mxcd.paDetails, vol, Len(vol)
rc = mixerSetControlDetails(hmixer, mxcd, MIXER_SETCONTROLDETAILSF_VALUE)
GlobalFree (hmem)
If (MMSYSERR_NOERROR = rc) Then
unSetMuteControl = True
Else
unSetMuteControl = False
End If
End Function

Mach
07-12-2009, 02:16 PM
Here's the module that minimizes the form to the task tray. Not sure where I picked up this code from. If it's yours, let me know and I'll give you credit.


Option Explicit

Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lpBuffer As Any, nVerSize As Long) As Long
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef r_Destination As Any, ByRef r_Source As Any, ByVal v_Length As Long)

'A GUID is a 128-bit value consisting of one group of 8 hexadecimal digits, followed
'by three groups of 4 hexadecimal digits each, followed by one group of 12 hexadecimal
'digits. (Example: 6B29FC40-CA47-1067-B31D-00DD010662DA)
Private Type GUID
Data1 As Long 'Specifies the first 8 hexadecimal digits of the GUID.
Data2 As Integer 'Specifies the first group of 4 hexadecimal digits.
Data3 As Integer 'Specifies the second group of 4 hexadecimal digits.
Data4(7) As Byte 'First 2 bytes: 3rd group of digits. Next 6 bytes: last 12 digits.
End Type

'Contains information that the system needs to process taskbar status area messages
Private Type NOTIFYICONDATA
'The size of this structure, in bytes.
cbSize As Long

'A handle to the window that receives notification messages associated with an icon
'in the taskbar status area. The Shell uses hWnd together with uID to identify which
'icon to operate on when Shell_NotifyIcon is invoked. If guidItem is specified, hWnd
'is not required.
hwnd As Long

'The application-defined identifier of the taskbar icon. The Shell uses either hWnd
'plus uID or guidItem to identify which icon to operate on when Shell_NotifyIcon is
'invoked. You can have multiple icons associated with a single hWnd by assigning each
'a different uID. If guidItem is specified, uID is ignored.
uID As Long

'Flags that either indicate which of the other members contain valid data or
'provide additional information to the ToolTip as to how it should display.
'If you set the NIF_INFO flag, the standard ToolTip is replaced by a balloon ToolTip.
'NIF_MESSAGE The uCallbackMessage member is valid.
'NIF_ICON The hIcon member is valid.
'NIF_TIP The szTip member is valid.
'NIF_STATE The dwState and dwStateMask members are valid. (Windows 2000 and later)
'NIF_INFO The szInfo, uTimeout, szInfoTitle, and dwInfoFlags members are valid. (Windows 2000 and later)
'NIF_GUID Reserved. (Windows XP and later)
'NIF_REALTIME If the ToolTip cannot be displayed immediately, discard it. (Windows Vista and later)
'NIF_SHOWTIP Use the standard ToolTip (Windows Vista and later)
uFlags As Long

'An application-defined message identifier. The system uses this identifier to send
'notifications to the window identified in hWnd. These notifications are sent when
'a mouse event occurs in the bounding rectangle of the icon, or when the icon is
'selected or activated with the keyboard.
'
'When the uVersion member is either 0 or NOTIFYICON_VERSION, the wParam parameter of
'the message contains the identifier of the taskbar icon in which the event occurred.
'This identifier can be 32-bits in length. The lParam parameter holds the mouse or
'keyboard message associated with the event. For example, when the pointer moves over
'a taskbar icon, lParam is set to WM_MOUSEMOVE.
'
'When the uVersion member is NOTIFYICON_VERSION_4, applications continue to receive
'notification events in the form of application-defined messages through the
'uCallbackMessage member, but the interpretation of the lParam and wParam parameters
'of that message is changed as follows:
'
'LOWORD(lParam) contains notification events, such as NIN_BALLOONSHOW, NIN_POPUPOPEN,
'or WM_CONTEXTMENU.
'
'HIWORD(lParam) contains the icon ID. Icon IDs are restricted to a length of 16 bits.
'
'GET_X_LPARAM(wParam) returns the X anchor coordinate for notification events
'NIN_POPUPOPEN, NIN_SELECT, NIN_KEYSELECT, and all mouse messages between WM_MOUSEFIRST
'and WM_MOUSELAST. If any of those messages are generated by the keyboard, wParam is
'set to the upper-left corner of the target icon. For all other messages, wParam is
'undefined.
'
'GET_Y_LPARAM(wParam) returns the Y anchor coordinate for notification events and
'messages as defined for the X anchor.
uCallbackMessage As Long

'A handle to the icon to be added, modified, or deleted. To avoid icon distortion,
'be aware that notification area icons have different levels of support under
'different versions of Microsoft Windows. Windows 95, Windows 98, and Microsoft
'Windows NT 4.0 support icons of up to 4 bits per pixel (BPP). Windows Millennium
'Edition (Windows Me) and Windows 2000 support icons of a color depth up to the
'current display mode. Windows XP supports icons of up to 32 BPP.
'
'If only a 16x16 pixel icon is provided, it is scaled to a larger size in a system
'set to a high dots per inch (dpi). This can lead to an unattractive result. It is
'recommended that you provide both a 16x16 pixel icon and a larger icon in your
'resource file. Use LoadIconMetric to ensure that the correct icon is loaded and
'scaled appropriately.
hIcon As Long

'A null-terminated string that specifies the text for a standard ToolTip.
'It can have a maximum of 64 characters, including the terminating null character.
'For Windows 2000 (Shell32.dll version 5.0) and later, szTip can have a maximum of
'128 characters, including the terminating null character.
szTip As String * 128

'The state of the icon. There are two flags that can be set independently: NIS_HIDDEN and NIS_SHAREDICON
'Windows 2000 (Shell32.dll version 5.0) and later.
dwState As Long

'A value that specifies which bits of the dwState member are retrieved or modified.
'The possible values are the same as those for dwState. For example, setting this
'member to NIS_HIDDEN causes only the item's hidden state to be retrieved while the
'icon sharing bit is ignored regardless of its value.
'Windows 2000 (Shell32.dll version 5.0) and later.
dwStateMask As Long

'A null-terminated string that specifies the text for a balloon ToolTip. It can have
'a maximum of 256 characters, including the terminating null character. To remove
'the ToolTip, set the NIF_INFO flag in uFlags and set szInfo to an empty string.
'Windows 2000 (Shell32.dll version 5.0) and later.
szInfo As String * 256

'uTimeout
'This member is deprecated as of Windows Vista.
'Notification display times are now based on system settings.
'
'Union with uVersion. The timeout value, in milliseconds, for a balloon ToolTip.
'The system enforces minimum and maximum timeout values. Values specified in uTimeout
'that are too large are set to the maximum value. Values that are too small default
'to the minimum value. The system minimum and maximum timeout values are currently
'set at 10 seconds and 30 seconds, respectively.
'
'uVersion
'Windows 2000 (Shell32.dll version 5.0) and later. Union with uTimeout. Specifies
'whether the Shell notify icon interface should use Windows 95 or Windows 2000
'behavior. For more information on the differences in these two behaviors, see
'Shell_NotifyIcon. This member is only employed when using Shell_NotifyIcon to send
'a NIM_SETVERSION message.
'
'0 = Use the Windows 95 behavior. Use this value for applications designed for Windows versions prior to Windows 2000.
'NOTIFYICON_VERSION = Use the Windows 2000 behavior. Use this value for applications designed for Windows 2000 and later.
'NOTIFYICON_VERSION_4 = Use the Windows Vista behavior. Use this value for applications designed for Windows Vista and later.
uTimeoutAndVersion As Long

'A null-terminated string that specifies a title for a balloon ToolTip. This title
'appears in a bold type above the text. It can have a maximum of 64 characters.
'Windows 2000 (Shell32.dll version 5.0) and later.
szInfoTitle As String * 64

'Flags that can be set to add an icon to a balloon ToolTip. It is placed to the left
'of the title. If the szInfoTitle member is zero-length, the icon is not shown.
'Windows 2000 (Shell32.dll version 5.0) and later.
dwInfoFlags As Long

'Windows 7 and later: A registered GUID that identifies the icon. This value
'overrides uID and is the recommended method of identifying the icon.
'Windows XP through Windows Vista: Reserved.
'Windows XP (Shell32.dll version 6.0) and later.
guidItem As GUID

'The handle of a customized balloon icon provided by the application that should be
'used independently of the tray icon. If this member is non-NULL and the NIIF_USER
'flag is set in the dwInfoFlags member, this icon is used as the balloon icon. If
'this member is NULL, the legacy behavior is carried out.
'Windows Vista (Shell32.dll version 6.0.6) and later.
'hBalloonIcon As Long

End Type

Private Const NOTIFYICONDATA_V1_SIZE As Long = 88 'pre-5.0 structure size
Private Const NOTIFYICONDATA_V2_SIZE As Long = 488 'pre-6.0 structure size
Private Const NOTIFYICONDATA_V3_SIZE As Long = 504 '6.0+ structure size

'--------------------------------------------------------------------------------
'NOTIFICATION ICON FLAGS (NIF) (used in uFlags)
'--------------------------------------------------------------------------------
Private Const NIF_MESSAGE As Long = &H1 'The uCallbackMessage member is valid.
Private Const NIF_ICON As Long = &H2 'The hIcon member is valid.
Private Const NIF_TIP As Long = &H4 'The szTip member is valid.

'The dwState and dwStateMask members are valid.
'Windows 2000 and later (Shell32.dll version 5.0)
Private Const NIF_STATE As Long = &H8

'Use a balloon ToolTip instead of a standard ToolTip.
'The szInfo, uTimeout, szInfoTitle, and dwInfoFlags members are valid.
'Windows 2000 and later (Shell32.dll version 5.0)
Private Const NIF_INFO As Long = &H10

'Reserved.
'Windows XP and later (Shell32.dll version 6.0)
Private Const NIF_GUID As Long = &H20

'If the ToolTip cannot be displayed immediately, discard it. Use this flag for
'ToolTips that represent real-time information which would be meaningless or
'misleading if displayed at a later time. For example, a message that states
'"Your telephone is ringing." NIF_REALTIME modifies and must be combined with
'the NIF_INFO flag.
'Windows Vista and later (Shell32.dll version 6.0.6)
Private Const NIF_REALTIME As Long = &H40

'Use the standard ToolTip. Normally, when uVersion is set to NOTIFYICON_VERSION_4,
'the standard ToolTip is replaced by the application-drawn pop-up user interface (UI).
'If the application wants to show the standard tooltip in that case, regardless of
'whether the on-hover UI is showing, it can specify NIF_SHOWTIP to indicate the
'standard tooltip should still be shown. Note that the NIF_SHOWTIP flag is effective
'until the next call to Shell_NotifyIcon.
'Windows Vista and later (Shell32.dll version 6.0.6)
Private Const NIF_SHOWTIP As Long = &H80
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'NOTIFICATION ICON STATES (NIS) (used in dwState and dwStateMask)
'--------------------------------------------------------------------------------
Private Const NIS_HIDDEN As Long = &H1 'The icon is hidden.
Private Const NIS_SHAREDICON As Long = &H2 'The icon is shared.
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'NOTIFICATION ICON INFO FLAGS (NIIF) (used in dwInfoFlags)
'--------------------------------------------------------------------------------
Private Const NIIF_NONE As Long = &H0 'No icon.
Private Const NIIF_INFO As Long = &H1 'An information icon.
Private Const NIIF_WARNING As Long = &H2 'A warning icon.
Private Const NIIF_ERROR As Long = &H3 'An error icon.

'Use the icon identified in hIcon as the notification balloon's title icon.
'Windows XP Service Pack 2 (SP2) and later.
Private Const NIIF_USER As Long = &H4

'Do not play the associated sound. Applies only to balloon ToolTips.
'Windows XP (Shell32.dll version 6.0) and later.
Private Const NIIF_NOSOUND As Long = &H10

'The large version of the icon should be used as the balloon icon. This corresponds
'to the icon with dimensions SM_CXICON x SM_CYICON. If this flag is not set, the
'icon with dimensions XM_CXSMICON x SM_CYSMICON is used.
'
'This flag can be used with all stock icons.
'
'Applications that use older customized icons (NIIF_USER with hIcon) must provide
'a new SM_CXICON x SM_CYICON version in the tray icon (hIcon). These icons are
'scaled down when they are displayed in the System Tray or System Control Area (SCA).
'
'New customized icons (NIIF_USER with hBalloonIcon) must supply an SM_CXICON x
'SM_CYICON version in the supplied icon (hBalloonIcon).
'
'Windows Vista (Shell32.dll version 6.0.6) and later.
Private Const NIIF_LARGE_ICON As Long = &H10

Private Const NIIF_RESPECT_QUIET_TIME As Long = &H80 'Windows 7 and later.
Private Const NIIF_ICON_MASK As Long = &HF 'Reserved. Windows XP (Shell32.dll version 6.0) and later.
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'NOTIFICATION ICON VERSIONS (used in uVersion)
'--------------------------------------------------------------------------------
Private Const NOTIFYICON_VERSION_0 As Long = &H0 'Use Windows 95 behavior
Private Const NOTIFYICON_VERSION As Long = &H3 'Use Windows 2000 behavior
Private Const NOTIFYICON_VERSION_3 As Long = NOTIFYICON_VERSION 'Alias of NOTIFYICON_VERSION
Private Const NOTIFYICON_VERSION_4 As Long = &H4 'Use Windows Vista behavior
'--------------------------------------------------------------------------------

Mach
07-12-2009, 02:17 PM
Second half of the form minimizing code

'--------------------------------------------------------------------------------
'NOTIFICATION ICON MESSAGES (used as dwMessage in Shell_NotifyIcon)
'Shell_NotifyIcon(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long
'--------------------------------------------------------------------------------
'Adds an icon to the status area. The hWnd and uID members of the NOTIFYICONDATA
'structure will be used to identify the icon in later calls to Shell_NotifyIcon.
Private Const NIM_ADD As Long = &H0

'Modifies an icon in the status area. Uses the hWnd and uID members of the
'NOTIFYICONDATA structure to identify the icon to be modified.
Private Const NIM_MODIFY As Long = &H1

'Deletes an icon from the status area. Uses the hWnd and uID members of the
'NOTIFYICONDATA structure to identify the icon to be deleted.
Private Const NIM_DELETE As Long = &H2

'Returns focus to the taskbar notification area. Taskbar icons should use this
'message when they have completed their user interface operation. For example, if
'the taskbar icon displays a shortcut menu, but the user presses ESC to cancel it,
'use NIM_SETFOCUS to return focus to the taskbar notification area.
'Shell32.dll version 5.0 and later only.
Private Const NIM_SETFOCUS As Long = &H3

'Instructs the taskbar to behave according to the version number specified in the
'uVersion member of the structure pointed to by lpdata. This message allows you to
'specify whether you want the version 5.0 behavior found on Microsoft Windows 2000
'systems, or the behavior found on earlier Shell versions. The default value for
'uVersion is 0, indicating that the original Windows 95 notify icon behavior should
'be used. Shell_NotifyIcon returns TRUE if the version was successfully changed,
'or FALSE if the requested version is not supported.
'Shell32.dll version 5.0 and later only.
Private Const NIM_SETVERSION As Long = &H4
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'WINDOW MESSAGES
'--------------------------------------------------------------------------------
Private Const WM_MOUSEFIRST As Long = &H200
Private Const WM_MOUSEMOVE As Long = &H200
Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Const WM_LBUTTONDBLCLK As Long = &H203
Private Const WM_RBUTTONDOWN As Long = &H204
Private Const WM_RBUTTONUP As Long = &H205
Private Const WM_RBUTTONDBLCLK As Long = &H206
Private Const WM_MBUTTONDOWN As Long = &H207
Private Const WM_MBUTTONUP As Long = &H208
Private Const WM_MBUTTONDBLCLK As Long = &H209
Private Const WM_MOUSEWHEEL As Long = &H20A
Private Const WM_XBUTTONDOWN As Long = &H20B 'for windows 2000 and up
Private Const WM_XBUTTONUP As Long = &H20C 'for windows 2000 and up
Private Const WM_XBUTTONDBLCLK As Long = &H20D 'for windows 2000 and up
Private Const WM_MOUSELAST As Long = &H209 'for windows 2000 and up
'--------------------------------------------------------------------------------

'--------------------------------------------------------------------------------
'WINDOW FIELD OFFSETS (used as nIndex in GetWindowLong)
'GetWindowLong(ByVal hwnd As Long, ByVal nIndex As Long) As Long
'--------------------------------------------------------------------------------
Private Const GWL_EXSTYLE As Long = (-20) 'Retrieves the extended window styles.
Private Const GWL_STYLE As Long = (-16) 'Retrieves the window styles.
Private Const GWL_WNDPROC As Long = (-4) 'Retrieves the address of the window procedure, or a handle representing the address of the window procedure. You must use the CallWindowProc function to call the window procedure.
Private Const GWL_HINSTANCE As Long = (-6) 'Retrieves a handle to the application instance.
Private Const GWL_HWNDPARENT As Long = (-8) 'Retrieves a handle to the parent window, if any.
Private Const GWL_ID As Long = (-12) 'Retrieves the identifier of the window.
Private Const GWL_USERDATA As Long = (-21) 'Retrieves the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.
'for Dialog Box hwnd's only
Private Const DWL_DLGPROC As Long = 4 'Retrieves the address of the dialog box procedure, or a handle representing the address of the dialog box procedure. You must use the CallWindowProc function to call the dialog box procedure.
Private Const DWL_MSGRESULT As Long = 0 'Retrieves the return value of a message processed in the dialog box procedure.
Private Const DWL_USER As Long = 8 'Retrieves extra information private to the application, such as handles or pointers.
'--------------------------------------------------------------------------------

Private nid As NOTIFYICONDATA
Private NOTIFYICONDATA_SIZE As Long
Private systray_old_window_procedure As Long

Private form_left_pos As Long
Private form_top_pos As Long
Private form_width As Long
Private form_height As Long
Private form_state As Integer
Private systray_form As Form



Public Function add_system_tray_icon(ByRef frm As Form) As Long
Set systray_form = frm

'set up system tray icon
If NOTIFYICONDATA_SIZE = 0 Then
If (IsShellVersion(6) = True) Then
NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V3_SIZE '6.0 structure size
ElseIf (IsShellVersion(5) = True) Then
NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V2_SIZE 'pre-6.0 structure size
Else
NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V1_SIZE 'pre-5.0 structure size
End If
End If
nid.cbSize = NOTIFYICONDATA_SIZE 'size of the NID type
nid.hwnd = systray_form.hwnd 'Handle of the window to receive notification messages
nid.uID = 0 'Application-defined identifier of the taskbar icon
nid.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP 'Flags indicating which of the other structure members contain valid data
nid.hIcon = systray_form.Icon 'Handle of the taskbar icon to add, modify, or delete
nid.szTip = systray_form.Caption & vbNullChar 'tooltip text (If NOTIFYICONDATA_SIZE = NOTIFYICONDATA_V1_SIZE then max size = 64 else max size = 128)
nid.uCallbackMessage = 1024 'Custom message sent whenever the mouse acts on the systray icon

'add the system tray icon
add_system_tray_icon = Shell_NotifyIcon(NIM_ADD, nid)

'subclass the form
If (systray_form.hwnd <> 0) Then
systray_old_window_procedure = SetWindowLong(systray_form.hwnd, GWL_WNDPROC, AddressOf systray_new_window_procedure)
End If
End Function

Public Sub remove_system_tray_icon()
'un-subclass
If (systray_old_window_procedure <> 0) And (systray_form.hwnd <> 0) Then
SetWindowLong systray_form.hwnd, GWL_WNDPROC, systray_old_window_procedure
systray_old_window_procedure = 0
End If

'remove the system tray icon
Call Shell_NotifyIcon(NIM_DELETE, nid)
End Sub

Public Sub set_system_tray_tooltip(text As String)
nid.cbSize = Len(nid)
nid.szTip = text & vbNullChar
Call Shell_NotifyIcon(NIM_MODIFY, nid)
End Sub

Public Sub set_system_tray_icon(IconHandle As Long)
nid.cbSize = Len(nid)
nid.hIcon = IconHandle
Call Shell_NotifyIcon(NIM_MODIFY, nid)
End Sub

Private Function systray_new_window_procedure(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
Select Case hwnd
Case systray_form.hwnd
Select Case uMsg
Case nid.uCallbackMessage
'uncomment the messages you use below and add your code
Select Case lParam
'Case WM_RBUTTONDBLCLK
'Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
'SetForegroundWindow (Me.hwnd)
'Me.PopupMenu mnuMyMenu

'Case WM_LBUTTONDBLCLK
'Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
If systray_form.WindowState = vbMinimized Then
LoadFormPosition
Else
SaveFormPosition systray_form.Left, systray_form.Top, systray_form.Height, systray_form.Width, systray_form.WindowState
systray_form.WindowState = vbMinimized
systray_form.Hide
End If

End Select
systray_new_window_procedure = 0
Case Else
systray_new_window_procedure = CallWindowProc(systray_old_window_procedure, hwnd, uMsg, wParam, lParam)
End Select 'End Select Case uMsg
Case Else
systray_new_window_procedure = CallWindowProc(systray_old_window_procedure, hwnd, uMsg, wParam, lParam)
End Select 'End Select Case hWnd
End Function

Public Sub SaveFormPosition(left1 As Long, top1 As Long, height1 As Long, width1 As Long, window_state1 As Integer)
form_state = window_state1
'only save the form's coordinates if it's not minimized
If window_state1 <> vbMinimized Then
form_left_pos = left1
form_top_pos = top1
form_height = height1
form_width = width1
End If
End Sub

Public Sub LoadFormPosition()
If Not systray_form Is Nothing Then
If form_state = vbMaximized Then
systray_form.WindowState = vbMaximized
systray_form.Show
ElseIf form_state = vbMinimized Then
systray_form.WindowState = vbMinimized
Else
systray_form.WindowState = vbNormal
systray_form.Show
systray_form.Left = form_left_pos
systray_form.Top = form_top_pos
systray_form.Height = form_height
systray_form.Width = form_width
End If
End If
End Sub



Private Function IsShellVersion(ByVal version As Long) As Boolean
'returns True if the Shell version (shell32.dll) is equal or later than 'version'
Dim nBufferSize As Long
Dim nUnused As Long
Dim lpBuffer As Long
Dim nVerMajor As Integer
Dim bBuffer() As Byte
Const sDLLFile As String = "shell32.dll"
nBufferSize = GetFileVersionInfoSize(sDLLFile, nUnused)
If nBufferSize > 0 Then
ReDim bBuffer(nBufferSize - 1) As Byte
Call GetFileVersionInfo(sDLLFile, 0&, nBufferSize, bBuffer(0))
If VerQueryValue(bBuffer(0), "\", lpBuffer, nUnused) = 1 Then
CopyMemory nVerMajor, ByVal lpBuffer + 10, 2
IsShellVersion = nVerMajor >= version
End If 'VerQueryValue
End If 'nBufferSize
End Function

Waynio
07-12-2009, 07:51 PM
Wow :eek: Mach, that is one hell of a beautiful mod 10/10 have a rep from me :banana:.

My mods are so plain & average boxes lol, hopefully thou some day I'll make a great looking one, so much to learn before that day comes thou :).

Mach
07-13-2009, 01:47 AM
Thanks Waynio. It just takes time and persistence. This mod took me over a year and half, mostly because I didn't know much to begin with. Over that time, I learned how to:

solder
remove & crimp molex pins
wire circuits & glow wire
etch copper
work with styrene
polish bakelite
use waterslide labels
airbrush
laser cut metal
window a CD
apply TIM


Plan, ask questions, google, and be willing to break alot. It just takes time :) I'm sure you'll mod something that'll blow this out of the water.

Yemerich
09-12-2009, 09:20 AM
Hail Mach!

I came into this log by a fortunate accident from another forum that I am member of. And after seeing the first pages, I felt the urge to become a menber in this comunity too :D

First I really need to congratulate for your work! Truly a master piece.

Second I wish to say that this wLog must be one of the most instructives (if not THE most instructive) I ever saw.

But something scaped my (limited) eletronics compreension. In the diagram below, the RL1 and RL2 are relays, correct? what are the specifications on them?

Another thing I fail do understand is how this circuit is wired to the DVD drive?

http://lh6.ggpht.com/MachModAlbum/SPhlyD4F3lI/AAAAAAAACpU/Ub4Qs1Vi0b4/s800/circuit.jpg

I am considering using this thing in my upcoming mod and I really apreciate any help :D

Thanks

Mach
09-12-2009, 12:43 PM
Welcome to TBCS, Yemerich! Thanks, glad that you like the mod.

No the circuit didn't work. It stayed energized and held the relay open. Worked in simulation tho. ;) 486Hawk did get a circuit working (http://www.austinmodders.com/modules.php?name=Forums&file=viewtopic&t=1467).

I wound up using a phidgets board 8/8/0 and a 0/0/4 to control lights, temperature readings, volume knob (usb knob actually), and drive. I'd use an arduino pro mini with relays if I was to do it over to save space.

http://lh6.ggpht.com/_UdQdiSb7gT4/SPJd49lEanI/AAAAAAAACnY/6g-nxpi1bC8/s800/IMG_4407.JPG

Regarding how the circuit was supposed to be hooked, there's 2 buttons/switches that need to be triggered to simulate the tray opening. The first is the front button then followed by the tray open switch at the back of the drive on the controller board. The front button is triggered momentarily and the tray open is held open until close. Upon close, the tray open switch is closed and held. I wired it so the relay was setup with the switch Normally Closed (NC)

The whole thing was then tied into a microswitch on the drive lid that when open would trigger the open sequence above and upon close would trigger the close sequence.

To make this all work, wires were soldered to all the switches and tied into the phidgets boards for control.

I highly recommend Lite-on Sata drive that I linked above for this mod as its 10x easier to solder than the other drives that I encountered

Yemerich
09-12-2009, 06:45 PM
Thanks Mach :D

But I still don't understand. I was lookin into 486Hawk and still didn't get it. I will try to figure that out in that forum :D

Thanks again anyway :)

DonT-FeaR
09-12-2009, 10:54 PM
looking good!

nevermind1534
09-12-2009, 11:12 PM
looking good!

:think:

?

blueonblack
09-13-2009, 01:27 AM
looking good!

Don't mind him, I think he has a macro program written that he uses to add that to random open worklogs. :D

Mach
09-13-2009, 09:50 PM
Too funny...:D:D:D

DonT-FeaR
09-14-2009, 04:19 AM
lol my bad. posted in wrong window

msmrx57
12-14-2010, 02:52 PM
I also posted a thread in the chatterbox section but, WOOOHOOOO Froont page of CPU!!! Congrats!!! :banana::banana:

http://img814.imageshack.us/img814/9124/picture012et.jpg (http://img814.imageshack.us/i/picture012et.jpg/)

Mach
12-14-2010, 03:10 PM
Thanks! The folks at CPU did a first class job with the story and the layout. I'm pretty stoked myself!

SXRguyinMA
12-14-2010, 03:23 PM
nice!

BS Mods
12-14-2010, 10:36 PM
I recently got a copy of the mag at a lan and that thing just jumps off the page and forces you to read about it.

Completely 100% awesomeness. :)