[Date Prev][Date Next][Thread Prev][Thread Next] - [Date Index][Thread Index][Author Index]

Re: D-block utility



At 05:14 PM 12/07/2001 -0400, you wrote:
>
>
>I think I posted this before, but here is a routine the allows you to 
>decode D-blocks.  Feel free to use it...
>
>
>
>
>Standard Disclaimer:  I want to be a programmer when I grow up;  I am 
>not yet grown.
>

A boy yu must go to school .... NO MAMA I dont want to go to school, Yes you
MUST go to school because two reason 1# you are 40 years old and the 2# you are
the DIRECTOR of the school ..... ji

Al LU2FGN






>---------------------------------------------------------------------------
----------------------------------------------
>
>#include <math.h>
>#include <stdio.h>
>#include<stat.h>
>#include <string.h>
>#include <ctype.h>
>#include <time.h>
>
>struct dblock {
>					char				ID[5];
>					short				NB;		// NB=Number of blocks
>					short				NS;		// NS sequence number
>					short				N;		// N = number of bytes in block
>				};
>				
>// This routine is passed a telmetry block,
>// it is assumed the input routine has already done a CRC check.
>
>void d_decode(unsigned char block[])
>{
>
>
>
>	time_t lclTime;
>	struct tm *now;
>	char ts[256]; /* time string */
>	extern struct Pref_conf Pref;			
>	unsigned short				x,i;
>	unsigned char		Dblock[500];
>	char				temp[255];
>	FILE				*fp6,*fp7;
>	
>	struct dblock bIndex;
>					
>	// get time UTC
>	lclTime = time(NULL);
>	now = gmtime(&lclTime);
>  			
>	// setup directories
>	strftime(ts, 256, ":TLM Folder:%Y", now);		
>	mkdir(ts,0);
>	strftime(ts, 256, ":TLM Folder:%Y:%b", now);		
>	mkdir(ts,0);
>	strftime(ts, 256, ":TLM Folder:%Y:%b:%d", now);		
>	mkdir(ts,0);
>	strftime(ts, 256, ":TLM Folder:%Y:%b:%d:", now);
>  			
>	// pull fileID from telemetry block	
>	bIndex.ID[0]=block[2];
>	bIndex.ID[1]=block[3];
>	bIndex.ID[2]='\0';
>			
>	sprintf(temp,"%sd.%s.raw",ts,bIndex.ID);
>	fp6=fopen(temp,"a+b");
>	
>	sprintf(temp,"%sd.%s.index",ts,bIndex.ID);
>	fp7=fopen(temp,"ab");
>	
>	// pull the other header information from the block.		
>	bIndex.NB = (block[5] << 8) + (0x00ff & block[4]);
>	bIndex.NS = (block[7] << 8) + (0x00ff & block[6]);
>	bIndex.N = (block[509] << 8) + (0x00ff & block[508]);
>	
>	//sprintf(temp,"\rFileID = %s ,   NS= %d",bIndex.ID,bIndex.NB);	// debug	
>	//TlmDraw(temp);	
>		
>	sprintf(temp,"\rSN= %d ,  N= %d\r",bIndex.NS,bIndex.N);		// debug	
>	TlmDraw(temp);	
>			
>
>			
>	for(x=8,i=0;i<bIndex.N;x++,i++){
>			if(!Pref.exor){    // If the D block has not already been XORed
>				Dblock[i]=(unsigned char)(x ^ block[x]);
>				}else{
>				Dblock[i]=block[x]; // If we are reading from 
>archived D block that has been XORed
>				}		
>			}	
>		
>		// seek offset NS*500
>		fseek(fp6,(bIndex.NS*500),0);
>		
>		// write block N in length
>		fwrite(Dblock,1,bIndex.N,fp6);
>		fclose(fp6);
>		
>		// update index
>		fwrite(&bIndex,1,sizeof(struct dblock ),fp7);
>		fclose(fp7);
>		
>
>}
>
>
>// Routine that tracks percent of file received
>
>void	checkIndex(void)
>{
>	
>	SFTypeList			typeList={'TEXT','????',0,0};
>	StandardFileReply 	reply;
>	short				fileRefNum;
>	struct dblock 	bIndex;
>	unsigned char 	i=0,j;
>	float			x=0;
>	long			c;
>	char			temp[255];//t[11];
>	unsigned short 	NSarray[4096]; // Support 2MB filesize. Note the 
>spec allows for files with upto 32MB in length.			
>		
>	c=sizeof(struct dblock);	
>	
>	StandardGetFile(nil,0,typeList,&reply);
>	
>	if(reply.sfGood == 0)
>		{
>		
>			return;
>		}	
>		
>	FSpOpenDF(&reply.sfFile,fsRdPerm,&fileRefNum);  // use file 
>selection dialog
>		while ( !(FSRead(fileRefNum,&c,&bIndex)) )  // read in index.
>		{
>			NSarray[bIndex.NS]=12340; 	// mark this sequence
>			
>			//sprintf(temp,"\r%s NS=%d",bIndex.ID,bIndex.NS);	// debug	
>			//TlmDraw(temp);								
>		}
>	FSClose(fileRefNum);
>	
>	// Count how many blocks we have
>	for(i=0,j=0;i<bIndex.NB;i++){
>		if(NSarray[i] == 12340){
>				j++;}
>		}
>	
>	x=(float)j/bIndex.NB; // what percentae of "D" blocks have been 
>captured
>	
>	sprintf(temp,"\r%s NB=%d x=%2.2f \r",bIndex.ID,bIndex.NB,x);	// debug	
>			TlmDraw(temp);
>			
>}
>
>
>
>
>
>
>
>
>
>
>Gilbert Mackall
>N3RZN
>
>----
>Via the amsat-bb mailing list at AMSAT.ORG courtesy of AMSAT-NA.
>To unsubscribe, send "unsubscribe amsat-bb" to Majordomo@amsat.org
>


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

----
Via the amsat-bb mailing list at AMSAT.ORG courtesy of AMSAT-NA.
To unsubscribe, send "unsubscribe amsat-bb" to Majordomo@amsat.org



AMSAT Top AMSAT Home