|
RTC Toolkit
2.0.0
|
MUDPI Publisher. More...
#include "math.h"#include "mudpi.h"#include "rtms.h"#include <netdb.h>#include <netinet/in.h>#include <signal.h>#include <sstream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/time.h>#include <sys/types.h>#include <time.h>#include <unistd.h>#include <vector>#include <iostream>#include <fcntl.h>#include <sys/mman.h>#include <sys/shm.h>#include <sys/stat.h>Macros | |
| #define | IFNAMSIZ 16 |
| #define | LINESIZE 1024 * 500 |
Functions | |
| void | Error (const char *msg) |
| void | SigInt (int sig) |
| int | BindSrc (int sockfd, char const *if_name) |
| int | ParseArgs (int argc, char **argv, char *&hostname, int &portno, int &topic_id, int &n_frames_per_sample, long &delay_us, char *&data_file, int &buf_size, bool &wait_trigger, bool &rolling_ramp, int &sample_size, int &limit, int &rtms) |
| void | FillSample (int sample_payload_floats, int sample_id) |
| void | ReadSamples (char *filename, int sample_payload_floats) |
| void | CreateShm () |
| void | RemoveShm () |
| void | SignalShm (int value) |
| void | WaitShm (int value) |
| int | main (int argc, char **argv) |
| Application entrypoint. More... | |
Variables | |
| int | time_to_die = 0 |
| std::vector< std::vector< float > > | samples_vector |
| int | shm_fd |
| int * | shm_ptr |
MUDPI Publisher.
| #define IFNAMSIZ 16 |
| #define LINESIZE 1024 * 500 |
| int BindSrc | ( | int | sockfd, |
| char const * | if_name | ||
| ) |
| void CreateShm | ( | ) |
we want the shm to be writeable by all so disable the umask
open or create
| void Error | ( | const char * | msg | ) |
| void FillSample | ( | int | sample_payload_floats, |
| int | sample_id | ||
| ) |
If we just ramp forever with increasing sample Id we will run out of numerical precision so when we get to 1000 increments start again
| int ParseArgs | ( | int | argc, |
| char ** | argv, | ||
| char *& | hostname, | ||
| int & | portno, | ||
| int & | topic_id, | ||
| int & | n_frames_per_sample, | ||
| long & | delay_us, | ||
| char *& | data_file, | ||
| int & | buf_size, | ||
| bool & | wait_trigger, | ||
| bool & | rolling_ramp, | ||
| int & | sample_size, | ||
| int & | limit, | ||
| int & | rtms | ||
| ) |
If the sample size is set, we need to work out how many frames of buffsize we need to transport the sample
For some reason the way I would have done this in the past does not seem to work with the implementation of round on eltrtctk40 which "rounds away from 0" so that round 2.5 is 3 not 2 so the first check catches the case where sampleSize is a multiple of payloadsize
If the sample size is not set, then it's just nframes * payload
| void ReadSamples | ( | char * | filename, |
| int | sample_payload_floats | ||
| ) |
Read one line at a time with a big LINESIZE
Space separated floats up to the maximum allowed
Add to the vector of samples
| void RemoveShm | ( | ) |
| void SigInt | ( | int | sig | ) |
| void SignalShm | ( | int | value | ) |
Just write the value into the shm after checking the segment is good
| void WaitShm | ( | int | value | ) |
Wait for a value(sampleId) to be present in the shm or bail out if we get a signal
| std::vector<std::vector<float> > samples_vector |
| int shm_fd |
| int* shm_ptr |
| int time_to_die = 0 |