Setting up MIDI for CW

290 views
Skip to first unread message

Graeme Jury

unread,
May 2, 2020, 12:22:47 AM5/2/20
to SparkSDR
I have added the USBMIDI library to the Arduino IDE and compiled and uploaded sparkey.ino to an arduino nano.
On sparksdr I have got CW running from a keyboard and the macros but am unsure on how to set up the sparkey midi arduino nano so I can send key presses to sparksdr.
On the midi panel I have Action = Key; Control = 0; scale = 1; offset = 2
I am trying to send midi signals by grounding D2 or D3 on the nano as it appears from the code that the button pins are 2 and 3.

I guess that I have missed the boat somewhere and would appreciate some assistance with my settings please.

73, Graeme ZL2APV

Alan Hopper

unread,
May 2, 2020, 1:53:42 AM5/2/20
to SparkSDR
Hi Graeme,
I have the scale and offset set to the defaults of 0 and 1, the control has to be the number you see in the last midi message when you press the key. If you are not seeing anything in the last midi message then something is wrong.  Does a led flash when you ground d2 ?
73 Alan M0NNB

Graeme Jury

unread,
May 2, 2020, 2:52:20 AM5/2/20
to SparkSDR
Hi Alan,

Many thanks for your response
I might have the wrong .ino loaded as I see no code to flash an LED when a pin is grounded and I guess that you are referring to the LED on D13.
I am using gateware 20200425_71p1
On sparkSDR the Last midi message is '14_0:Midi Through Port-0'
I will look at your Iambic version and see if I should be using that.

73, Graeme

Graeme Jury

unread,
May 2, 2020, 2:54:57 AM5/2/20
to SparkSDR
I meant to say also that I can't find these

from sparkey.ino
// See midictrl.png in the example folder for the wiring diagram,
// as well as README.md.

-- Graeme

Graeme Jury

unread,
May 2, 2020, 3:26:14 AM5/2/20
to SparkSDR
Further information ...

I added the following to the sketch

void setup() {
  pinMode(LEDbutton, OUTPUT);
  digitalWrite(LEDbutton, LOW);
.
.
.
  for (int i=0; i<BUTTON_PIN_COUNT; ++i) {
    int down = isButtonDown(buttonPins[i]);

    if (down != buttonDown[i]) {
      sendNoteDown(0, 64 + i, down ? 127 : 0);
      buttonDown[i] = down;
      digitalWrite(LEDbutton, !digitalRead(LEDbutton));   
    }

This flashes the LED on grounding D2 ...  Hope it is useful.

73, Graeme ZL2APV

Alan Hopper

unread,
May 2, 2020, 5:18:00 AM5/2/20
to SparkSDR
Hi Graeme,
You should not need the iambic version but both should work. I'm afraid the reference to the png and readme are left over from the sample I copied. 
I see last midi message control 4160 value 127 0:Arduino Leonardo.
An led flashes for me whenever a midi message is sent, I guess the usb library does that.
What os are you using? I've only tested on windows but It works for Matthew on linux.
73 Alan M0NNB

Graeme Jury

unread,
May 2, 2020, 5:27:48 AM5/2/20
to SparkSDR
Hi Alan,

Very frustrating made worse by my not really knowing what I am doing but I am learning more by the minute. Yes I have been to the author's github and found the references but I don't think that it is a spark issue as I can't even get the USBMIDI loopback example file to work. I am using Linux Mint 19.3 but Linux supports midi so it should go. I have added myself to the group audio but maybe there is something else that I have to do.

On the loopback or your midi program I get no flashing light on a keypress and the loopback is supposed to output the raw data to a serial terminal at 9600 baud but no joy there so currently I am digging to see if I need to be in some other group or similar. Thanks for your time and sorry to bother you.

73, Graeme ZL2APV

Alan Hopper

unread,
May 2, 2020, 5:50:43 AM5/2/20
to SparkSDR
Hi Graeme,
sorry my linux skills are rather lacking in this department. There are people who have the midi working on linux here, hopefully one of them can help and I can add the solution to the help. I'll fire up a linux box and have a try later but I will be fumbling in the dark:).
73 Alan M0NNB

Graeme Jury

unread,
May 2, 2020, 5:56:50 AM5/2/20
to SparkSDR
Thanks Alan,

I think that I will call it a night as I seem to be going round in circles. Will have another try in the morning.

73, Graeme

Matthew

unread,
May 2, 2020, 7:57:10 AM5/2/20
to SparkSDR
On the Linux MIDI side of things, I don't recall doing anything clever at all. I had some issues with the Arduino side of things and getting the right libraries linked and then getting it to program properly. I went back to basics and got an LED to flash to prove I was putting the correct code into it.

Does an Arduino Nano support USBMIDI? I thought it had to use a Leonardo type device to work? One would hope it would fail to compile if not.

73 Matthew M5EVT.

Alan Hopper

unread,
May 2, 2020, 10:27:32 AM5/2/20
to SparkSDR
Hi Graeme,
I think Matthew might be right, I don't know what usbmidi does without proper midi support, it may fall back to serial in which case https://projectgus.github.io/hairless-midiserial/ might help. My long term plan is to allow serial midi directly ( for controllers with buttons and knobs as well as cw). I'll investigate USBMIDI further.

I'm also looking at adding Arduino programming into spark to make this easier to get going.

73 Alan M0NNB

Alan Hopper

unread,
May 2, 2020, 11:29:12 AM5/2/20
to SparkSDR
Hi Graeme,
I think USBMIDI tries to create a virtual usb port on devices without proper usb like the nano which I think just has a serial to usb device. This virtual usb probably could be made to work but requires hardware mods.  I don't think hairless will help unless the code is changed to use serial rather than midi, making this an option should be fairly simple.  
73 Alan M0NNB

Roger Critchlow

unread,
May 2, 2020, 11:32:07 AM5/2/20
to Alan Hopper, SparkSDR
Hmm, this is why I ended up using a Teensy 2.0 back when I made my first MidiKey, there were no plain Arduinos that implemented Midi over USB at that time.  All the Teensy's since then -- 2.0, 3.x, LC, and 4.0 -- have had USB device capability from the start.

My MidiKey is seen by SparkSDR once I click the enable box on the MIDI configuration pane.  I had already enabled the experimental features.  I can add MIDI events with the reported controls, but I couldn't get Spark to key from the MIDI.

-- rec -- ad5dz --

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sparksdr/3ad83e3c-fdaa-4924-b535-c8980a8b7265%40googlegroups.com.

Alan Hopper

unread,
May 2, 2020, 12:54:00 PM5/2/20
to SparkSDR
Hi Roger,
I have it on my todo list to get a Teensy and try your code, do you think it would run on a pro micro (leonardo clone)?
What values do you see with key up and key down in the midi settings dialog? I need to better document how to set this up.
73 Alan M0NNB
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+unsubscribe@googlegroups.com.

Roger Critchlow

unread,
May 2, 2020, 4:58:47 PM5/2/20
to Alan Hopper, SparkSDR
Hi Alan --

I have no idea if the Teensy code might work on the Pro Micro.  Paul Stoffregen has been rolling his own USB stack on the Teensy's for years.  He's contributed lots to the core Arduino project, but maybe the USB code is too tied into his bootloader.  Pity I didn't check my mail an hour ago, I was just in a store which might have sold me a Pro Micro to try out this afternoon.  I'll order one.

Looking at sparkey.ino, I tried compiling for the Teensy 3.2 and it immediately choked on <usbmidi.h>.  Now I can't figure out where you're getting <usbmidi.h>, the arduino library is <midiusb,h> and uses a different API than sparkey is using, and all my searches are finding the arduino library.  

My key is sending midi note on, channel 1, note 0 for dit and note 1 for dah, volume 0 for key up, volume 1 for key down.  SparkSDR detects control 0 for note 0 and control 256 for note 1, values 0 and 1 as one would expect.

I do like your thrupence key.

-- rec -- ad5dz --
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+u...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sparksdr/d188c638-fec0-4090-853a-16baf9706a6b%40googlegroups.com.

Graeme Jury

unread,
May 2, 2020, 6:04:14 PM5/2/20
to SparkSDR
Hi Alan, Matthew and Roger,

Many thanks for the advice and I can see where my problem is. Any device which uses a TTL to USB converter chip won't work off the cuff. I am using the USBMIDI library by BlokasLabs here although there is no need to install from git as the Arduino IDE has his library listed in the standard libraries and it can be installed from there. Going through his code I see that devices like the nano are supported via a bit banged usb port on pins D2 and D4. I suspect that the port will be a bit slow but will have a go at altering the header file to set up the port. If it works the advantage will be that it will still have the usb serial for debug messages etc. If you program up something like an UNO with a microprocessor providing the usb midi interface you lose the serial port and will have to program via isp which is not necessarily problem and you get the bootloader space back which would help if you are going to add a fairly full featured keyer. My keyer is home brewed on a nano and goes to full sleep drawing less than a microamp waking up on a keypress so I don't need an on/off switch.

Being in full lockdown here in New Zealand I can't just pop out and get a teensy so will fiddle with what I have and if I get lucky the bit banged USB may do the job.

73, Graeme
To unsubscribe from this group and stop receiving emails from it, send an email to spar...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to spar...@googlegroups.com.

Alan Hopper

unread,
May 3, 2020, 3:53:24 AM5/3/20
to SparkSDR
Hi Rodger,
I was able to install usbmidi just by typing 'usbmidi' in the arduino ide library manager and clicking install.

Your key should be able to trigger the 'key' action with the default offset and gain, there is no keyer in spark so both paddles will just become straight keys. You can connect more than one input to an action, for the on off ones the test is (rawValue + offset) * scale > 0.5.  The key action only works when cw modulation is selected, I'm thinking that making key work as ptt in voice modes might be a neat way to get a ptt switch.

73 Alan M0NNB
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+unsubscribe@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+unsubscribe@googlegroups.com.

Graeme Jury

unread,
May 4, 2020, 6:40:47 AM5/4/20
to SparkSDR
The saga continues. I managed to get an UNO which has an Atmega16U2 processor configured as a TTL to USB converter and I got some software (dualMoco.hex) which set it to midi mode or if you bridge 2 pins on the isp connector runs as serial in the normal way. Now with the UNO in midi mode I see the following in sparkSDR ...

Last midi message:

14_0:Midi Through Port-0
20_0:MocoLUFA MIDI 1

I still don't seem to be able to get the sketch to run but at least the midi enumerates on sparkSDR so some progress. For a little micro this thing is producing fpga level frustrations. I will get back to it tomorrow and see if I can get further ahead.

73, Graeme ZL2APV
To unsubscribe from this group and stop receiving emails from it, send an email to spar...@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to spar...@googlegroups.com.

Alan Hopper

unread,
May 4, 2020, 9:28:48 AM5/4/20
to SparkSDR
Hi Graeme,
This sounds like hard work. I have just pushed a new version of the iambic branch that allows use of serial rather than midi, maybe this will then be turned to midi by the 16U2.  
In the long run I shall probably support serial midi directly in Spark. Is ZL all out of pro micros, that is a much simpler route :)

There is a round about way to connect via serial here https://groups.google.com/d/msg/sparksdr/ew8fHXPSEgQ/amNmbuRFAwAJ

73 Alan M0NNB

Roger Critchlow

unread,
May 4, 2020, 2:20:09 PM5/4/20
to Alan Hopper, SparkSDR
Finding <usbmidi.h> was no problem once I let Arduino do the search, but it won't work on a Teensy without some unknown amount of additional work.  It complains about lacking some cpp define.

Bitbanged USB was discouraged years ago on Adafruit, they dropped the processors that used it when they found that newer host processors were becoming less tolerant of the timing slop it produced.  So it may work some places and not others.

Is there a standard for sending MIDI over Serial?   Or does it require an adapter program running on the host that bucket brigades the MIDI to/from the serial interface from/to the MIDI?  The beauty of the class compliant MIDI USB device is that it does not involve any auxiliary programs or auxiliary protocols or special drivers or exceptionally clever hacks.  It runs just the way it is supposed to run on all systems.

I've bought a Osoyoos Pro Micro from Amazon which should show up this week sometime.  The knock off Pro MIcro saves quite a bit over Sparkfun's price, which savings will disappear quickly if it requires heroic hacking to get it to program, lots of amazon commenters apparently gave up before they got it to program, and even Sparkfun commenters were griefing about their boards.

If you go for a Teensy to do this, the Teensy LC will do everything necessary and lists for $12.95 at Sparkfun, a Teensy 4.0 lists for $7 more, both are the same size as the Teensy 2.0 which lists for $16.00 at pjrc.com.  Sparkfun doesn't carry the Teensy 2.0, possibly because it undercuts the price of their own AT32U4 boards.  My keyer is packaged as in the attached photo these days.  A Teensy 3.2 sandwiched between two perf boards with one TRRS jack soldered to each perf board and connected to digital IO,  The connections are wirewrapped to the pin headers and soldered to the TRRS jacks.  The whole thing is held together with a piece of transparent heat shrink tubing.  There are two capacitive touch electrodes that come out at the TRRS jack end, you can see one on the face of the perfboard next to the audio plug.   They are too small, but I haven't gotten around to fixing them.  Too caught up in my Begali key honeymoon.

-- rec -- ad5dz --

image.png




To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sparksdr/8b2bd324-4f16-42a7-85b5-012c35ba7502%40googlegroups.com.

Alan Hopper

unread,
May 4, 2020, 2:49:25 PM5/4/20
to SparkSDR
Hi Graeme and Rodger,
I have a linux version of spark here http://www.ihopper.org/radio/sparksdr2_0_1_3_linux.tar.gz that will take midi over serial, it is really to allow old Arduinos to be used to make controllers rather than for cw but should work( with un specified latency).

I've had two different batches of pro micro from ebay which have both work flawlessly.  I'll order a teensy tomorrow.

73 Alan M0NNB

To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+unsubscribe@googlegroups.com.

Graeme Jury

unread,
May 4, 2020, 7:34:49 PM5/4/20
to SparkSDR
Hi everyone,

More progress with the UNO which can provide native full speed midi. I have taken on board your comments about bit banged USB Roger and see that USB1 only is possible and have abandoned my nano work but in the light of your serial MIDI Alan, I will be getting back to it as I did get 5 pin din midi going as part of my nano experiments. I will be very interested in how the serial performs in terms of latency as midi has been worked on and supported for a long time now and my understanding is that it is the lowest latency communication that can be achieved without going to Jack and is supported by low latency kernels but I wouldn't like to see people have to install one just for this project which I think that would be over the top.

The UNO is really promising now and in the end is very simple to set up, it was only hard to figure out :-) I was able to test my UNO setup as shown below

gvj@gvj-M92p ~ $ aseqdump -l
 Port    Client name                      Port name
  0:0    System                           Timer
  0:1    System                           Announce
 14:0    Midi Through                     Midi Through Port-0
 20:0    MocoLUFA                         MocoLUFA MIDI 1

From the above, I could see my midi device (MocoLUFA) so I made a small sketch to send middle C on and off and checked the raw output as below using the name found above.

gvj@gvj-M92p ~ $ aseqdump -p "MocoLUFA"
Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
 20:0   Note on                 0, note 48, velocity 120
 20:0   Note off                0, note 48, velocity 0
 20:0   Note on                 0, note 48, velocity 120
 20:0   Note off                0, note 48, velocity 0
^C
gvj@gvj-M92p ~ $

Now I have a working MIDI using the Arduino UNO. I found that I had to use a different library to work through my midi output so will need to write some simple (I hope) code to get it to send the right signals to SparkSDR. I don't think that you used any contact debounce routine Alan which is fine by me as I intend to connect my keyer to the midi input and the signal will already be debounced so no false triggers from it. maybe later today I can report a working connection and if so will properly document what I did and post.

73, Graeme ZL2APV

Graeme Jury

unread,
May 5, 2020, 1:19:37 AM5/5/20
to SparkSDR
I finally got it to go and have roughly documented it all in case someone else wants to try it out. I have also attached the dualMoco.hex file to save some steps. The latency is brilliant and I will never be able to outsend it, I need to have a QSO and really try it live.

Here in lockdown it is not easy for me to get a teensy or a pro micro quickly but I do have a teensy on order from China which probably will take a month or so to get here but I am now in the running with the UNO so I am very pleased. Thanks all who helped. I really appreciate it as I was stone cold on midi and you guys brought me light years ahead.

73, Graeme ZL2APV
dualMoco.hex
SparkSDR MIDI Connection.pdf

Alan Hopper

unread,
May 5, 2020, 6:41:48 AM5/5/20
to SparkSDR
Hi Graeme,
congratulations, that sounds like a case of lock down necessity being the mother of invention.  Very good to hear the whole cw setup works for you.

I'm not quite sure where to go next with this.  There are very many options, some people are going to want to build controllers with lots of buttons and knobs, some may want a keyer in the software, there are numerous boards to run on etc. I'll add links to sparkey & spark to any compatible projects. Adding midi to one of the existing keyers is another obvious thing to do.

I think there needs to be a simple option for for the less adventurous e.g. buy a pro micro and install a hex file from spark.

The nice thing about the usb lib I used is that it is easy to swap out with serial, it is a shame it does not work by default on the teensy.
I would be interested to know if my iambic sketch in serial mode runs on your uno in midi mode i.e. does the second processor turn the serial midi to real midi.

I think my next experiment is to feed midi back from spark to set keyer speed and interface a couple of encoders.

73 Alan M0NNB

Graeme Jury

unread,
May 5, 2020, 7:31:57 AM5/5/20
to SparkSDR
Hi Alan,

Yes this can go as far as you wish and I am sure someone will want to build an interface to simulate a mechanical front panel. I agree that a simple interface that can be easily programmed is ideal and using an UNO or mega with the extra steps is for someone who has a spare one lying around and has some experience with programing them.

I had a play around with switching other functions and the lack of debounce left the state very unstable e.g ptt. It is no problem with keying because the glitches are too fast for the radio to change from tx to rx and eventually the contacts settle to open or closed as the case may be and for a keyer the output will already be bounce free. I am going to rewrite the sketch to debounce everything except the key input.

I have still kept the library that you used and haven't given up on it yet. I will be surprised if it won't work on my set-up and will persevere with it. I will try your serial code as soon as I can. I also tried the Arduino midi on piHPSDR and it worked well there but to my ear there was more latency than SparkSDR. John uses a text file to map the midi commands to the radio functions and I found it very straightforward. To change the mappings is simply a matter of loading a different map file. Must save a lot of programming for the midi entry screen and some real estate.

Encoders will be fun and I will set one up on my UNO so that it is ready to go when you are. BTW the sidetone volume control in SparkSDR is either full on or off and is pretty loud.

73, Graeme ZL2APV

Alan Hopper

unread,
May 5, 2020, 7:53:05 AM5/5/20
to SparkSDR
Hi Graeme,
the 2.0.1.3 version of spark a few posts above should fix the sidetone volume.
Encoders should work on the spark side already.
73 Alan M0NNB

Alan Hopper

unread,
May 5, 2020, 11:14:04 AM5/5/20
to SparkSDR
Hi Graeme & Rodger,
I have a version here with the usb library that Graeme is using,  https://github.com/ahopper/sparkey/tree/alternative-midi . It might stand more chance of running on a teensy.
73 Alan M0NNB

Graeme Jury

unread,
May 6, 2020, 6:03:18 AM5/6/20
to SparkSDR
Hi Alan,

I have installed the sparksdr2_0_1_3 and it works perfectly with my midi arduino and of course the sidetone volume is just fine now. I am not sure what the serial means? Does it mean that I use the arduino with the normal TTL to USB output and plug it into my computer and SparkSDR detects it or is told what the port is or is it something else?

The midi CW is really good at 20 wpm which is my usual ragchew speed but I could run it up to 35 wpm and still not over run the sidetone. Faster than that and I make many mistakes which I am not sure are mine or the sidetone over runs. 35 wpm is really above my competency but I can do it in small bursts - enough for testing. So far the other sdr's that I have tried can't be used at anything over 15 wpm due to latency and I don't know what magic you have worked to get the tiny latency that you have but it is 100% ok for the operating that I do although I suspect that the 50 wpm operators will have lag problems. For those rare people they will have to have some kind of mixer for the keyer tone and the radio audio output. If nothing else, midi offers a really simple way to get knobs and buttons and a morse key/paddle connected to an sdr. I am now back to using a footswitch and can see a really good project where I build a control panel complete with audio mixer, keyer, output to my sound card and input from mic plus a couple of phone jack sockets so a listener can plug in a pair of headphones too.

Thanks Alan for an inspired project.

73, Graeme ZL2APV

Alan Hopper

unread,
May 6, 2020, 8:17:35 AM5/6/20
to SparkSDR
Hi Graeme,
yep the serial is what you say, it allows devices with no real midi to connect and you have to tell it the com port and baud rate, it assumes the same 2 or 3 character midi messages are sent.

I reckon I maybe able to get the latency down a little more on linux and as you say there is the option of generating sidetone on the arduino or keyer for those that need it. Adding sidetone to sparkey is on my list although the only use I'll probably every have for it is as a practice oscillator.

It is great to have feedback on cw especially as I can't sit down with any local operators at the moment.
73 Alan M0NNB

Roger Critchlow

unread,
May 6, 2020, 1:56:32 PM5/6/20
to Alan Hopper, SparkSDR
Hi Alan --

I got it to work, too, with some bonus content.

I run jackd2 with the pulseaudio-jack-module, and I was using the jack -Xraw option for MIDI.  This should route all pulseaudio inputs and outputs through jack to the hardware, and capture MIDI events from the raw MIDI device.  All the while allowing me to set up, test, and tear down networks of jack components, which is my principal amusement these days.

A week ago I figured out that the reason my browsers weren't able to play any audio was that they were still trying to open alsa devices.  Running "pacmd unload-module module-alsa-card" purged all the alsa references from pulse, and the browsers started working.  And it turned out that Quisk worked, too.

So I installed 2.0.1.3 and I got no audio from SparkSDR and no MIDI into SparkSDR.   Then I switched to using the -Xseq option to enable jack MIDI and capture MIDI events from the Alsa sequencer.  Suddenly the SparkSDR audio through jack works.  And MIDI key events from my MidiKey show up in SparkSDR.  And, the bonus, I can route the MIDI output of my jack iambic keyer back into SparkSDR as the key input.  

The only suggestion I would offer is that lumping together the hardware Midi input with the sequencer Midi Through is a mistake.  There's no reason that MIDI_NOTE_ON:Channel1:Note0 should mean the identical thing on two different ports.  Connecting 2 Sparkey's at once shouldn't require hardware reconfiguration to make it work when SparkSDR could keep them sorted out by itself.

But on the balance, very nice work! 

-- rec -- ad5dz --

--
You received this message because you are subscribed to the Google Groups "SparkSDR" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sparksdr/6004d0f4-145b-4c12-b046-d6fb92d8cd95%40googlegroups.com.

Alan Hopper

unread,
May 7, 2020, 4:59:20 AM5/7/20
to SparkSDR
Hi Roger,
Glad it works, I'm keep meaning to give myself a linux audio course.
Yep I knew it was a bodge to ignore the midi source when I did it but it was a lunch break job:) I'll do it properly at some point, probably should do it sooner rather than later so as not to break too many people's settings.
73 Alan M0NNB
To unsubscribe from this group and stop receiving emails from it, send an email to sparksdr+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages