Hi all, I've been building an APRS tracker for Raspberry Pi and other small SBCs, and (mainly because I've been doing this for a whole bunch of ADSB/ACARS/AIS-related software as well), I have created a containerized version of this. The Docker container includes GPSD (to capture GPS data from a USB-based GPS dongle), Chrony (to set the system time based on the GPS data), and (of course) DireWolf configured as a tracker. The advantage of Docker is that it creates a (sort-of) VM environment that is easy to configure, deploy, and maintain/update. My idea was to automate the configuration as much as possible. For "normal" deployments:
- the container figures out the soundcard config
- you can (in most cases) set the TX and RX audio levels with an environment parameter as simple %full-scale. This takes away the need to do much sleuthing with `alsamixer` and the like.
- it detects which USB2Serial port the GPS is using
- it monitors the serial port as I found that my GPS randomly disconnects and reconnects to a different /dev/ttyACMx port
- it abstracts several of the necessary APRS tracker parameters into the `docker-compose.yml` config file
I've set it up so all data is written to a minimal set of directories that can easily be mapped to `tmpfs` (RAM), so we can lock down the rest of the OS to protect the SD card when the SBC goes down because the car power goes away. I've tested it (a bit) on Raspi3B+, Raspi4B, LePotato, and OrangePi boards, using Raspberry Pi OS (32 and 64 bits), DietPi (arm64), and "pure" minimalist Debian (on the LePotato board). They all work more or less the same. So far so good and the basics work fine. There are a few things I still want to tackle:
- I need to figure out what is causing these random disconnects/reconnects of the GPS. Maybe it's just because it's a cheap dongle?
- My soundcard dongle will only work in RX sampling rate of 48k. The only way I get DireWolf to decode is by adding `-r 48000` to the command line. I have not been able to figure out how to lower the sampling rate of the audio device
- Right now, only an `armhf`, `arm64`, and `amd64` image is available. Specifically, there's no `armel` image which makes the container incompatible with some of the older/lower-end Raspi's. This has nothing to do with DireWolf, it's related to something else that I simply haven't prioritized to solve (specifically, I use S6 version 3 which doesn't work by default on `armel` or `i386`)
- I need to pay some attention to my hardware. The Baofeng UV-5R I'm using with APRS-K2 cable and Vox for PTT control is obviously nowhere close to ideal
- Need to "harden" the OS so it's safe with hard power-downs
If you are interested, feel free to take a look here:?? 73, Ramon KX1T
|
May I ask a few questions? What is your base setup for your docker dev? PI? OS? Docker version (IO vs CE)?? RAM? What is your docker image using for OS? I would like to test. I have several Pi4s, but they are heavily in use. I have a nice Lenovo IdeaPad III upgraded to 36GB RAM, 1 TB NVME, running Debian 11 (Bullseye) and docker.io. (It also has VirtualBox, and I am getting ready to install KVM (qemu) for other testing. I can easily add your image to my environment, I have a nice USB dongle for GPS and a USB2 to Ethernet adapter when needed.? If you have any other suggestions for hardware or software to test, please let me know.
|
Ramon, VERY cool! This would appear to be a very painless way to install for people who are less than agile with Linux. The hardening of the OS would be excellent as I had my station fail, and the reason was not readily evident. I am using a Pi 1 with an external soundcard USB dongle, homebrew interface, and a mobile radio to provide a 2-way Igate for my area. I suspect that either there were too many writes to the SD card or a few hard downs messed up the OS. I put the latest OS and Direwolf back on and reconfigured and everything was good again.
Your project, if I understand it correctly, would alleviate some of the down time and simplify an install or re-install.
You could get away from the VOX if you mod a CM-108 for PTT, I'm thinking.
Great work!
toggle quoted message
Show quoted text
On Fri, Nov 17, 2023 at 6:43?AM Ramon Kolb < ramonkolb@...> wrote: Hi all,
I've been building an APRS tracker for Raspberry Pi and other small SBCs, and (mainly because I've been doing this for a whole bunch of ADSB/ACARS/AIS-related software as well), I have created a containerized version of this. The Docker container includes GPSD (to capture GPS data from a USB-based GPS dongle), Chrony (to set the system time based on the GPS data), and (of course) DireWolf configured as a tracker. The advantage of Docker is that it creates a (sort-of) VM environment that is easy to configure, deploy, and maintain/update.
My idea was to automate the configuration as much as possible. For "normal" deployments:
- the container figures out the soundcard config
- you can (in most cases) set the TX and RX audio levels with an environment parameter as simple %full-scale. This takes away the need to do much sleuthing with `alsamixer` and the like.
- it detects which USB2Serial port the GPS is using
- it monitors the serial port as I found that my GPS randomly disconnects and reconnects to a different /dev/ttyACMx port
- it abstracts several of the necessary APRS tracker parameters into the `docker-compose.yml` config file
I've set it up so all data is written to a minimal set of directories that can easily be mapped to `tmpfs` (RAM), so we can lock down the rest of the OS to protect the SD card when the SBC goes down because the car power goes away. I've tested it (a bit) on Raspi3B+, Raspi4B, LePotato, and OrangePi boards, using Raspberry Pi OS (32 and 64 bits), DietPi (arm64), and "pure" minimalist Debian (on the LePotato board). They all work more or less the same.
So far so good and the basics work fine. There are a few things I still want to tackle:
- I need to figure out what is causing these random disconnects/reconnects of the GPS. Maybe it's just because it's a cheap dongle?
- My soundcard dongle will only work in RX sampling rate of 48k. The only way I get DireWolf to decode is by adding `-r 48000` to the command line. I have not been able to figure out how to lower the sampling rate of the audio device
- Right now, only an `armhf`, `arm64`, and `amd64` image is available. Specifically, there's no `armel` image which makes the container incompatible with some of the older/lower-end Raspi's. This has nothing to do with DireWolf, it's related to something else that I simply haven't prioritized to solve (specifically, I use S6 version 3 which doesn't work by default on `armel` or `i386`)
- I need to pay some attention to my hardware. The Baofeng UV-5R I'm using with APRS-K2 cable and Vox for PTT control is obviously nowhere close to ideal
- Need to "harden" the OS so it's safe with hard power-downs
If you are interested, feel free to take a look here:??
73,
Ramon KX1T
|
Hi Kevin,
What is your base setup for your docker dev? PI? OS? Docker version (IO vs CE)?? RAM?
- For development, I generally use the Github Desktop on my Macbook, and I started out building things locally on the Pi in docker-compose using the `build:` directive. Once things stabilized a bit, I added a bunch of GH Actions to do some simple build automation tasks, and now I rely on Github Actions to auto-build the container whenever I push something to the repository. I'm building this for armhf (armv7), arm64, and amd64 (Intel). It currently does NOT support i386 (32-bits Intel) nor armel (armv6). I've tested it mainly in arm64, but I see no reason that it wouldn't run on any of the other systems.
What is your docker image using for OS?
- For the host system, personally I like DietPi (Debian Bookworm), but if you use our docker-install script, you should be good to run this on any Debian variant from Buster or later (and maybe even Stretch!). (The docker-install script makes sure that you are using a correct version of libseccomp2 that is needed to run "modern" containers). - For the container itself, we (as the sdr-enthusiasts group) have created and maintained a set of Base Images that use debian-slim as their base and that use S6 for container management. I am using that as a base image for the container
I would like to test. I have several Pi4s, but they are heavily in use.
- Same here. I mean, just look at what my combined AIS/ADS-B/ACARS/VDL-M2 receiver station looks like -???? - I think I own or operate about 10 Pi's across 4 locations, several of which are remote. My "main" purpose has been aircraft tracking and data collection (3 locations in Massachusetts, 1 in the Netherlands, and helping operate some friends their stuff in the UK and Spain). I've strayed a bit away from that with AIS (ship data) some online Geiger counters for background radiation ( and )
I have a nice Lenovo IdeaPad III upgraded to 36GB RAM, 1 TB NVME, running Debian 11 (Bullseye) and docker.io. (It also has VirtualBox, and I am getting ready to install KVM (qemu) for other testing. I can easily add your image to my environment, I have a nice USB dongle for GPS and a USB2 to Ethernet adapter when needed.?If you have any other suggestions for hardware or software to test, please let me know.
So this aprs-tracker project was mainly meant as a pain-free way to experiment with an APRS tracker, so it relies heavily on getting the GPS interface to work, taking away the pain of setting audio with `alsamixer`, and creating an abstraction layer to easily configure some of the most used direwolf parameters. I am sure you can 'bend' things to use it for something else, but I haven't done that. Hardware-wise, I've used what I have here. A cheap G-Mouse GPS (ublox chip), a cheap Baofeng radio and APRS-K2 cable, and a cheap sound-card dongle with TRRS connector that directly works with the soundcard. For now, I am using wifi to connect to the internet so pulling and updating containers is very easy. I see no reason why things shouldn't run decently on your Lenovo with Debian 11. I mean -- just copy the file into a new directory (suggest: /opt/aprs), edit it, do `docker compose up -d`, and watch the container logs. That shouldn't take you more than 5 minutes or so? Ramon
|
On Fri, Nov 17, 2023 at 07:26 AM, Gil Rand wrote:
Ramon, VERY cool! This would appear to be a very painless way to install for people who are less than agile with Linux. The hardening of the OS would be excellent as I had my station fail, and the reason was not readily evident. I am using a Pi 1 with an external soundcard USB dongle, homebrew interface, and a mobile radio to provide a 2-way Igate for my area. I suspect that either there were too many writes to the SD card or a few hard downs messed up the OS. I put the latest OS and Direwolf back on and reconfigured and everything was good again.
Your project, if I understand it correctly, would alleviate some of the down time and simplify an install or re-install.
You could get away from the VOX if you mod a CM-108 for PTT, I'm thinking.
Great work!
Hi Gil, My experience with aircraft tracking (many GBs of data daily!) is that most of my SD cards, even the "endurance" ones, last a maximum of about 2 years. You can see when they are dieing because the IOWAIT cycles go up dramatically; when you see that you have a very short time to get stuff off ;) This is one of the reasons that I containerized everything and keep docker configs & persistent data inside a single directory tree (Docker lets you do that easily). For most of my internet-connected station, I do nightly backups (using my Google Drive account for that) of only that portion of the data that is important. That way, rebuilding a Pi and restoring it to the previous state can be done in about 15-20 minutes, including flashing a clean OS onto a SD card.? As for Docker - it does add a little bit overhead to the system (mainly in disk usage and a minute amount of CPU to manage the containers). What you get back for it, is a quasi-virtualized environment where you can run sets of programs (containers) in their own environment. You don't have to "build" or "create" that container yourself or install software inside of it - this is all done through "pulling" that container and adding your configs to a standard configuration file. (There are options to do many things manually as well, but that's what I tried to avoid!). All you need to do is to tell the system to bring the container "up", and it will take care of the rest for you. If there are software changes (the container maintainer brings out a new version, etc.), all you need to do is tell the system to "pull" the new version of the container and start it. The management of replacing the old container with the new one, etc. is all done automatically for you.? As a result, Docker is ideal for running a bunch of disparate things on a single machine at the same time, without these things interfering with each other. It's also ideal for "maintaining" your software, since upgrading to new versions is done by a simple "docker compose pull" command.? A good friend of mine wrote a primer on how to do things with Docker. It's focused on creating aircraft ADSB receivers and feeding that data to FlightAware, FR24, and a bunch of other aggregators, however it's a great thing to read up on even if you don't want to do that:? Enough about Docker and code development -- I need to start reading up on the CM108 PTT thing and how to make a simple interface between my Baofeng (POS) handheld and the sound card. I'm using the APRS-K2 cable now, and as expected, the TXTail is atrocious. --Ramon kx1t, Belmont MA, USA
|
Hi Ramon, I used these instructions as a baseline for modding a CM-108. It's a bit of very small work (parts are tiny), and I'm an old fart, but I have the right tools for the job, and a good magnifier light. I connected the audio in, out and PTT directly to the cm-108 by cutting a Baofeng mic/headphone cable apart so I had the molded plug and all the associated connections. Unfortunately, I never applied polish to the job and dressed it up, but I did have it working fine, on a Pi0W, and a UV-5R. I VERY much like the UV-5R as I am not a radio snob, and if it works, it works. I used the marrold instructions as a guideline and I changed them a bit too. I added an optoisolator directly to the CM-108 for the PTT and isolation protection between the radio and card/Pi. The negative connection is common to all of the parts. I got a bit of flack for unknown reasons when I tried to help out others by posting my PTT circuit on here, so I stopped. Questions about WHY I used a resistor instead of leaving an open collector output, or my use of the 'incorrect' label. If you don't know what I mean, you don't understand electronics enough to build it, so don't.
As I see it the biggest downside to using a UV-5R, or any other handheld is the adjustment of the levels for audio in/out. I have used several UV-5Rs for APRS. I use the 12v automobile cigarette lighter power supply, pop it apart and mount an Argent Data OT3-mini inside the adapter housing with the regulator. The above mentioned cable for the mic/headphone gets used again and this makes a package that clips on to the HT like the battery, plug in the molded plug and supply 12vdc, set levels, good to go (you have to know where to set the volume knob). I have not, but a GPS could be connected to the OT3-mini, for tracking, as well. The stations I have built like this are used in fixed locations for battery, temperature, fill-in applications. 73.
toggle quoted message
Show quoted text
On Fri, Nov 17, 2023 at 10:48?AM Ramon Kolb < ramonkolb@...> wrote: On Fri, Nov 17, 2023 at 07:26 AM, Gil Rand wrote:
Ramon, VERY cool! This would appear to be a very painless way to install for people who are less than agile with Linux. The hardening of the OS would be excellent as I had my station fail, and the reason was not readily evident. I am using a Pi 1 with an external soundcard USB dongle, homebrew interface, and a mobile radio to provide a 2-way Igate for my area. I suspect that either there were too many writes to the SD card or a few hard downs messed up the OS. I put the latest OS and Direwolf back on and reconfigured and everything was good again.
Your project, if I understand it correctly, would alleviate some of the down time and simplify an install or re-install.
You could get away from the VOX if you mod a CM-108 for PTT, I'm thinking.
Great work!
Hi Gil,
My experience with aircraft tracking (many GBs of data daily!) is that most of my SD cards, even the "endurance" ones, last a maximum of about 2 years. You can see when they are dieing because the IOWAIT cycles go up dramatically; when you see that you have a very short time to get stuff off ;) This is one of the reasons that I containerized everything and keep docker configs & persistent data inside a single directory tree (Docker lets you do that easily). For most of my internet-connected station, I do nightly backups (using my Google Drive account for that) of only that portion of the data that is important. That way, rebuilding a Pi and restoring it to the previous state can be done in about 15-20 minutes, including flashing a clean OS onto a SD card.?
As for Docker - it does add a little bit overhead to the system (mainly in disk usage and a minute amount of CPU to manage the containers). What you get back for it, is a quasi-virtualized environment where you can run sets of programs (containers) in their own environment. You don't have to "build" or "create" that container yourself or install software inside of it - this is all done through "pulling" that container and adding your configs to a standard configuration file. (There are options to do many things manually as well, but that's what I tried to avoid!). All you need to do is to tell the system to bring the container "up", and it will take care of the rest for you. If there are software changes (the container maintainer brings out a new version, etc.), all you need to do is tell the system to "pull" the new version of the container and start it. The management of replacing the old container with the new one, etc. is all done automatically for you.? As a result, Docker is ideal for running a bunch of disparate things on a single machine at the same time, without these things interfering with each other. It's also ideal for "maintaining" your software, since upgrading to new versions is done by a simple "docker compose pull" command.? A good friend of mine wrote a primer on how to do things with Docker. It's focused on creating aircraft ADSB receivers and feeding that data to FlightAware, FR24, and a bunch of other aggregators, however it's a great thing to read up on even if you don't want to do that:?
Enough about Docker and code development -- I need to start reading up on the CM108 PTT thing and how to make a simple interface between my Baofeng (POS) handheld and the sound card. I'm using the APRS-K2 cable now, and as expected, the TXTail is atrocious.
--Ramon kx1t, Belmont MA, USA
|
Thanks for the advice, Gil! In the end, I purchased a ready-to-go combo soundcard+CM108+audio connectors+housing "dongle" from . Looks like I need to do some one-time programming of the chip, but that should be easy (my famous last words!). I'll update the Github Repo with my experience once I receive it.
The other thing I experimented with this morning is adding the telemetry of my cheap geiger counter (another one of my projects) to APRS. It should broadcast that now (and I'm checking to see it actually arrives)
The next problem I am running into is that my GPS and antenna are pretty close to each other, and when transmitting, the GPS dongle basically crashes due to the RF interference. Need to think about what to do about that as?I am concerned that?with?higher power in the car, things will be even worse!?
toggle quoted message
Show quoted text
On Sat, Nov 18, 2023 at 11:02?AM Gil Rand < gilrand@...> wrote: Hi Ramon, I used these instructions as a baseline for modding a CM-108. It's a bit of very small work (parts are tiny), and I'm an old fart, but I have the right tools for the job, and a good magnifier light. I connected the audio in, out and PTT directly to the cm-108 by cutting a Baofeng mic/headphone cable apart so I had the molded plug and all the associated connections. Unfortunately, I never applied polish to the job and dressed it up, but I did have it working fine, on a Pi0W, and a UV-5R. I VERY much like the UV-5R as I am not a radio snob, and if it works, it works. I used the marrold instructions as a guideline and I changed them a bit too. I added an optoisolator directly to the CM-108 for the PTT and isolation protection between the radio and card/Pi. The negative connection is common to all of the parts. I got a bit of flack for unknown reasons when I tried to help out others by posting my PTT circuit on here, so I stopped. Questions about WHY I used a resistor instead of leaving an open collector output, or my use of the 'incorrect' label. If you don't know what I mean, you don't understand electronics enough to build it, so don't.
As I see it the biggest downside to using a UV-5R, or any other handheld is the adjustment of the levels for audio in/out. I have used several UV-5Rs for APRS. I use the 12v automobile cigarette lighter power supply, pop it apart and mount an Argent Data OT3-mini inside the adapter housing with the regulator. The above mentioned cable for the mic/headphone gets used again and this makes a package that clips on to the HT like the battery, plug in the molded plug and supply 12vdc, set levels, good to go (you have to know where to set the volume knob). I have not, but a GPS could be connected to the OT3-mini, for tracking, as well. The stations I have built like this are used in fixed locations for battery, temperature, fill-in applications. 73.
On Fri, Nov 17, 2023 at 10:48?AM Ramon Kolb < ramonkolb@...> wrote: On Fri, Nov 17, 2023 at 07:26 AM, Gil Rand wrote:
Ramon, VERY cool! This would appear to be a very painless way to install for people who are less than agile with Linux. The hardening of the OS would be excellent as I had my station fail, and the reason was not readily evident. I am using a Pi 1 with an external soundcard USB dongle, homebrew interface, and a mobile radio to provide a 2-way Igate for my area. I suspect that either there were too many writes to the SD card or a few hard downs messed up the OS. I put the latest OS and Direwolf back on and reconfigured and everything was good again.
Your project, if I understand it correctly, would alleviate some of the down time and simplify an install or re-install.
You could get away from the VOX if you mod a CM-108 for PTT, I'm thinking.
Great work!
Hi Gil,
My experience with aircraft tracking (many GBs of data daily!) is that most of my SD cards, even the "endurance" ones, last a maximum of about 2 years. You can see when they are dieing because the IOWAIT cycles go up dramatically; when you see that you have a very short time to get stuff off ;) This is one of the reasons that I containerized everything and keep docker configs & persistent data inside a single directory tree (Docker lets you do that easily). For most of my internet-connected station, I do nightly backups (using my Google Drive account for that) of only that portion of the data that is important. That way, rebuilding a Pi and restoring it to the previous state can be done in about 15-20 minutes, including flashing a clean OS onto a SD card.?
As for Docker - it does add a little bit overhead to the system (mainly in disk usage and a minute amount of CPU to manage the containers). What you get back for it, is a quasi-virtualized environment where you can run sets of programs (containers) in their own environment. You don't have to "build" or "create" that container yourself or install software inside of it - this is all done through "pulling" that container and adding your configs to a standard configuration file. (There are options to do many things manually as well, but that's what I tried to avoid!). All you need to do is to tell the system to bring the container "up", and it will take care of the rest for you. If there are software changes (the container maintainer brings out a new version, etc.), all you need to do is tell the system to "pull" the new version of the container and start it. The management of replacing the old container with the new one, etc. is all done automatically for you.? As a result, Docker is ideal for running a bunch of disparate things on a single machine at the same time, without these things interfering with each other. It's also ideal for "maintaining" your software, since upgrading to new versions is done by a simple "docker compose pull" command.? A good friend of mine wrote a primer on how to do things with Docker. It's focused on creating aircraft ADSB receivers and feeding that data to FlightAware, FR24, and a bunch of other aggregators, however it's a great thing to read up on even if you don't want to do that:?
Enough about Docker and code development -- I need to start reading up on the CM108 PTT thing and how to make a simple interface between my Baofeng (POS) handheld and the sound card. I'm using the APRS-K2 cable now, and as expected, the TXTail is atrocious.
--Ramon kx1t, Belmont MA, USA
|
Hi Ramon,
What GPS USB dongle are you using with the pi? What's power consumption like?
Thanks, -Chris
|
Hi Chris,
I put a USB power meter in the 5V supply, and at peak (during boot time) it consumed about 650 mA (~3.25 W), after which it settled to about 350 mA (~1.75 W) on average. That was specifically: - LibreComputer LePotato SBC -?
- 64 Gb Sandisk Ultra SD card -?
- USB?soundcard -?
- USB GPS -
- USB Wifi dongle -?
- CPU running per its original profile (all of these boards manage CPU speed based on load requirements)
--Ramon
toggle quoted message
Show quoted text
On Sat, Nov 18, 2023 at 5:58?PM Christopher Molnar KO4YAW < cmolnar65@...> wrote: Hi Ramon,
What GPS USB dongle are you using with the pi? What's power consumption like?
Thanks, -Chris
|
Hi Ramon, I had a look at the AIOC, very cool! I would, of course, have to build it instead of buying one, 'cuz that's what I do. The hard way. I'm not 100% clear on the programming, but I did have a look at the GitHub and I think I could figure it out. It appears to fully support Linux, which I am trying to run exclusively here, so that's a relief. More things to think about....
toggle quoted message
Show quoted text
On Sat, Nov 18, 2023 at 4:26?PM Ramon Kolb < ramonkolb@...> wrote: Hi Chris,
I put a USB power meter in the 5V supply, and at peak (during boot time) it consumed about 650 mA (~3.25 W), after which it settled to about 350 mA (~1.75 W) on average. That was specifically: - LibreComputer LePotato SBC -?
- 64 Gb Sandisk Ultra SD card -?
- USB?soundcard -?
- USB GPS -
- USB Wifi dongle -?
- CPU running per its original profile (all of these boards manage CPU speed based on load requirements)
--Ramon
On Sat, Nov 18, 2023 at 5:58?PM Christopher Molnar KO4YAW < cmolnar65@...> wrote: Hi Ramon,
What GPS USB dongle are you using with the pi? What's power consumption like?
Thanks, -Chris
|
Ramon: Sorry, never got notified you had replied.
I'm now digging into it on the Lenovo, prior to moving it into several other setups (Pi3B, VB VM docker host, XCP-NG VM Docker host. Got several DigiRig v1.9s as Xmas gifts, so setting them up, too. As I already use Chrony & GPSD in the home lab network, those are a breeze. I am also looking at your toolkit S6 to see how much I should devote to it. I am learning the XCP-NG Xen Orchestra process, too. I gave up on ProxMox as I never could get it to 'share' PCIe and USP properly.
Cow-a-bunga! (or is it: Cannonball!!!)
--
= = = =
? Kevin? --? KD9EFV
|
Hi Kevin -- haha that was a thread from more than a year ago! I kinda gave up on using a Raspi in the car, mainly because?I couldn't get the RFI down to the level that my? GPS and soundcard didn't crash whenever the transmitter was on. I tried some things (chokes, etc.) that helped a bit, but not enough to make a stable environment.
In the meantime, feel free to ask about using Docker environments on SBCs like the Raspberry Pi. I have a lot of experience with that: we formed a group of enthusiasts doing mostly aircraft tracking using SDR dongles, and we containerized all of our software. See if you are interested, or contact me off-list if you have any?questions.
Ramon kx1t
toggle quoted message
Show quoted text
Ramon: Sorry, never got notified you had replied.
I'm now digging into it on the Lenovo, prior to moving it into several other setups (Pi3B, VB VM docker host, XCP-NG VM Docker host. Got several DigiRig v1.9s as Xmas gifts, so setting them up, too. As I already use Chrony & GPSD in the home lab network, those are a breeze. I am also looking at your toolkit S6 to see how much I should devote to it. I am learning the XCP-NG Xen Orchestra process, too. I gave up on ProxMox as I never could get it to 'share' PCIe and USP properly.
Cow-a-bunga! (or is it: Cannonball!!!)
--
= = = =
? Kevin? --? KD9EFV
|