Want to resurrect your D/D2 MAC kit?

Hi Captain Jack and fsphil.
Would there be any chance of you writing an idiots guide on how to transmit Dmac using your methods.
I have BSB receivers that I’d really love to resurrect.
Unfortunately I’m lost with the software coding side of this.
I have Windows 10 pc’s so a guide for running the script on windows would be favourable.
Kind regards
Chris
 
Hi Captain Jack and fsphil.
Would there be any chance of you writing an idiots guide on how to transmit Dmac using your methods.
I have BSB receivers that I’d really love to resurrect.
Unfortunately I’m lost with the software coding side of this.
I have Windows 10 pc’s so a guide for running the script on windows would be favourable.
Kind regards
Chris
The latest builds of Captain Jack's hacktv fork don't compile on Windows, looks to be something to do with the Syster changes implemented recently. So you'll probably need to use Linux (or a Mac maybe?) for that. The original version by fsphil can compile if some changes are made to mac.c first, but I don't know what the consequences of this are.
 
fsphil's version will compile for Windows and work with BSB out of the box - no changes needed there. If someone can compile the latest version for Windows and upload it, then you can use it.

I assume you have HackRF and all drivers installed already.
 
I’ll give it a shot. Be back in a few.
 
Got the same errors again:

mac.c: In function '_update_udt':
mac.c:384:2: warning: implicit declaration of function 'localtime_r'; did you mean 'localtime_s'? [-Wimplicit-function-declaration]
384 | localtime_r(&timestamp, &tm);
| ^~~~~~~~~~~
| localtime_s
mac.c:385:8: error: 'struct tm' has no member named 'tm_gmtoff'
385 | i = tm.tm_gmtoff / 1800;
| ^
mac.c:389:2: warning: implicit declaration of function 'gmtime_r'; did you mean 'gmtime_s'? [-Wimplicit-function-declaration]
389 | gmtime_r(&timestamp, &tm);
| ^~~~~~~~
| gmtime_s
make: *** [Makefile:32: mac.o] Error 1
make: *** Waiting for unfinished jobs....

If I comment out the lines above, it does compile but as I said, I don't know what it breaks. I've uploaded the compiled file here:
 
It should still work without those. It's just for setting date/time, though we haven't seen *where* it sets it!

Can you remind me what errors you're seeing compiling my fork for Windows?
 
OK, so I don't have a HackRF yet as I don't want to buy one if I have no hope of getting this working.
Also I think someone mentioned in an earlier post that this will work with LIME SDR. Looking on the net I see these can transmit at 12Ghz so I'd like to get this so I can maybe transmit to a Squarial in the future.
Will this same script work with Lime?
Also I've tried the file that steeviebops uploaded but nothing happens on my PC except a command box opens then closes.
Is this because I don't have the HackRF/ Limesdr installed yet?
Sorry for my total lack of computer knowledge!!
Regards
Chris
 
Hi @BSBSquarial

hacktv needs to be run as command line from DOS prompt. Else running it by clicking on it will only lead to the result (blinking window) you observed.

HackRF is known to work, never tested LimeSDR. For early tests, transmitting in the 950-2150MHz intermediate band will work with any decoder. Make 100% sure you have a DC blocker between your satellite receiver and your SDR hardware.
 
Ah I meant to remove that time code, or at least comment it out until we found a decoder that uses it.

The official specs on the LimeSDR say its maximum frequency is 3.8 GHz - is their a mod or addon to let it get to 12GHz? That would be super useful.
 
It should still work without those. It's just for setting date/time, though we haven't seen *where* it sets it!

Can you remind me what errors you're seeing compiling my fork for Windows?
Sure, here you go. I never got the timestamp and logo functions working but that's not the end of the world.

systerdes.c:108:6: error: conflicting types for '_expand'
108 | void _expand(unsigned char const *e, unsigned char *data, unsigned char *result)
| ^~~~~~~
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/stdlib.h:741,
from systerdes.c:22:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/malloc.h:113:25: note: previous declaration of '_expand' was here
113 | _CRTIMP void *__cdecl _expand(void *_Memory,size_t _NewSize);
| ^~~~~~~
make: *** [Makefile:32: systerdes.o] Error 1
make: *** Waiting for unfinished jobs....
syster.c: In function '_init_common':
syster.c:493:24: warning: array subscript 8 is outside array bounds of 'unsigned char[8]' [-Warray-bounds]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:659:17: note: while referencing 'data'
659 | unsigned char data[8] = { 0x80, 0x01, 0x11, 0x00, 0x7B, 0x0A, 0x00, 0x00 };
| ^~~~
syster.c:493:24: warning: array subscript 8 is outside array bounds of 'unsigned char[8]' [-Warray-bounds]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:624:17: note: while referencing 'data'
624 | unsigned char data[8] = { 0xFF,0x01,0x01,0x00,0x7B,0x0A,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: array subscript 8 is outside array bounds of 'unsigned char[8]' [-Warray-bounds]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:590:17: note: while referencing 'data'
590 | unsigned char data[8] = { 0x80,0x05,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: array subscript 8 is outside array bounds of 'unsigned char[8]' [-Warray-bounds]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:560:17: note: while referencing 'data'
560 | unsigned char data[8] = { 0xFF,0x05,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: array subscript 8 is outside array bounds of 'unsigned char[8]' [-Warray-bounds]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:526:17: note: while referencing 'data'
526 | unsigned char data[8] = { 0xFF,0x01,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: '*((void *)&data+8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:526:17: note: '*((void *)&data+8)' was declared here
526 | unsigned char data[8] = { 0xFF,0x01,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: '*((void *)&data+8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:560:17: note: '*((void *)&data+8)' was declared here
560 | unsigned char data[8] = { 0xFF,0x05,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: '*((void *)&data+8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:590:17: note: '*((void *)&data+8)' was declared here
590 | unsigned char data[8] = { 0x80,0x05,0x11,0x00,0x88,0x15,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: '*((void *)&data+8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:624:17: note: '*((void *)&data+8)' was declared here
624 | unsigned char data[8] = { 0xFF,0x01,0x01,0x00,0x7B,0x0A,0x00,0x00 };
| ^~~~
syster.c:493:24: warning: '*((void *)&data+8)' may be used uninitialized in this function [-Wmaybe-uninitialized]
493 | s->blocks[j].ecm = i < 4 || i > 12 ? rand() + 0xFF : data[i-4];
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
syster.c:659:17: note: '*((void *)&data+8)' was declared here
659 | unsigned char data[8] = { 0x80, 0x01, 0x11, 0x00, 0x7B, 0x0A, 0x00, 0x00 };
| ^~~~
 
OK, so I don't have a HackRF yet as I don't want to buy one if I have no hope of getting this working.
Also I think someone mentioned in an earlier post that this will work with LIME SDR. Looking on the net I see these can transmit at 12Ghz so I'd like to get this so I can maybe transmit to a Squarial in the future.
Will this same script work with Lime?
Also I've tried the file that steeviebops uploaded but nothing happens on my PC except a command box opens then closes.
Is this because I don't have the HackRF/ Limesdr installed yet?
Sorry for my total lack of computer knowledge!!
Regards
Chris
As mentioned above, hacktv is a command line application so needs to be run from the Linux terminal or a Windows command prompt. I actually made a little GUI wrapper for it for my own use - if you're interested I can share that with you too.
 
Ah, most are warnings but need to address them. The _expand function needs to be renamed to something like _exp and it should compile. Looks like there's a function of the same name in Windows somewhere doing a totally different thing (and not DES expansion).
 
There's been some interest in a GUI lately. I'm not really sure what form that could take. A live preview of the currently playing video, maybe some basic media controls?
 
What I've made is very basic, I haven't coded anything for years! It just allows you to select a source and enable whatever settings you want. But if the interest is there, I'd happily share it.

It runs on Windows or also on Wine (where it runs the native Linux versions and not a Windows port).
 

Attachments

  • hacktv-gui.webp
    hacktv-gui.webp
    32.3 KB · Views: 29
Nice gui. Would be good to have a portable version - either as a Java program or something compiled from source like the main program.
 
Ah I meant to remove that time code, or at least comment it out until we found a decoder that uses it.

The official specs on the LimeSDR say its maximum frequency is 3.8 GHz - is their a mod or addon to let it get to 12GHz? That would be super
Ah I meant to remove that time code, or at least comment it out until we found a decoder that uses it.

The official specs on the LimeSDR say its maximum frequency is 3.8 GHz - is their a mod or addon to let it get to 12GHz? That would be super useful.
I was searching the web and came across a page discussing the Limesdr that does 100hz upto 12ghz.https://discourse.myriadrf.org/t/lms8001-100-khz-to-12-ghz-transceiver-schedule-info/1020.
Not sure if this is available yet.
The only other thing I found was an add on up converter board for limesdr but that only goes up to 10ghz.
 
What I've made is very basic, I haven't coded anything for years! It just allows you to select a source and enable whatever settings you want. But if the interest is there, I'd happily share it.

It runs on Windows or also on Wine (where it runs the native Linux versions and not a Windows port).
That looks fantastic!
And much more user friendly for someone like me.
I’d be very great full if you would share this.
Thanks
Chris
 
Ah I meant to remove that time code, or at least comment it out until we found a decoder that uses it.

The official specs on the LimeSDR say its maximum frequency is 3.8 GHz - is their a mod or addon to let it get to 12GHz? That would be super useful.

I was searching the web and came across a page discussing the Limesdr that does 100hz upto 12ghz.
.
Not sure if this is available yet.
The only other thing I found was an add on up converter board for limesdr but that only goes up to 10ghz.
 
Hi Captain Jack,
I've been playing with this with my BSB boxes and Steeviebops GUI but I'm struggling to get a stable image.
What settings do I need to use to get this to work like in the video you posted.
I'm running it on a windows i5 2.5Ghz. is this fast enough?
Great work.
Kind regards
Chris
 
Back
Top