Device to divert printing to PDF - linux

I'm trying to build a device that is inserted between a client and a printer.
In the normal case this device should just allow the printing to occur as normal, but if a certain event happens it should instead divert the printing to a PDF file on disk.
In essence it should work as a print server that can decide where to send the data to be printed.
The problem is that I want to achieve this using an USB-A to USB-A cable between the client and the device, and the printer via USB to the device.
The device is at the moment a Raspberry Pie running Raspbian.
Printing from the Pie is tested using CUPS, so that works.
Now for the question(s):
How can I allow printing via USB cable from the client? Simply connecting the device and the client does not allow it to be recognised as a printer. CUPS does not seem to support this sharing option.
Can CUPS be configured to support sharing via USB?
Is there any other print software that supports this?
Is there another OS where this could be achieved easier?
Any input is appreciated!

Related

How to send feature-report to the HOST_PC via Linux USB_GADGET

I have this configuration of the devices HOST_PS <----> Transmitter<---- Touchscreen.
Currently on my transmitter I have created a composite USB gadget device which could contain up to 5 HID devices, (2Mouse, 2Keyboard, Touchscreen). HOST PC could enumerate all of them and everything is working properly. From transmitter side I am writing HID report data comeing from the touchscreen to the corresponding /dev/hidg device and Host PC acts correctly. The problem occurred when
I have bought a new usb_touchscreen.
Extracted the report descriptor from that touchscreen.
Pass the report descriptor and all the corresponding data(dev, no_out_endpoint, protocol, report_desc, report_length, subclass) to /sys/kernel/config/usb_gadget/Nhid/functions/hid.usb0/.
After all this steps the HOST_PC could enumerate the touchscreen properly but the tocushes doesn't work(I also know why).
HOST_PC printing this message hid-multitouch xxx:yyy:zzz.uuu: failed to fetch feature 7.
Some touchscreens using Feature reports for allowing the HOST to have configurable device. If I connect the Touchscreen directly to the PC I can see the following under the hood. I'll describe the final steps before sending the input reports from the touchscreen.
pc -> touchscreen (GetDescriptor(Report))
pc -> touchscreen (GetReport(Feature eport))
touchscreen ->pc (Input Report)This is already HID report that sends the touchscreen
The problem hid-multitouch xxx:yyy:zzz.uuu: failed to fetch feature 7 is though I am setting the report descriptor to USB_GADGET's HID device and HOST_PS enumerates it properly, I am not sending the feature report to the host as it requested in step 2 above.
QUESTION:
How to send feature report from device to HOST_PC, if the device is USB_GADGET composite HID device. In usual for sending the Input report (HID data) I am writing the incoming data from the touchscreen to the corresponding /dev/hidg<N> device.
NOTES:
The HOST_PC is Linux(Ubuntu, CentOS,... doesn't metter) and I ma not interested on Windows.
The Touchscreen works perfectly if I connect it to the PC directly.
I don't want to modify the touchscreen's report descriptor, remove feature report part and solve the problem like that.
PS:
I know this is a little bit complicated but Thanks in advance.
In case someone would have this kind of problem in future.
This is not a bug in Linux USB_GADGET driver but I would honestly say that it is a missing feature which is not implemented. This is a link to the place where the implementation wasn't done
https://github.com/torvalds/linux/blob/master/drivers/usb/gadget/function/f_hid.c#L652.
If someone wants to send feature_report(s) from device to HOST, than you probably will need to implement it in driver.
This is my modification to USB_GADGET driver that will allow to send feature reports to the HOST.
https://github.com/torvalds/linux/compare/master...AydinyanNarek:patch-1
PS. I don't have enough time to create pull request and other staff for applying this patch to the kernel. If someone would be interested on this than you can take this patch that I have created, polish the code and apply for a patch.

Raspbian - Read data from HID device

I got a measuring instrument which can measure light intensity and this instrument can be connected to a PC via USB.
I now want to be able to read the values from the device via a Raspberry.
When the instrument is connected to the Pi, it shows up when entering 'lsusb' to the terminal and it is also listed under '/dev/usb' as hiddev1
But how can i actually grab the data from the device?
When i enter 'sudo cat /dev/usb/hiddev1' nothing happens.
Thanks in advance for your help
Try using HIDAPI, a cross-platform library for accessing Human Interface Devices.

Emulate printer via inline usb port

I need to emulate/fake a printer (any printer) that is connected through a usb port without touching the hosting computer. The connection needs to be via some kind of inline connection.
What i mean is to connect something to the hosting computer usb port and connect the printer to that device on another port (or on wifi). The computer that will send the printing should not know the difference when sending a printing job and also no software should be installed on the printing computer.
I need it in order to add text to the print jobs (whether they are in PCL/Postcript/Any other format) in various places based on the text being printed.
I've found the Red Titan solution, but it's working on windows and I rather work on a Linux environment.
If there is a Linux software that can emulate a printer port and can be customized for any printer type, I could just program a Raspberry Pi/Any other device to do all the conversions and editing and send it to the printer.
I just haven't found any software that could do that via an inline usb.
Any help would be appreciated!

Teensy 2.0 / Atmega32u4 as Keyboard: Send and Receive

I'm currently working on a device which is able to work as a keyboard and communicate via Serial with a self-written software.
Now I have to install serial drivers (from Arduino) on different computers if I want to communicate with my application which I actually want to avoid.
Is there any other solution to solve this problem? Is it possible that my microcontroller works as a keyboard AND is able to send and receive data as HID device?
Thanks and greetings!
I actually do something similar with a 32u4, but it receives its serial over the built-in UART. I do this because it's linking between two separate systems. If it were only one system I could implement a 2nd interface. (Don't forget, a USB HID device must have an IN endpoint even if you are not using it.) Or you could just throw a $2 USB/TTL converter on and do it the same as I did.

How to use minicom to communicate via sms with my usb modem?

I am using a huawei e355 usb modem on linux. I would like to send my usb modem texts from my cell phone and would want my usb modem to store it in some log file and may be communicate back. How do I go about doing this?
I went through a lot of articles but they were more about setting up the modem rather than using it in this particular way.
The best option for your needs would be Gammu. You can download it here http://wammu.eu/. You can also get it over your paket manager.
There is a python API available which makes interacting with texts easier.
For your needs I would recommend you run the gammu-sms daemon (gammu-smsd) and have a script which interacts with the contents of your sms. Check the RunOnReceive variable in the /etc/gammu-smsdrc file.
Try http://www.question-defense.com/2010/07/27/use-minicom-for-linux-modem-dialup-at-command-testing.
This allows you to send and receive texts from the modem; you can then set a callback for what to do once a text is received. I'm currently working on something along these lines, too, so I don't have a complete answer, but this should get you started.

Resources