diff --git a/dump1090.c b/dump1090.c index 60882fc73..617967569 100644 --- a/dump1090.c +++ b/dump1090.c @@ -42,20 +42,20 @@ void sigintHandler(int dummy) { // #ifndef _WIN32 // Get the number of rows after the terminal changes size. -int getTermRows() { - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - return (w.ws_row); -} +int getTermRows() { + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + return (w.ws_row); +} // Handle resizing terminal void sigWinchCallback() { signal(SIGWINCH, SIG_IGN); Modes.interactive_rows = getTermRows(); interactiveShowData(); - signal(SIGWINCH, sigWinchCallback); + signal(SIGWINCH, sigWinchCallback); } -#else +#else int getTermRows() { return MODES_INTERACTIVE_ROWS;} #endif // @@ -99,7 +99,7 @@ void modesInit(void) { ((Modes.magnitude = (uint16_t *) malloc(MODES_ASYNC_BUF_SIZE+MODES_PREAMBLE_SIZE+MODES_LONG_MSG_SIZE) ) == NULL) || ((Modes.maglut = (uint16_t *) malloc(sizeof(uint16_t) * 256 * 256) ) == NULL) || ((Modes.beastOut = (char *) malloc(MODES_RAWOUT_BUF_SIZE) ) == NULL) || - ((Modes.rawOut = (char *) malloc(MODES_RAWOUT_BUF_SIZE) ) == NULL) ) + ((Modes.rawOut = (char *) malloc(MODES_RAWOUT_BUF_SIZE) ) == NULL) ) { fprintf(stderr, "Out of memory allocating data buffer.\n"); exit(1); @@ -112,24 +112,24 @@ void modesInit(void) { // Validate the users Lat/Lon home location inputs if ( (Modes.fUserLat > 90.0) // Latitude must be -90 to +90 - || (Modes.fUserLat < -90.0) // and + || (Modes.fUserLat < -90.0) // and || (Modes.fUserLon > 360.0) // Longitude must be -180 to +360 || (Modes.fUserLon < -180.0) ) { Modes.fUserLat = Modes.fUserLon = 0.0; } else if (Modes.fUserLon > 180.0) { // If Longitude is +180 to +360, make it -180 to 0 Modes.fUserLon -= 360.0; } - // If both Lat and Lon are 0.0 then the users location is either invalid/not-set, or (s)he's in the - // Atlantic ocean off the west coast of Africa. This is unlikely to be correct. - // Set the user LatLon valid flag only if either Lat or Lon are non zero. Note the Greenwich meridian - // is at 0.0 Lon,so we must check for either fLat or fLon being non zero not both. + // If both Lat and Lon are 0.0 then the users location is either invalid/not-set, or (s)he's in the + // Atlantic ocean off the west coast of Africa. This is unlikely to be correct. + // Set the user LatLon valid flag only if either Lat or Lon are non zero. Note the Greenwich meridian + // is at 0.0 Lon,so we must check for either fLat or fLon being non zero not both. // Testing the flag at runtime will be much quicker than ((fLon != 0.0) || (fLat != 0.0)) Modes.bUserFlags &= ~MODES_USER_LATLON_VALID; if ((Modes.fUserLat != 0.0) || (Modes.fUserLon != 0.0)) { Modes.bUserFlags |= MODES_USER_LATLON_VALID; } - // Limit the maximum requested raw output size to less than one Ethernet Block + // Limit the maximum requested raw output size to less than one Ethernet Block if (Modes.net_output_raw_size > (MODES_RAWOUT_BUF_FLUSH)) {Modes.net_output_raw_size = MODES_RAWOUT_BUF_FLUSH;} if (Modes.net_output_raw_rate > (MODES_RAWOUT_BUF_RATE)) @@ -142,28 +142,28 @@ void modesInit(void) { for (i = 0; i < MODES_ASYNC_BUF_NUMBER; i++) {Modes.stSystemTimeRTL[i] = Modes.stSystemTimeBlk;} - // Each I and Q value varies from 0 to 255, which represents a range from -1 to +1. To get from the - // unsigned (0-255) range you therefore subtract 127 (or 128 or 127.5) from each I and Q, giving you + // Each I and Q value varies from 0 to 255, which represents a range from -1 to +1. To get from the + // unsigned (0-255) range you therefore subtract 127 (or 128 or 127.5) from each I and Q, giving you // a range from -127 to +128 (or -128 to +127, or -127.5 to +127.5).. // // To decode the AM signal, you need the magnitude of the waveform, which is given by sqrt((I^2)+(Q^2)) - // The most this could be is if I&Q are both 128 (or 127 or 127.5), so you could end up with a magnitude + // The most this could be is if I&Q are both 128 (or 127 or 127.5), so you could end up with a magnitude // of 181.019 (or 179.605, or 180.312) // - // However, in reality the magnitude of the signal should never exceed the range -1 to +1, because the - // values are I = rCos(w) and Q = rSin(w). Therefore the integer computed magnitude should (can?) never + // However, in reality the magnitude of the signal should never exceed the range -1 to +1, because the + // values are I = rCos(w) and Q = rSin(w). Therefore the integer computed magnitude should (can?) never // exceed 128 (or 127, or 127.5 or whatever) // - // If we scale up the results so that they range from 0 to 65535 (16 bits) then we need to multiply - // by 511.99, (or 516.02 or 514). antirez's original code multiplies by 360, presumably because he's + // If we scale up the results so that they range from 0 to 65535 (16 bits) then we need to multiply + // by 511.99, (or 516.02 or 514). antirez's original code multiplies by 360, presumably because he's // assuming the maximim calculated amplitude is 181.019, and (181.019 * 360) = 65166. // // So lets see if we can improve things by subtracting 127.5, Well in integer arithmatic we can't - // subtract half, so, we'll double everything up and subtract one, and then compensate for the doubling + // subtract half, so, we'll double everything up and subtract one, and then compensate for the doubling // in the multiplier at the end. // // If we do this we can never have I or Q equal to 0 - they can only be as small as +/- 1. - // This gives us a minimum magnitude of root 2 (0.707), so the dynamic range becomes (1.414-255). This + // This gives us a minimum magnitude of root 2 (0.707), so the dynamic range becomes (1.414-255). This // also affects our scaling value, which is now 65535/(255 - 1.414), or 258.433254 // // The sums then become mag = 258.433254 * (sqrt((I*2-255)^2 + (Q*2-255)^2) - 1.414) @@ -269,7 +269,7 @@ void rtlsdrCallback(unsigned char *buf, uint32_t len, void *ctx) { // Queue the new data Modes.pData[Modes.iDataIn] = (uint16_t *) buf; Modes.iDataIn = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn + 1); - Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); + Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); if (Modes.iDataReady == 0) { // Ooooops. We've just received the MODES_ASYNC_BUF_NUMBER'th outstanding buffer @@ -278,10 +278,10 @@ void rtlsdrCallback(unsigned char *buf, uint32_t len, void *ctx) { // isn't much we can do to recover the lost data, but we can correct things to // avoid any additional problems. Modes.iDataOut = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataOut+1); - Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1); + Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1); Modes.iDataLost++; } - + // Signal to the other thread that new data is ready, and unlock pthread_cond_signal(&Modes.data_cond); pthread_mutex_unlock(&Modes.data_mutex); @@ -335,7 +335,7 @@ void readDataFromFile(void) { // Queue the new data Modes.pData[Modes.iDataIn] = Modes.pFileData; Modes.iDataIn = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn + 1); - Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); + Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); // Signal to the other thread that new data is ready pthread_cond_signal(&Modes.data_cond); @@ -474,7 +474,7 @@ void showCopyright(void) { " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n" " OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" "\n" -" For further details refer to \n" +" For further details refer to \n" "\n" ); @@ -574,7 +574,7 @@ void backgroundTasks(void) { if (Modes.net) { modesReadFromClients(); - } + } // If Modes.aircrafts is not NULL, remove any stale aircraft if (Modes.aircrafts) { @@ -663,6 +663,12 @@ int verbose_device_search(char *s) int main(int argc, char **argv) { int j; +#ifdef + int modes_fd = ((Modes.fd = open(Modes.filename, (O_RDONLY | O_BINARY))) == -1); +#else + int modes_fd = ((Modes.fd = open(Modes.filename, (O_RDONLY))) == -1); +#endif + // Set sane defaults modesInitConfig(); signal(SIGINT, sigintHandler); // Define Ctrl/C handler (exit program) @@ -807,13 +813,7 @@ int main(int argc, char **argv) { } else { if (Modes.filename[0] == '-' && Modes.filename[1] == '\0') { Modes.fd = STDIN_FILENO; - } else if ((Modes.fd = open(Modes.filename, -#ifdef _WIN32 - (O_RDONLY | O_BINARY) -#else - (O_RDONLY) -#endif - )) == -1) { + } else if (modes_fd) { perror("Opening data file"); exit(1); } @@ -835,13 +835,13 @@ int main(int argc, char **argv) { while (Modes.exit == 0) { if (Modes.iDataReady == 0) { - pthread_cond_wait(&Modes.data_cond,&Modes.data_mutex); // This unlocks Modes.data_mutex, and waits for Modes.data_cond + pthread_cond_wait(&Modes.data_cond,&Modes.data_mutex); // This unlocks Modes.data_mutex, and waits for Modes.data_cond continue; // Once (Modes.data_cond) occurs, it locks Modes.data_mutex } // Modes.data_mutex is Locked, and (Modes.iDataReady != 0) if (Modes.iDataReady) { // Check we have new data, just in case!! - + Modes.iDataOut &= (MODES_ASYNC_BUF_NUMBER-1); // Just incase // Translate the next lot of I/Q samples into Modes.magnitude @@ -850,8 +850,8 @@ int main(int argc, char **argv) { Modes.stSystemTimeBlk = Modes.stSystemTimeRTL[Modes.iDataOut]; // Update the input buffer pointer queue - Modes.iDataOut = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataOut + 1); - Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); + Modes.iDataOut = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataOut + 1); + Modes.iDataReady = (MODES_ASYNC_BUF_NUMBER-1) & (Modes.iDataIn - Modes.iDataOut); // If we lost some blocks, correct the timestamp if (Modes.iDataLost) {