skudi / transfolio Goto Github PK
View Code? Open in Web Editor NEWFile transfer program for Atari Portfolio and Linux/Windows machines (with centronics port) and RaspberryPi (via gpio). Created by Klaus Peichl.
File transfer program for Atari Portfolio and Linux/Windows machines (with centronics port) and RaspberryPi (via gpio). Created by Klaus Peichl.
Transfolio 1.0 (Februar 2018) ----------------------------- Transfolio is a file transfer utility that connects a PC to the Atari Portfolio pocket computer over the parallel port. It communicates with the built-in file transfer software of the Portfolio. Contents of this package: README This file transfolio.exe Precompiled Windows executable (32 bit, command line) inpout32.dll 3rd party Library required by transfolio.exe transfolio.c Source code Makefile Linux Makefile transfolio Linux executable (x86) The full documentation is currently only available in German language at http://www.pofowiki.de/doku.php?id=software:vorstellung:exchanges:transfolio (c) 2018 by Klaus Peichl ([email protected])
I have a problem trying to get transfolio to open the usb parallel port I have.
debug log with strace:
execve("./transfolio", ["./transfolio", "-d", "/dev/usb/lp0", "-l", "c:\\"], 0x7fff0c22b600 /* 20 vars */) = 0 brk(NULL) = 0x55d235b24000 arch_prctl(0x3001 /* ARCH_??? */, 0x7fffe98819d0) = -1 EINVAL (Invalid argument) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1813d7e000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=22135, ...}, AT_EMPTY_PATH) = 0 mmap(NULL, 22135, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f1813d78000 close(3) = 0 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\2\0\0\0\0\0"..., 832) = 832 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48 pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0i8\235HZ\227\223\333\350s\360\352,\223\340."..., 68, 896) = 68 newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2216304, ...}, AT_EMPTY_PATH) = 0 pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784 mmap(NULL, 2260560, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1813b50000 mmap(0x7f1813b78000, 1658880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7f1813b78000 mmap(0x7f1813d0d000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bd000) = 0x7f1813d0d000 mmap(0x7f1813d65000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x214000) = 0x7f1813d65000 mmap(0x7f1813d6b000, 52816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1813d6b000 close(3) = 0 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1813b4d000 arch_prctl(ARCH_SET_FS, 0x7f1813b4d740) = 0 set_tid_address(0x7f1813b4da10) = 1297 set_robust_list(0x7f1813b4da20, 24) = 0 rseq(0x7f1813b4e0e0, 0x20, 0, 0x53053053) = 0 mprotect(0x7f1813d65000, 16384, PROT_READ) = 0 mprotect(0x55d2358e4000, 4096, PROT_READ) = 0 mprotect(0x7f1813db8000, 8192, PROT_READ) = 0 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0 munmap(0x7f1813d78000, 22135) = 0 newfstatat(1, "", {st_mode=S_IFREG|0644, st_size=2440, ...}, AT_EMPTY_PATH) = 0 getrandom("\x29\x2e\x73\x67\x91\x2f\x08\x6a", 8, GRND_NONBLOCK) = 8 brk(NULL) = 0x55d235b24000 brk(0x55d235b45000) = 0x55d235b45000 openat(AT_FDCWD, "/dev/usb/lp0", O_RDWR) = 3 write(2, "Waiting for /dev/usb/lp0 to beco"..., 48Waiting for /dev/usb/lp0 to become available...^M) = 48 ioctl(3, PPCLAIM, 0) = -1 ENOTTY (Inappropriate ioctl for device) write(2, "PPCLAIM: Inappropriate ioctl for"..., 40PPCLAIM: Inappropriate ioctl for device ) = 40 close(3) = 0 write(2, "Try 'fuser -m /dev/usb/lp0' to s"..., 70Try 'fuser -m /dev/usb/lp0' to see if other processes use the device. ) = 70 write(2, "Cannot open parallel port!\n", 27Cannot open parallel port! ) = 27 write(1, "Transfolio 1.0.1 - (c) 2018 by K"..., 44Transfolio 1.0.1 - (c) 2018 by Klaus Peichl ) = 44 exit_group(1) = ? +++ exited with 1 +++
So I got to the point that the adapter is visible in linux
Bus 001 Device 003: ID 1a86:7584 QinHeng Electronics CH340S Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x1a86 QinHeng Electronics idProduct 0x7584 CH340S bcdDevice 2.54 iManufacturer 0 iProduct 2 USB2.0-Print iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x004e bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 7 Printer bInterfaceSubClass 1 Printer bInterfaceProtocol 1 Unidirectional iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 2 bInterfaceClass 7 Printer bInterfaceSubClass 1 Printer bInterfaceProtocol 2 Bidirectional iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 2 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 255 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0004 1x 4 bytes bInterval 1 Device Status: 0x0000 (Bus Powered)
the exact output while running is
Waiting for /dev/usb/lp0 to become available...
PPCLAIM: Inappropriate ioctl for device
Try 'fuser -m /dev/usb/lp0' to see if other processes use the device.
Cannot open parallel port!
Transfolio 1.0.1 - (c) 2018 by Klaus Peichl
fuser -vm /dev/usb/lp0 shows
USER PID ACCESS COMMAND /dev/usb/lp0: root kernel mount /dev root 19 .rc.. kdevtmpfs
what am I missing, why is this a blocking issue?
there should be nothing accessing lp0 at the moment here, no idea why tmpfs is locking this
Thanks for your work! I was reverse engineering the FT.COM to see how the Atari Portfolio communicated to actually have a Pi serve files and I came across your awesome work. I learned a lot about the protocol.
However nowhere in your code or documentation do I see you mention that you should use a 5V to 3.3V level shifter for the inputs on the Pi. Sure they "may" survive 5V but they aren't designed for it.
A simple voltage divider with resistors would do fine a 1K and 2K resistor would do.
5V
|
R1 (1k)
|
----> GPIO
|
R2 (2k)
|
GND
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.