Archive for October, 2009

usbSimStepper PCBs have arrived

Tuesday, October 27th, 2009

I designed a dual stepper motor controller that interfaces to a computer via USB for use in my flight simulator. These boards will drive various instruments, such as my airspeed indicator. This is the first time I have used Seeed Studio for PCBs and I am very please so far with the end result. The total cost was right at $50 for 11 of these boards which measure about 3 inches square.

usbSimStepper01 usbSimStepper02 usbSimStepper03


Here is one of the boards mostly populated with parts and installed on my home made airspeed indicator.



Update: There were a couple of minor errors on the board layout. Here is an updated schematic.

Standard Linux/Unix error codes

Tuesday, October 27th, 2009

As a System Administrator I will often come across a system error code in a log file and need to look up what it means. I don’t know about you, but I don’t know that error 107 is “Transport endpoint is not connected” off the top of my head. My solution was a small Perl script that will print the error’s meaning or optionally all known error codes and their meaning. The perl code is below this listing of error codes.

001: Operation not permitted
002: No such file or directory
003: No such process
004: Interrupted system call
005: Input/output error
006: No such device or address
007: Argument list too long
008: Exec format error
009: Bad file descriptor
010: No child processes
011: Resource temporarily unavailable
012: Cannot allocate memory
013: Permission denied
014: Bad address
015: Block device required
016: Device or resource busy
017: File exists
018: Invalid cross-device link
019: No such device
020: Not a directory
021: Is a directory
022: Invalid argument
023: Too many open files in system
024: Too many open files
025: Inappropriate ioctl for device
026: Text file busy
027: File too large
028: No space left on device
029: Illegal seek
030: Read-only file system
031: Too many links
032: Broken pipe
033: Numerical argument out of domain
034: Numerical result out of range
035: Resource deadlock avoided
036: File name too long
037: No locks available
038: Function not implemented
039: Directory not empty
040: Too many levels of symbolic links
042: No message of desired type
043: Identifier removed
044: Channel number out of range
045: Level 2 not synchronized
046: Level 3 halted
047: Level 3 reset
048: Link number out of range
049: Protocol driver not attached
050: No CSI structure available
051: Level 2 halted
052: Invalid exchange
053: Invalid request descriptor
054: Exchange full
055: No anode
056: Invalid request code
057: Invalid slot
059: Bad font file format
060: Device not a stream
061: No data available
062: Timer expired
063: Out of streams resources
064: Machine is not on the network
065: Package not installed
066: Object is remote
067: Link has been severed
068: Advertise error
069: Srmount error
070: Communication error on send
071: Protocol error
072: Multihop attempted
073: RFS specific error
074: Bad message
075: Value too large for defined data type
076: Name not unique on network
077: File descriptor in bad state
078: Remote address changed
079: Can not access a needed shared library
080: Accessing a corrupted shared library
081: .lib section in a.out corrupted
082: Attempting to link in too many shared libraries
083: Cannot exec a shared library directly
084: Invalid or incomplete multibyte or wide character
085: Interrupted system call should be restarted
086: Streams pipe error
087: Too many users
088: Socket operation on non-socket
089: Destination address required
090: Message too long
091: Protocol wrong type for socket
092: Protocol not available
093: Protocol not supported
094: Socket type not supported
095: Operation not supported
096: Protocol family not supported
097: Address family not supported by protocol
098: Address already in use
099: Cannot assign requested address
100: Network is down
101: Network is unreachable
102: Network dropped connection on reset
103: Software caused connection abort
104: Connection reset by peer
105: No buffer space available
106: Transport endpoint is already connected
107: Transport endpoint is not connected
108: Cannot send after transport endpoint shutdown
109: Too many references: cannot splice
110: Connection timed out
111: Connection refused
112: Host is down
113: No route to host
114: Operation already in progress
115: Operation now in progress
116: Stale NFS file handle
117: Structure needs cleaning
118: Not a XENIX named type file
119: No XENIX semaphores available
120: Is a named type file
121: Remote I/O error
122: Disk quota exceeded
123: No medium found
124: Wrong medium type
125: Operation canceled


# print out system error strings

use strict;
use warnings;

my $errText = "";

if(!defined($ARGV[0])) {
    for ($! = 1; $! <= 10000; $!++) {
        $errText = $!;
        if(!($! =~ m/^unknown error/i)) {
            printf("%03d: %s\n", $!, $errText);
else {
    $! = $ARGV[0];
    $errText = $!;
    printf("%03d: %s\n", $!, $errText);

Instrument panel rebuild

Monday, October 26th, 2009

I recently came across some free .125 aluminum and decided to rebuild my Masonite instrument panel. Aluminum is fairly easy to work with using basic power tools. I cut out the shapes on a band saw and drilled the instrument cutouts with a hole saw. There are more holes to drill and I need to design some kind of support structure to mount the panels.

panel01 panel02

JoystickButtonTest utility

Wednesday, October 21st, 2009

The joystick card I am using for my flight simulator has a lot of buttons (112). By default the Windows control panel for game controllers only displays the status of 32 buttons. I wanted a way to see the status of all the buttons so I wrote this little utility called JoystickButtonTest. What an original name!

A zip file with the executable and dll as well as links to the source code are below. This is released as open source with no guarantees it will work on your computer. It does require the .Net version 3.5 libraries and a recent version of DirectX.



Visual C# Source:

The JoystickInterface.dll is based on code by M Harris found here: