Merge branch 'EzoeRyou-master'

* EzoeRyou-master:
  aquire number of thread to create from hardware_concurrency()
  cleanup
  boost song
  C++11 port
This commit is contained in:
William Entriken 2016-03-04 17:42:34 -05:00
commit 5b07a1ea6a
4 changed files with 126 additions and 5 deletions

1
.gitignore vendored
View File

@ -32,3 +32,4 @@
*.dSYM/
/main
main

View File

@ -10,14 +10,10 @@ Publicly available documents already discuss exfiltration from secured systems u
How to Use It
------------------
Compile the program using make:
Enter the `Using _mm_stream_si128` folder and compile using make. (There are also other flavors you can `make` and try in different folders!)
make
And run it on an Apple MacBook Air (13-inch, Early 2015):
./main
Then use a Sony STR-K670P radio receiver with the included antenna and tune it to 1580 kHz on AM.
You should hear the "Mary Had a Little Lamb" song playing repeatedly. Other equipment and tuning may work as well. On the equipment above, the author has achieved clear transmission over two meters of open air or one meter through drywall. Different results will be achievable with different equipment.

View File

@ -0,0 +1,21 @@
all : gmain cmain
clean :
rm -f gmain
rm -f cmain
grun : gmain
./gmain
crun : cmain
./cmain
gmain : main.cpp
g++ -Wall -O2 -std=c++11 -pthread -lrt -o gmain main.cpp
cmain : main.cpp
clang++ -Wall -O2 -std=c++11 -stdlib=libc++ -pthread -lrt -o cmain main.cpp
.PHONY : all clean run

View File

@ -0,0 +1,103 @@
// SYSTEM BUS RADIO
// https://github.com/fulldecent/system-bus-radio
// Copyright 2016 William Entriken
// C++11 port by Ryou Ezoe
#include <iostream>
#include <iomanip>
#include <chrono>
#include <thread>
#include <atomic>
#include <mutex>
#include <condition_variable>
std::mutex m ;
std::condition_variable cv ;
std::chrono::high_resolution_clock::time_point mid ;
std::chrono::high_resolution_clock::time_point reset ;
void boost_song()
{
using namespace std::chrono ;
while( true )
{
std::unique_lock<std::mutex> lk{m} ;
cv.wait( lk ) ;
std::atomic<unsigned> x{0} ;
while( high_resolution_clock::now() < mid )
{
++x ;
}
std::this_thread::sleep_until( reset ) ;
}
}
void square_am_signal(float time, float frequency)
{
using namespace std::chrono ;
std::cout << "Playing / " << time << " seconds / " << frequency << " Hz\n" ;
seconds const sec{1} ;
nanoseconds const nsec{ sec } ;
using rep = nanoseconds::rep ;
auto nsec_per_sec = nsec.count() ;
nanoseconds const period( static_cast<rep>( nsec_per_sec / frequency) ) ;
auto start = high_resolution_clock::now() ;
auto const end = start + nanoseconds( static_cast<rep>(time * nsec_per_sec) ) ;
while (high_resolution_clock::now() < end)
{
mid = start + period / 2 ;
reset = start + period ;
cv.notify_all() ;
std::this_thread::sleep_until( reset ) ;
start = reset;
}
}
int main()
{
for ( unsigned i = 0 ; i < std::thread::hardware_concurrency() ; ++i )
{
std::thread t( boost_song ) ;
t.detach() ;
}
while (1)
{
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2093);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2673);
square_am_signal(0.790, 2673);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2349);
square_am_signal(0.790, 2349);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 3136);
square_am_signal(0.790, 3136);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2093);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2349);
square_am_signal(0.400, 2673);
square_am_signal(0.400, 2349);
square_am_signal(0.790, 2093);
}
}