mirror of https://github.com/wb2osz/direwolf.git
				
				
				
			New branch for 64 bit processing. Probably not needed.
This commit is contained in:
		
							parent
							
								
									98b8949f3b
								
							
						
					
					
						commit
						7d58e40bdb
					
				| 
						 | 
					@ -114,7 +114,7 @@ struct hdlc_state_s {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int eas_fields_after_plus;	/* Number of "-" characters after the "+". */
 | 
						int eas_fields_after_plus;	/* Number of "-" characters after the "+". */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	uint32_t eotd_acc;		/* Accumulate last recent 32 bits for EOTD. */
 | 
						uint64_t eotd_acc;		/* Accumulate last recent 32 bits for EOTD. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int eotd_gathering;		/* Decoding in progress - valid frame. */
 | 
						int eotd_gathering;		/* Decoding in progress - valid frame. */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -429,9 +429,13 @@ a good modem here and providing a result when it is received.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 ***********************************************************************************/
 | 
					 ***********************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EOTD_PREAMBLE_AND_BARKER_CODE	0x55555712
 | 
					#define EOTD_MAX_BYTES			8
 | 
				
			||||||
#define HOTD_PREAMBLE_AND_BARKER_CODE	0x558f1129
 | 
					
 | 
				
			||||||
#define EOTD_MAX_LEN			8
 | 
					#define EOTD_PREAMBLE_AND_BARKER_CODE	0x48eaaaaa00000000ULL
 | 
				
			||||||
 | 
					#define EOTD_PREAMBLE_MASK		0xffffffff00000000ULL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define HOTD_PREAMBLE_AND_BARKER_CODE	0x9488f1aa00000000ULL
 | 
				
			||||||
 | 
					#define HOTD_PREAMBLE_MASK		0xffffffff00000000ULL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void eotd_rec_bit (int chan, int subchan, int slice, int raw, int future_use)
 | 
					static void eotd_rec_bit (int chan, int subchan, int slice, int raw, int future_use)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -447,41 +451,41 @@ dw_printf("chan=%d subchan=%d slice=%d raw=%d\n", chan, subchan, slice, raw);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	  //dw_printf ("slice %d = %d\n", slice, raw);
 | 
						  //dw_printf ("slice %d = %d\n", slice, raw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Accumulate most recent 32 bits in MSB-first order.
 | 
					// Accumulate most recent 32 bits in LSB-first order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	H->eotd_acc <<= 1;
 | 
						H->eotd_acc >>= 1;
 | 
				
			||||||
	H->eotd_acc |= raw;
 | 
						if (raw) {
 | 
				
			||||||
 | 
						  H->eotd_acc |= 0x8000000000000000UL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int done = 0;
 | 
						int done = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!H->eotd_gathering &&
 | 
						if (!H->eotd_gathering &&
 | 
				
			||||||
		(H->eotd_acc == EOTD_PREAMBLE_AND_BARKER_CODE ||
 | 
							((H->eotd_acc & EOTD_PREAMBLE_MASK) == EOTD_PREAMBLE_AND_BARKER_CODE ||
 | 
				
			||||||
		 H->eotd_acc == HOTD_PREAMBLE_AND_BARKER_CODE)) {
 | 
							 (H->eotd_acc & HOTD_PREAMBLE_MASK) == HOTD_PREAMBLE_AND_BARKER_CODE)) {
 | 
				
			||||||
#ifdef EOTD_DEBUG
 | 
					#ifdef EOTD_DEBUG
 | 
				
			||||||
	  dw_printf ("Barker Code Found %x\n", H->eotd_acc);
 | 
						  dw_printf ("Barker Code Found %llx\n", H->eotd_acc);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	  H->olen = 0;
 | 
						  H->olen = 0;
 | 
				
			||||||
	  H->eotd_gathering = 1;
 | 
						  H->eotd_gathering = 1;
 | 
				
			||||||
	  H->frame_len = 0;
 | 
						  H->frame_len = 0;
 | 
				
			||||||
 | 
						  H->eotd_acc = 0ULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (H->eotd_gathering) {
 | 
						else if (H->eotd_gathering) {
 | 
				
			||||||
	  H->olen++;
 | 
						  H->olen++;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	  if (H->olen == 8) {
 | 
						  if (H->olen == EOTD_MAX_BYTES * 8) {
 | 
				
			||||||
	    H->olen = 0;
 | 
						      H->frame_len = EOTD_MAX_BYTES;
 | 
				
			||||||
	    char ch = H->eotd_acc & 0xff;
 | 
						      for (int i = EOTD_MAX_BYTES -1; i >=0; i--) {
 | 
				
			||||||
	    H->frame_buf[H->frame_len++] = ch;
 | 
							H->frame_buf[i] = H->eotd_acc & 0xff;
 | 
				
			||||||
	    H->frame_buf[H->frame_len] = '\0';
 | 
							H->eotd_acc >>= 8;
 | 
				
			||||||
	    //dw_printf ("frame_buf = %s\n", H->frame_buf);
 | 
						      }
 | 
				
			||||||
 | 
					 | 
				
			||||||
	    if (H->frame_len == EOTD_MAX_LEN) {		// FIXME: look for other places with max length
 | 
					 | 
				
			||||||
	      done = 1;
 | 
						      done = 1;
 | 
				
			||||||
#ifdef EOTD_DEBUG
 | 
					#ifdef EOTD_DEBUG
 | 
				
			||||||
for (int ii=0; ii < EOTD_MAX_LEN; ii++) {dw_printf("%02x ", H->frame_buf[ii]); } dw_printf("\n");
 | 
					for (int ii=0; ii < EOTD_MAX_BYTES; ii++) {dw_printf("%02x ", H->frame_buf[ii]); } dw_printf("\n");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (done) {
 | 
						if (done) {
 | 
				
			||||||
#ifdef DEBUG_E
 | 
					#ifdef DEBUG_E
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue