Exemplo n.º 1
0
void init() {
    SystemInit();

    // Init the LEDs 
    GPIO_Config();                     

    // For FreeRTOS 
    NVIC_Config();

    // Init for debuging
    USART_Config();

    // LED Controller Init
    LEDDecoderInit();

    // Open CRC for emWin
    CRC_Init();    

    // LCD
    STM324xG_LCD_Init();
    sEE_Init();        

    // Touch Screen
    TSC_Config();     

    // emWin
    GUI_Init();      

    // File System
    file_system_init();
}
Exemplo n.º 2
0
void hal_crc_compute_partial_start(const crc_mbed_config_t* config)
{
    if (config == NULL) {
        return;
    }

    width = (config->width == 32) ? kCrcBits32 : kCrcBits16;
    final_xor = config->final_xor;

    crc_config_t platform_config;
    platform_config.polynomial = config->polynomial;
    platform_config.seed = config->initial_xor;
    platform_config.reflectIn = config->reflect_in;
    platform_config.reflectOut = config->reflect_out;
    if ((width == kCrcBits16 && config->final_xor == 0xFFFFU) ||
        (width == kCrcBits32 && config->final_xor == 0xFFFFFFFFU)) {
        platform_config.complementChecksum = true;
    } else {
        platform_config.complementChecksum = false;
    }
    platform_config.crcBits = width;
    platform_config.crcResult = kCrcFinalChecksum;

    CRC_Init(CRC0, &platform_config);
}
Exemplo n.º 3
0
static void CLQW_CalcModelChecksum( const char* modelName, const char* cvarName ) {
	idList<byte> buffer;
	if ( !FS_ReadFile( modelName, buffer ) ) {
		common->Error( "Couldn't load %s", modelName );
	}

	unsigned short crc;
	CRC_Init( &crc );
	for ( int i = 0; i < buffer.Num(); i++ ) {
		CRC_ProcessByte( &crc, buffer[ i ] );
	}

	char st[ 40 ];
	sprintf( st, "%d", ( int )crc );
	Info_SetValueForKey( cls.qh_userinfo, cvarName, st, MAX_INFO_STRING_QW, 64, 64, true, false );

	sprintf( st, "setinfo %s %d", cvarName, ( int )crc );
	CL_AddReliableCommand( st );
}
Exemplo n.º 4
0
/*
===========
CopyQFiles
===========
*/
void CopyQFiles (int blocknum)
{
	int		i, p;
	char	srcfile[1024];
	char	destfile[1024];
	char	name[1024];
	packheader_t	header;
	int		dirlen;
	unsigned short		crc;

	// create a pak file
	pf = pfiles;

	sprintf (destfile, "%spak%i.pak", gamedir, blocknum);
	packhandle = SafeOpenWrite (destfile);
	SafeWrite (packhandle, &header, sizeof(header));	
	
	blocknum++;

	for (i=0 ; i<numsounds ; i++)
	{
		if (precache_sounds_block[i] != blocknum)
			continue;
		sprintf (name, "sound/%s", precache_sounds[i]);
		sprintf (srcfile,"%s%s",gamedir, name);
		PackFile (srcfile, name);
	}
	for (i=0 ; i<nummodels ; i++)
	{
		if (precache_models_block[i] != blocknum)
			continue;
		sprintf (srcfile,"%s%s",gamedir, precache_models[i]);
		PackFile (srcfile, precache_models[i]);
	}
	for (i=0 ; i<numfiles ; i++)
	{
		if (precache_files_block[i] != blocknum)
			continue;
		sprintf (srcfile,"%s%s",gamedir, precache_files[i]);
		PackFile (srcfile, precache_files[i]);
	}
	
	header.id[0] = 'P';
	header.id[1] = 'A';
	header.id[2] = 'C';
	header.id[3] = 'K';
	dirlen = (byte *)pf - (byte *)pfiles;
	header.dirofs = LittleLong(ftell (packhandle));
	header.dirlen = LittleLong(dirlen);
	
	SafeWrite (packhandle, pfiles, dirlen);

	fseek (packhandle, 0, SEEK_SET);
	SafeWrite (packhandle, &header, sizeof(header));
	fclose (packhandle);	

// do a crc of the file
	CRC_Init (&crc);
	for (i=0 ; i<dirlen ; i++)
		CRC_ProcessByte (&crc, ((byte *)pfiles)[i]);

	i = pf - pfiles;
	printf ("%i files packed in %i bytes (%i crc)\n",i, packbytes, crc);
}
Exemplo n.º 5
0
dsk_err_t tios_open(DSK_PDRIVER pDriver, const char *name, char *nameout)
{	
	char *sep;
	struct termios t;
	TERMIOS_REMOTE_DATA *self;
 
	self = (TERMIOS_REMOTE_DATA *)pDriver->dr_remote;	
	if (!self || self->super.rd_class != &rpc_termios) return DSK_ERR_BADPTR;
	if (strncmp(name, "serial:", 7)) return DSK_ERR_NOTME;
	name += 7;
	self->filename = dsk_malloc(strlen(name) + 1);
	if (!self->filename) return DSK_ERR_NOMEM;
	strcpy(self->filename, name);
	sep = strchr(self->filename, ',');
	if (sep) *sep = 0;
/* We have a filename. Let's open it up... */
	self->infd = open(self->filename, O_RDONLY | O_NONBLOCK);
	if (self->infd < 0) 
	{
		dsk_free(self->filename);
		self->filename = NULL;
		return DSK_ERR_SYSERR;
	}	
	self->outfd = open(self->filename, 
				O_CREAT | O_WRONLY | O_APPEND | O_NONBLOCK);
	if (self->outfd < 0) 
	{
		close(self->infd);
		dsk_free(self->filename);
		self->filename = NULL;
		return DSK_ERR_SYSERR;
	}	
/* Comms channels open. See if the user provided a baud rate */	
	self->baud = 9600;
	sep = strchr(name, ',');
/* If the filename has a comma, then the bit after the comma is options. 
 *
 * Option syntax is:
 * {baud}{+crtscts|-crtscts}
 *
 */ 
	if (sep)
	{
		char *opt1, *opt2, *opte;

		++sep;
		opt1 = strstr(sep, "+crtscts");
		opt2 = strstr(sep, "-crtscts");
		opte = strchr(sep, ',');
		if (!opte) opte = sep + strlen(sep);
		if      (opt1 && opt1 < opte) self->crtscts = 1;
		else if (opt2 && opt2 < opte) self->crtscts = 0;
		else                          self->crtscts = 1;
		self->baud = atoi(sep);
		name = sep;
	}
	tcgetattr(self->infd, &t);
	set_params(self, &t);
	tcsetattr(self->infd, TCSADRAIN, &t);
	tcgetattr(self->outfd, &t);
	set_params(self, &t);
	tcsetattr(self->outfd, TCSADRAIN, &t);
	sep = strchr(name, ',');
	if (sep) strcpy(nameout, sep + 1);
	else	 strcpy(nameout, "");	
	CRC_Init(crc16tab);
	return DSK_ERR_OK;
}
Exemplo n.º 6
0
/*************************************************************
Function: void UartInit(uint8_t num,uint32_t baudrate,uint8_t parity)
  Description: 串口初始化函数用于初始化RS232及RS485 将UART配置为中断接收,DMA发送,RS485自动切换方向
  Calls:
  Called By:   main()
  Input:       num 串口号0、1、2
               baudrate 波特率
               parity 校验方式
  Output:      无
  Return:      无
  Others:      无
*************************************************************/
void UartInit ( uint8_t num, uint32_t baudrate, uint8_t parity )
{
    //	uint32_t idx;
    // RS485 configuration
    UART1_RS485_CTRLCFG_Type rs485cfg;
    // UART Configuration structure variable
    UART_CFG_Type UARTConfigStruct;
    // UART FIFO configuration Struct variable
    UART_FIFO_CFG_Type UARTFIFOConfigStruct;
    GPDMA_Channel_CFG_Type GPDMACfg;

    UART_ConfigStructInit ( &UARTConfigStruct );

    UARTConfigStruct.Baud_rate = baudrate;
    UARTConfigStruct.Parity = parity;

    UART_FIFOConfigStructInit ( &UARTFIFOConfigStruct );

    // Enable DMA mode in UART
    UARTFIFOConfigStruct.FIFO_DMAMode = ENABLE;
    // Destination memory - don't care
    GPDMACfgTx.DstMemAddr = 0;
    // Transfer width - don't care
    GPDMACfgTx.TransferWidth = 0;
    // Transfer type
    GPDMACfgTx.TransferType = GPDMA_TRANSFERTYPE_M2P;
    // Source connection - don't care
    GPDMACfgTx.SrcConn = 0;
    // Linker List Item - unused
    GPDMACfgTx.DMALLI = 0;

    rs485cfg.AutoDirCtrl_State = ENABLE;
    rs485cfg.DirCtrlPol_Level = SET;
    rs485cfg.DelayValue = 50;
    rs485cfg.NormalMultiDropMode_State = ENABLE;
    rs485cfg.AutoAddrDetect_State = DISABLE;

    rs485cfg.Rx_State = ENABLE;

    if ( num == 0 )
    {
        //PINSEL_ConfigPin(0,2,1); //UART0
        //PINSEL_ConfigPin(0,3,1); //UART0

        PINSEL_ConfigPin ( 0, 25, 0x03 );
        PINSEL_ConfigPin ( 0, 26, 0xb3 );
        // Initalize UART0 peripheral with given to corresponding parameter
        UART_Init ( RS232_UART, &UARTConfigStruct );
        // Initialize FIFO for UART0 peripheral
        UART_FIFOConfig ( RS232_UART, &UARTFIFOConfigStruct );

        // Enable UART Transmit
        UART_TxCmd ( RS232_UART, ENABLE );
        // channel 0
        GPDMACfgTx.ChannelNum = 0;
        // Source memory
        GPDMACfgTx.SrcMemAddr = ( uint32_t ) &RS232Tx.Buff;
        // Transfer size
        GPDMACfgTx.TransferSize = sizeof ( RS232Tx.Buff );
        // Destination connection
        GPDMACfgTx.DstConn = RS232_TX_PIN;

        RS232Tx.Flag = 0;

        RS232_Err = 0;

        UART_IntConfig ( RS232_UART, UART_INTCFG_RBR, ENABLE );

        UART_IntConfig ( RS232_UART, UART_INTCFG_RLS, ENABLE );

        NVIC_SetPriority ( RS232_IRQN, ( ( 0x01 << 3 ) | 0x01 ) );

        NVIC_EnableIRQ ( RS232_IRQN );
        RS232Rx.Flag = 0 ;
        RS232Rx.Len = 0 ;
        RS232Rx.Idx = 0 ;
    }

    if ( num == 1 )
    {
        PINSEL_ConfigPin ( 2, 0, 2 );
        PINSEL_ConfigPin ( 2, 1, 2 );
        PINSEL_ConfigPin ( 2, 5, 2 ); //U1_DTR
        rs485cfg.DirCtrlPin = UART1_RS485_DIRCTRL_DTR;
        UART_Init ( ( LPC_UART_TypeDef * ) LPC_UART1, &UARTConfigStruct );
        UART_FIFOConfig ( ( LPC_UART_TypeDef * ) LPC_UART1, &UARTFIFOConfigStruct );
        UART_RS485Config ( ( LPC_UART_TypeDef * ) LPC_UART1, &rs485cfg );
        // Enable UART Transmit
        UART_TxCmd ( ( LPC_UART_TypeDef * ) LPC_UART1, ENABLE );
        GPDMACfgTx.ChannelNum = 1;
        // Source memory
        GPDMACfgTx.SrcMemAddr = ( uint32_t ) &RS485Tx1.Buff;
        // Transfer size
        GPDMACfgTx.TransferSize = sizeof ( RS485Tx1.Buff );
        // Destination connection
        GPDMACfgTx.DstConn = GPDMA_CONN_UART1_Tx;
        /* Reset terminal counter */
        RS485Tx1.Flag = 0;
        /* Reset Error counter */
        RS4851_Err = 0;
        /* Enable UART Rx interrupt */
        UART_IntConfig ( ( LPC_UART_TypeDef * ) LPC_UART1, UART_INTCFG_RBR, ENABLE );
        /* Enable UART line status interrupt */
        UART_IntConfig ( ( LPC_UART_TypeDef * ) LPC_UART1, UART_INTCFG_RLS, ENABLE );
        /* preemption = 1, sub-priority = 1 */
        NVIC_SetPriority ( UART1_IRQn, ( ( 0x01 << 3 ) | 0x01 ) );

        /* Enable Interrupt for UART0 channel */
        NVIC_EnableIRQ ( UART1_IRQn );
    }

    if ( num == 2 )
    {
        PINSEL_ConfigPin ( 2, 8, 2 );
        PINSEL_ConfigPin ( 2, 9, 2 );
        PINSEL_ConfigPin ( 2, 6, 4 ); //U2_OE

        UART_Init ( LPC_UART2, &UARTConfigStruct );
        UART_FIFOConfig ( LPC_UART2, &UARTFIFOConfigStruct );
        UART_RS485Config ( ( LPC_UART_TypeDef * ) LPC_UART2, &rs485cfg );
        // Enable UART Transmit
        UART_TxCmd ( LPC_UART2, ENABLE );
        GPDMACfgTx.ChannelNum = 2;
        // Source memory
        GPDMACfgTx.SrcMemAddr = ( uint32_t ) &RS485Tx2.Buff;
        // Transfer size
        GPDMACfgTx.TransferSize = sizeof ( RS485Tx2.Buff );
        // Destination connection
        GPDMACfgTx.DstConn = GPDMA_CONN_UART2_Tx;
        /* Reset terminal counter */
        RS485Tx2.Flag = 0;
        /* Reset Error counter */
        RS4852_Err = 0;
        /* Enable UART Rx interrupt */
        UART_IntConfig ( LPC_UART2, UART_INTCFG_RBR, ENABLE );
        /* Enable UART line status interrupt */
        UART_IntConfig ( LPC_UART2, UART_INTCFG_RLS, ENABLE );
        /* preemption = 1, sub-priority = 1 */
        NVIC_SetPriority ( UART2_IRQn, ( ( 0x01 << 3 ) | 0x01 ) );

        /* Enable Interrupt for UART0 channel */
        NVIC_EnableIRQ ( UART2_IRQn );
    }

    /* Initialize GPDMA controller */
    GPDMA_Init();

    /* Setting GPDMA interrupt */
    // Disable interrupt for DMA
    NVIC_DisableIRQ ( DMA_IRQn );
    /* preemption = 1, sub-priority = 1 */
    NVIC_SetPriority ( DMA_IRQn, ( ( 0x01 << 3 ) | 0x01 ) );

    // Setup channel with given parameter
    GPDMA_Setup ( &GPDMACfgTx );

    // Enable interrupt for DMA
    NVIC_EnableIRQ ( DMA_IRQn );

    // Enable GPDMA channel 0
    //GPDMA_ChannelCmd(0, ENABLE);
    CRC_Init ( CRC_POLY_CRC16 );

}
Exemplo n.º 7
0
/*
============
PR_WriteProgdefs

Writes the global and entity structures out
Returns a crc of the header, to be stored in the progs file for comparison
at load time.
============
*/
int	PR_WriteProgdefs (char *filename)
{
	def_t	*d;
	FILE	*f;
	unsigned short		crc;
	int		c;
	
	printf ("writing %s\n", filename);
	f = fopen (filename, "w");
	
// print global vars until the first field is defined
	fprintf (f,"\n/* file generated by qcc, do not modify */\n\ntypedef struct\n{\tint\tpad[%i];\n", RESERVED_OFS);
	for (d=pr.def_head.next ; d ; d=d->next)
	{
		if (!strcmp (d->name, "end_sys_globals"))
			break;
			
		switch (d->type->type)
		{
		case ev_float:
			fprintf (f, "\tfloat\t%s;\n",d->name);
			break;
		case ev_vector:
			fprintf (f, "\tvec3_t\t%s;\n",d->name);
			d=d->next->next->next;	// skip the elements
			break;
		case ev_string:
			fprintf (f,"\tstring_t\t%s;\n",d->name);
			break;
		case ev_function:
			fprintf (f,"\tfunc_t\t%s;\n",d->name);
			break;
		case ev_entity:
			fprintf (f,"\tint\t%s;\n",d->name);
			break;
		default:
			fprintf (f,"\tint\t%s;\n",d->name);
			break;
		}
	}
	fprintf (f,"} globalvars_t;\n\n");

// print all fields
	fprintf (f,"typedef struct\n{\n");
	for (d=pr.def_head.next ; d ; d=d->next)
	{
		if (!strcmp (d->name, "end_sys_fields"))
			break;
			
		if (d->type->type != ev_field)
			continue;
			
		switch (d->type->aux_type->type)
		{
		case ev_float:
			fprintf (f,"\tfloat\t%s;\n",d->name);
			break;
		case ev_vector:
			fprintf (f,"\tvec3_t\t%s;\n",d->name);
			d=d->next->next->next;	// skip the elements
			break;
		case ev_string:
			fprintf (f,"\tstring_t\t%s;\n",d->name);
			break;
		case ev_function:
			fprintf (f,"\tfunc_t\t%s;\n",d->name);
			break;
		case ev_entity:
			fprintf (f,"\tint\t%s;\n",d->name);
			break;
		default:
			fprintf (f,"\tint\t%s;\n",d->name);
			break;
		}
	}
	fprintf (f,"} entvars_t;\n\n");
	
	fclose (f);
	
// do a crc of the file
	CRC_Init (&crc);
	f = fopen (filename, "r+");
	while ((c = fgetc(f)) != EOF)
		CRC_ProcessByte (&crc, (byte)c);
		
	fprintf (f,"#define PROGHEADER_CRC %i\n", crc);
	fclose (f);

	return crc;
}
Exemplo n.º 8
0
/*
============
main
============
*/
int main (int argc, char **argv)
{
	const char	*psrc;
	void		*src, *src2;
	char	filename[1024];
	int		p, c;
	unsigned short		crc;
	double	start, stop;
	FILE	*f;

	myargc = argc;
	myargv = argv;

	if (CheckParm("-?") || CheckParm("-h") || CheckParm("-help") || CheckParm("--help"))
	{
		printf(" Compiles progs.dat using progs.src in the current directory\n");
		printf(" -src <directory> : Specify source directory\n");
		printf(" -dcc : decompile the progs.dat in the current directory\n");
		printf(" -dcc -fix : fixes mangled names during decompilation\n");
		printf(" -dcc -asm <functionname> : decompile filename to the console\n");
		printf(" -dcc -dump -asm <functionname> : same as above but will show\n\t\tinstructions (opcodes and parms) as well\n");
		exit(0);
	}

	ValidateByteorder ();

	start = GetTime ();

	p = CheckParm("-src");
	if (p && p < argc-1)
	{
		strcpy(sourcedir, argv[p+1]);
		strcat(sourcedir, "/");
		printf("Source directory: %s\n", sourcedir);
	}
	else
	{
		sourcedir[0] = '\0';
	}

	InitData ();

	PR_FILE = stdout;

	p = CheckParm("-dump");
	if (p)
		pr_dumpasm = true;

	// do a crc of the file
	p = CheckParm("-crc");
	if (p)
	{
		CRC_Init (&crc);
		f = fopen ("progdefs.h", "r");
		while ((c = fgetc(f)) != EOF)
			CRC_ProcessByte (&crc, (byte)c);

		printf ("#define PROGHEADER_CRC %i %d\n", crc, (int)crc);
		fclose (f);
		exit (0);
	}

	p = CheckParm("-dcc");
	if (p)
	{
		DEC_ReadData ("progs.dat");
		//fix mangled names if asked
		p = CheckParm ("-fix");
		if (p)
			FILE_NUM_FOR_NAME = 1;

		memset(func_headers, 0, MAX_FUNCTIONS * sizeof(char *));
		memset(temp_val, 0, MAX_REGS * sizeof(char *));

		p = CheckParm("-bbb");
		if (p)
		{
		/*	i= -999;
			for (p = 0; p < numstatements; p++)
				if ((statements+p)->op > i)
					i = (statements+p)->op;
			printf("largest op %d\n", i); */
			FindBuiltinParameters(1);

			exit (0);
		}

		p = CheckParm("-ddd");
		if (p)
		{
			for (p++ ; p < argc ; p++)
			{
				if (argv[p][0] == '-')
					break;
				DccFunctionOP (atoi(argv[p]));
			}
			exit (0);
		}

		p = CheckParm("-info2");
		if (p)
		{
			printf("\n=======================\n");
			printf("fields\n");
			printf("=======================\n");
			PrintFields ();
			printf("\n=======================\n");
			printf("globals\n");
			printf("=======================\n");
			PrintGlobals ();
			exit (0);
		}

		p = CheckParm("-info");
		if (p)
		{
			printf("\n=======================\n");
			printf("strings\n");
			printf("=======================\n");
			PrintStrings ();
			printf("\n=======================\n");
			printf("functions");
			printf("\n=======================\n");
			PrintFunctions ();
			printf("\n=======================\n");
			printf("fields\n");
			printf("=======================\n");
			PrintFields ();
			printf("\n=======================\n");
			printf("globals\n");
			printf("=======================\n");
			PrintGlobals ();
			printf("\n=======================\n");
			printf("pr_globals\n");
			printf("=======================\n");
			PrintPRGlobals ();
			printf("\n=======================\n");
			printf("statements\n");
			printf("=======================\n");
			Printstatements();
			exit (0);
		}

		p = CheckParm("-asm");
		if (p)
		{
			for (p++; p < argc; p++)
			{
				if (argv[p][0] == '-')
					break;
				PR_PrintFunction(argv[p]);
			}
		}
		else
		{
			Dcc_Functions ();
			stop = GetTime ();
			printf("\n%d seconds elapsed.\n", (int)(stop-start));
		}

		exit (0);
	}

	sprintf(filename, "%sprogs.src", sourcedir);
	LoadFile(filename, &src);
	psrc = (char *) src;

	psrc = COM_Parse(psrc);
	if (!psrc)
	{
		Error("No destination filename.  HCC -help for info.\n");
	}

	strcpy(destfile, com_token);
	printf("outputfile: %s\n", destfile);

	pr_dumpasm = false;

	PR_BeginCompilation();

	// compile all the files
	do
	{
		psrc = COM_Parse(psrc);
		if (!psrc)
			break;

		sprintf (filename, "%s%s", sourcedir, com_token);
		printf ("compiling %s\n", filename);
		LoadFile (filename, &src2);

		if (!PR_CompileFile((char *)src2, filename))
			exit (1);

	} while (1);

	if (!PR_FinishCompilation())
	{
		Error ("compilation errors");
	}

	p = CheckParm("-asm");
	if (p)
	{
		for (p++; p < argc; p++)
		{
			if (argv[p][0] == '-')
			{
				break;
			}
			PrintFunction(argv[p]);
		}
	}

	// write progdefs.h
	crc = PR_WriteProgdefs("progdefs.h");
//	crc = 14046;	// FIXME: cheap hack for now!!!!!!!!!!!!!

	// write data file
	WriteData(crc);

	// write files.dat
	WriteFiles();

	stop = GetTime ();
	printf("\n%d seconds elapsed.\n", (int)(stop-start));

	exit (0);
}
Exemplo n.º 9
0
void Peripherals_Init(void)
{
#ifdef NVIC_AUTOINIT
  NVIC_Init();
#endif /* NVIC_AUTOINIT */
#ifdef SIM_AUTOINIT
  SIM_Init();
#endif /* SIM_AUTOINIT */

#ifdef MCM_AUTOINIT
  MCM_Init();
#endif /* MCM_AUTOINIT */
#ifdef PMC_AUTOINIT
  PMC_Init();
#endif /* PMC_AUTOINIT */
#ifdef PORTA_AUTOINIT
  PORTA_Init();
#endif /* PORTA_AUTOINIT */
#ifdef PORTB_AUTOINIT
  PORTB_Init();
#endif /* PORTB_AUTOINIT */
#ifdef PORTC_AUTOINIT
  PORTC_Init();
#endif /* PORTC_AUTOINIT */
#ifdef PORTD_AUTOINIT
  PORTD_Init();
#endif /* PORTD_AUTOINIT */
#ifdef PORTE_AUTOINIT
  PORTE_Init();
#endif /* PORTE_AUTOINIT */

#ifdef ADC0_AUTOINIT
  ADC0_Init();
#endif /* ADC0_AUTOINIT */
#ifdef ADC1_AUTOINIT
  ADC1_Init();
#endif /* ADC1_AUTOINIT */
#ifdef AIPS0_AUTOINIT
  AIPS0_Init();
#endif /* AIPS0_AUTOINIT */
#ifdef AIPS1_AUTOINIT
  AIPS1_Init();
#endif /* AIPS1_AUTOINIT */
#ifdef AXBS_AUTOINIT
  AXBS_Init();
#endif /* AXBS_AUTOINIT */
#ifdef CAN0_AUTOINIT
  CAN0_Init();
#endif /* CAN0_AUTOINIT */
#ifdef CMP0_AUTOINIT
  CMP0_Init();
#endif /* CMP0_AUTOINIT */
#ifdef CMP1_AUTOINIT
  CMP1_Init();
#endif /* CMP1_AUTOINIT */
#ifdef CMP2_AUTOINIT
  CMP2_Init();
#endif /* CMP2_AUTOINIT */
#ifdef CMT_AUTOINIT
  CMT_Init();
#endif /* CMT_AUTOINIT */
#ifdef CRC_AUTOINIT
  CRC_Init();
#endif /* CRC_AUTOINIT */
#ifdef DAC0_AUTOINIT
  DAC0_Init();
#endif /* DAC0_AUTOINIT */
#ifdef DMAMUX_AUTOINIT
  DMAMUX_Init();
#endif /* DMAMUX_AUTOINIT */
#ifdef DMA_AUTOINIT
  DMA_Init();
#endif /* DMA_AUTOINIT */
#ifdef ENET_AUTOINIT
  ENET_Init();
#endif /* ENET_AUTOINIT */
#ifdef EWM_AUTOINIT
  EWM_Init();
#endif /* EWM_AUTOINIT */
#ifdef FB_AUTOINIT
  FB_Init();
#endif /* FB_AUTOINIT */
#ifdef FMC_AUTOINIT
  FMC_Init();
#endif /* FMC_AUTOINIT */
#ifdef FTFE_AUTOINIT
  FTFE_Init();
#endif /* FTFE_AUTOINIT */
#ifdef FTM0_AUTOINIT
  FTM0_Init();
#endif /* FTM0_AUTOINIT */
#ifdef FTM1_AUTOINIT
  FTM1_Init();
#endif /* FTM1_AUTOINIT */
#ifdef FTM2_AUTOINIT
  FTM2_Init();
#endif /* FTM2_AUTOINIT */
#ifdef FTM3_AUTOINIT
  FTM3_Init();
#endif /* FTM3_AUTOINIT */
#ifdef I2C0_AUTOINIT
  I2C0_Init();
#endif /* I2C0_AUTOINIT */
#ifdef I2C1_AUTOINIT
  I2C1_Init();
#endif /* I2C1_AUTOINIT */
#ifdef I2C2_AUTOINIT
  I2C2_Init();
#endif /* I2C2_AUTOINIT */
#ifdef I2S0_AUTOINIT
  I2S0_Init();
#endif /* I2S0_AUTOINIT */
#ifdef LLWU_AUTOINIT
  LLWU_Init();
#endif /* LLWU_AUTOINIT */
#ifdef LPTMR0_AUTOINIT
  LPTMR0_Init();
#endif /* LPTMR0_AUTOINIT */
#ifdef MPU_AUTOINIT
  MPU_Init();
#endif /* MPU_AUTOINIT */
#ifdef PDB0_AUTOINIT
  PDB0_Init();
#endif /* PDB0_AUTOINIT */
#ifdef PIT_AUTOINIT
  PIT_Init();
#endif /* PIT_AUTOINIT */
#ifdef PTA_AUTOINIT
  PTA_Init();
#endif /* PTA_AUTOINIT */
#ifdef PTB_AUTOINIT
  PTB_Init();
#endif /* PTB_AUTOINIT */
#ifdef PTC_AUTOINIT
  PTC_Init();
#endif /* PTC_AUTOINIT */
#ifdef PTD_AUTOINIT
  PTD_Init();
#endif /* PTD_AUTOINIT */
#ifdef PTE_AUTOINIT
  PTE_Init();
#endif /* PTE_AUTOINIT */
#ifdef RCM_AUTOINIT
  RCM_Init();
#endif /* RCM_AUTOINIT */
#ifdef RNG_AUTOINIT
  RNG_Init();
#endif /* RNG_AUTOINIT */
#ifdef RTC_AUTOINIT
  RTC_Init();
#endif /* RTC_AUTOINIT */
#ifdef SDHC_AUTOINIT
  SDHC_Init();
#endif /* SDHC_AUTOINIT */
#ifdef SMC_AUTOINIT
  SMC_Init();
#endif /* SMC_AUTOINIT */
#ifdef SPI0_AUTOINIT
  SPI0_Init();
#endif /* SPI0_AUTOINIT */
#ifdef SPI1_AUTOINIT
  SPI1_Init();
#endif /* SPI1_AUTOINIT */
#ifdef SPI2_AUTOINIT
  SPI2_Init();
#endif /* SPI2_AUTOINIT */
#ifdef SystemControl_AUTOINIT
  SystemControl_Init();
#endif /* SystemControl_AUTOINIT */
#ifdef SysTick_AUTOINIT
  SysTick_Init();
#endif /* SysTick_AUTOINIT */
#ifdef UART0_AUTOINIT
  UART0_Init();
#endif /* UART0_AUTOINIT */
#ifdef UART1_AUTOINIT
  UART1_Init();
#endif /* UART1_AUTOINIT */
#ifdef UART2_AUTOINIT
  UART2_Init();
#endif /* UART2_AUTOINIT */
#ifdef UART3_AUTOINIT
  UART3_Init();
#endif /* UART3_AUTOINIT */
#ifdef UART4_AUTOINIT
  UART4_Init();
#endif /* UART4_AUTOINIT */
#ifdef UART5_AUTOINIT
  UART5_Init();
#endif /* UART5_AUTOINIT */
#ifdef USB0_AUTOINIT
  USB0_Init();
#endif /* USB0_AUTOINIT */
#ifdef USBDCD_AUTOINIT
  USBDCD_Init();
#endif /* USBDCD_AUTOINIT */
#ifdef VREF_AUTOINIT
  VREF_Init();
#endif /* VREF_AUTOINIT */
#ifdef WDOG_AUTOINIT
  WDOG_Init();
#endif /* WDOG_AUTOINIT */
}
void Peripherals_Init(void)
{
#ifdef NVIC_AUTOINIT
  NVIC_Init();
#endif /* NVIC_AUTOINIT */
#ifdef SIM_AUTOINIT
  SIM_Init();
#endif /* SIM_AUTOINIT */

#ifdef MCM_AUTOINIT
  MCM_Init();
#endif /* MCM_AUTOINIT */
#ifdef PMC_AUTOINIT
  PMC_Init();
#endif /* PMC_AUTOINIT */
#ifdef PORTA_AUTOINIT
  PORTA_Init();
#endif /* PORTA_AUTOINIT */
#ifdef PORTB_AUTOINIT
  PORTB_Init();
#endif /* PORTB_AUTOINIT */
#ifdef PORTC_AUTOINIT
  PORTC_Init();
#endif /* PORTC_AUTOINIT */
#ifdef PORTD_AUTOINIT
  PORTD_Init();
#endif /* PORTD_AUTOINIT */
#ifdef PORTE_AUTOINIT
  PORTE_Init();
#endif /* PORTE_AUTOINIT */

#ifdef ADC0_AUTOINIT
  ADC0_Init();
#endif /* ADC0_AUTOINIT */
#ifdef ADC1_AUTOINIT
  ADC1_Init();
#endif /* ADC1_AUTOINIT */
#ifdef CMP0_AUTOINIT
  CMP0_Init();
#endif /* CMP0_AUTOINIT */
#ifdef CMP1_AUTOINIT
  CMP1_Init();
#endif /* CMP1_AUTOINIT */
#ifdef CRC_AUTOINIT
  CRC_Init();
#endif /* CRC_AUTOINIT */
#ifdef DAC0_AUTOINIT
  DAC0_Init();
#endif /* DAC0_AUTOINIT */
#ifdef DMAMUX_AUTOINIT
  DMAMUX_Init();
#endif /* DMAMUX_AUTOINIT */
#ifdef DMA_AUTOINIT
  DMA_Init();
#endif /* DMA_AUTOINIT */
#ifdef EWM_AUTOINIT
  EWM_Init();
#endif /* EWM_AUTOINIT */
#ifdef FTFA_AUTOINIT
  FTFA_Init();
#endif /* FTFA_AUTOINIT */
#ifdef FTM0_AUTOINIT
  FTM0_Init();
#endif /* FTM0_AUTOINIT */
#ifdef FTM1_AUTOINIT
  FTM1_Init();
#endif /* FTM1_AUTOINIT */
#ifdef FTM2_AUTOINIT
  FTM2_Init();
#endif /* FTM2_AUTOINIT */
#ifdef GPIOA_AUTOINIT
  GPIOA_Init();
#endif /* GPIOA_AUTOINIT */
#ifdef GPIOB_AUTOINIT
  GPIOB_Init();
#endif /* GPIOB_AUTOINIT */
#ifdef GPIOC_AUTOINIT
  GPIOC_Init();
#endif /* GPIOC_AUTOINIT */
#ifdef GPIOD_AUTOINIT
  GPIOD_Init();
#endif /* GPIOD_AUTOINIT */
#ifdef GPIOE_AUTOINIT
  GPIOE_Init();
#endif /* GPIOE_AUTOINIT */
#ifdef I2C0_AUTOINIT
  I2C0_Init();
#endif /* I2C0_AUTOINIT */
#ifdef LLWU_AUTOINIT
  LLWU_Init();
#endif /* LLWU_AUTOINIT */
#ifdef LPTMR0_AUTOINIT
  LPTMR0_Init();
#endif /* LPTMR0_AUTOINIT */
#ifdef PDB0_AUTOINIT
  PDB0_Init();
#endif /* PDB0_AUTOINIT */
#ifdef RCM_AUTOINIT
  RCM_Init();
#endif /* RCM_AUTOINIT */
#ifdef SMC_AUTOINIT
  SMC_Init();
#endif /* SMC_AUTOINIT */
#ifdef SPI0_AUTOINIT
  SPI0_Init();
#endif /* SPI0_AUTOINIT */
#ifdef SystemControl_AUTOINIT
  SystemControl_Init();
#endif /* SystemControl_AUTOINIT */
#ifdef SysTick_AUTOINIT
  SysTick_Init();
#endif /* SysTick_AUTOINIT */
#ifdef UART0_AUTOINIT
  UART0_Init();
#endif /* UART0_AUTOINIT */
#ifdef UART1_AUTOINIT
  UART1_Init();
#endif /* UART1_AUTOINIT */
#ifdef WDOG_AUTOINIT
  WDOG_Init();
#endif /* WDOG_AUTOINIT */
}
Exemplo n.º 11
0
/*
===============
PR_LoadProgs
===============
*/
void PR_LoadProgs (void)
{
	int			i;

	// flush the non-C variable lookup cache
	for (i = 0; i < GEFV_CACHESIZE; i++)
		gefvCache[i].field[0] = 0;

	CRC_Init (&pr_crc);

	progs = (dprograms_t *)COM_LoadHunkFile ("progs.dat", NULL);
	if (!progs)
		Host_Error ("PR_LoadProgs: couldn't load progs.dat");
	Con_DPrintf ("Programs occupy %iK.\n", com_filesize/1024);

	for (i = 0; i < com_filesize; i++)
		CRC_ProcessByte (&pr_crc, ((byte *)progs)[i]);

	// byte swap the header
	for (i = 0; i < (int) sizeof(*progs) / 4; i++)
		((int *)progs)[i] = LittleLong ( ((int *)progs)[i] );

	if (progs->version != PROG_VERSION)
		Host_Error ("progs.dat has wrong version number (%i should be %i)", progs->version, PROG_VERSION);
	if (progs->crc != PROGHEADER_CRC)
		Host_Error ("progs.dat system vars have been modified, progdefs.h is out of date");

	pr_functions = (dfunction_t *)((byte *)progs + progs->ofs_functions);
	pr_strings = (char *)progs + progs->ofs_strings;
	if (progs->ofs_strings + progs->numstrings >= com_filesize)
		Host_Error ("progs.dat strings go past end of file\n");

	// initialize the strings
	pr_numknownstrings = 0;
	pr_maxknownstrings = 0;
	pr_stringssize = progs->numstrings;
	if (pr_knownstrings)
		Z_Free ((void *)pr_knownstrings);
	pr_knownstrings = NULL;
	PR_SetEngineString("");

	pr_globaldefs = (ddef_t *)((byte *)progs + progs->ofs_globaldefs);
	pr_fielddefs = (ddef_t *)((byte *)progs + progs->ofs_fielddefs);
	pr_statements = (dstatement_t *)((byte *)progs + progs->ofs_statements);

	pr_global_struct = (globalvars_t *)((byte *)progs + progs->ofs_globals);
	pr_globals = (float *)pr_global_struct;

	// byte swap the lumps
	for (i = 0; i < progs->numstatements; i++)
	{
		pr_statements[i].op = LittleShort(pr_statements[i].op);
		pr_statements[i].a = LittleShort(pr_statements[i].a);
		pr_statements[i].b = LittleShort(pr_statements[i].b);
		pr_statements[i].c = LittleShort(pr_statements[i].c);
	}

	for (i = 0; i < progs->numfunctions; i++)
	{
		pr_functions[i].first_statement = LittleLong (pr_functions[i].first_statement);
		pr_functions[i].parm_start = LittleLong (pr_functions[i].parm_start);
		pr_functions[i].s_name = LittleLong (pr_functions[i].s_name);
		pr_functions[i].s_file = LittleLong (pr_functions[i].s_file);
		pr_functions[i].numparms = LittleLong (pr_functions[i].numparms);
		pr_functions[i].locals = LittleLong (pr_functions[i].locals);
	}

	for (i = 0; i < progs->numglobaldefs; i++)
	{
		pr_globaldefs[i].type = LittleShort (pr_globaldefs[i].type);
		pr_globaldefs[i].ofs = LittleShort (pr_globaldefs[i].ofs);
		pr_globaldefs[i].s_name = LittleLong (pr_globaldefs[i].s_name);
	}

	pr_alpha_supported = false; //johnfitz

	for (i = 0; i < progs->numfielddefs; i++)
	{
		pr_fielddefs[i].type = LittleShort (pr_fielddefs[i].type);
		if (pr_fielddefs[i].type & DEF_SAVEGLOBAL)
			Host_Error ("PR_LoadProgs: pr_fielddefs[i].type & DEF_SAVEGLOBAL");
		pr_fielddefs[i].ofs = LittleShort (pr_fielddefs[i].ofs);
		pr_fielddefs[i].s_name = LittleLong (pr_fielddefs[i].s_name);

		//johnfitz -- detect alpha support in progs.dat
		if (!strcmp(pr_strings + pr_fielddefs[i].s_name,"alpha"))
			pr_alpha_supported = true;
		//johnfitz
	}

	for (i = 0; i < progs->numglobals; i++)
		((int *)pr_globals)[i] = LittleLong (((int *)pr_globals)[i]);

	pr_edict_size = progs->entityfields * 4 + sizeof(edict_t) - sizeof(entvars_t);
	// round off to next highest whole word address (esp for Alpha)
	// this ensures that pointers in the engine data area are always
	// properly aligned
	pr_edict_size += sizeof(void *) - 1;
	pr_edict_size &= ~(sizeof(void *) - 1);
}
Exemplo n.º 12
0
/*
===============
PR_LoadProgs
===============
*/
void PR_LoadProgs (void)
{
	int		i;

// flush the non-C variable lookup cache
	for (i=0 ; i<GEFV_CACHESIZE ; i++)
		gefvCache[i].field[0] = 0;

	CRC_Init (&pr_crc);

	progs = (dprograms_t *)COM_LoadHunkFile ("progs.dat");
	if (!progs)
		Sys_Error ("PR_LoadProgs: couldn't load progs.dat");
	Con_DPrintf ("Programs occupy %iK.\n", com_filesize/1024);

	for (i=0 ; i<com_filesize ; i++)
		CRC_ProcessByte (&pr_crc, ((byte *)progs)[i]);

// byte swap the header
	for (i=0 ; i<sizeof(*progs)/4 ; i++)
		((int *)progs)[i] = LittleLong ( ((int *)progs)[i] );		

	if (progs->version != PROG_VERSION)
		Sys_Error ("progs.dat has wrong version number (%i should be %i)", progs->version, PROG_VERSION);
	if (progs->crc != PROGHEADER_CRC)
		Sys_Error ("progs.dat system vars have been modified, progdefs.h is out of date");

	pr_functions = (dfunction_t *)((byte *)progs + progs->ofs_functions);
	pr_strings = (char *)progs + progs->ofs_strings;
	pr_globaldefs = (ddef_t *)((byte *)progs + progs->ofs_globaldefs);
	pr_fielddefs = (ddef_t *)((byte *)progs + progs->ofs_fielddefs);
	pr_statements = (dstatement_t *)((byte *)progs + progs->ofs_statements);

	pr_global_struct = (globalvars_t *)((byte *)progs + progs->ofs_globals);
	pr_globals = (float *)pr_global_struct;
	
	pr_edict_size = progs->entityfields * 4 + sizeof (edict_t) - sizeof(entvars_t);
	
// byte swap the lumps
	for (i=0 ; i<progs->numstatements ; i++)
	{
		pr_statements[i].op = LittleShort(pr_statements[i].op);
		pr_statements[i].a = LittleShort(pr_statements[i].a);
		pr_statements[i].b = LittleShort(pr_statements[i].b);
		pr_statements[i].c = LittleShort(pr_statements[i].c);
	}

	for (i=0 ; i<progs->numfunctions; i++)
	{
	pr_functions[i].first_statement = LittleLong (pr_functions[i].first_statement);
	pr_functions[i].parm_start = LittleLong (pr_functions[i].parm_start);
	pr_functions[i].s_name = LittleLong (pr_functions[i].s_name);
	pr_functions[i].s_file = LittleLong (pr_functions[i].s_file);
	pr_functions[i].numparms = LittleLong (pr_functions[i].numparms);
	pr_functions[i].locals = LittleLong (pr_functions[i].locals);
	}	

	for (i=0 ; i<progs->numglobaldefs ; i++)
	{
		pr_globaldefs[i].type = LittleShort (pr_globaldefs[i].type);
		pr_globaldefs[i].ofs = LittleShort (pr_globaldefs[i].ofs);
		pr_globaldefs[i].s_name = LittleLong (pr_globaldefs[i].s_name);
	}

	for (i=0 ; i<progs->numfielddefs ; i++)
	{
		pr_fielddefs[i].type = LittleShort (pr_fielddefs[i].type);
		if (pr_fielddefs[i].type & DEF_SAVEGLOBAL)
			Sys_Error ("PR_LoadProgs: pr_fielddefs[i].type & DEF_SAVEGLOBAL");
		pr_fielddefs[i].ofs = LittleShort (pr_fielddefs[i].ofs);
		pr_fielddefs[i].s_name = LittleLong (pr_fielddefs[i].s_name);
	}

	for (i=0 ; i<progs->numglobals ; i++)
		((int *)pr_globals)[i] = LittleLong (((int *)pr_globals)[i]);
}
Exemplo n.º 13
0
/**************************************************************************
DOES:    Processes packet transmission
RETURNS: TRUE, if an error occured during transmission
GLOBALS: SerialProtocol_Out, SerialProtocol_TransmitErrorCounter
**************************************************************************/
static UNSIGNED8 SerialProtocol_ProcessTransmit (
  void
  )
{
  UNSIGNED8 return_val = FALSE;
  static UNSIGNED16 crc;

  // Depending on the state, send the next byte from the transmit buffer.
  switch ( mSerialProtocol_SendState.send_state )
  {
    case SENDSTATE_IDLE:

      // If there is something to send, start
      if (!BUFFER_EMPTY(txbuffer))
      {
        mSerialProtocol_SendState.send_state = SENDSTATE_START;
      }
      break;

    // The first byte is the start-of-header
    case SENDSTATE_START:

      if (COM_SendByte(PROT_SOH))
      {
        // Initialize CRC calculator
        crc = CRC_Init();

        // Next byte is the length
        mSerialProtocol_SendState.send_state = SENDSTATE_LENGTH;
      }
      break;


    // Send the length
    case SENDSTATE_LENGTH:

      if (COM_SendByte(txbuffer.nextread->dlc))
      {
        // Add to CRC
        CRC_Add(txbuffer.nextread->dlc, &crc);

        if (txbuffer.nextread->dlc == 0)
        { // No data: Next state is the low checksum bytes
          mSerialProtocol_SendState.send_state = SENDSTATE_CHECKL;
        }
        else
        { // Next state is the field of data bytes
          mSerialProtocol_SendState.send_state = SENDSTATE_DATA;
        }
      }
      break;


    // Send data
    case SENDSTATE_DATA:

      if (COM_SendByte(txbuffer.nextread->data[mSerialProtocol_SendState.num_bytes]))
      {
        // Add to CRC
        CRC_Add(txbuffer.nextread->data[mSerialProtocol_SendState.num_bytes], &crc);

        mSerialProtocol_SendState.num_bytes++;

        if (mSerialProtocol_SendState.num_bytes == txbuffer.nextread->dlc)
        { // All data bytes sent: Now checksum
          mSerialProtocol_SendState.send_state  = SENDSTATE_CHECKL;
        }
        else
        { // Otherwise stay here
          mSerialProtocol_SendState.send_state  = SENDSTATE_DATA;
        }
      }
      break;

    // Send checksum low byte
    case SENDSTATE_CHECKL:

      mSerialProtocol_SendState.checksum = crc;

      // Send low byte
      if(COM_SendByte((UNSIGNED8)(mSerialProtocol_SendState.checksum & 0x00FFU)))
      {
        // Now send high byte of checksum
        mSerialProtocol_SendState.send_state  = SENDSTATE_CHECKH;
      }
      break;


    // End-of-packet: Send high byte of checksum
    case SENDSTATE_CHECKH:

      // Send high byte
      if(COM_SendByte((UNSIGNED8)(mSerialProtocol_SendState.checksum >> 8)))
      {
        // finished sending packet
        // Now we are ready for the next packet
        SerialProtocol_ResetTransmitHandler();
        BUFFER_INCREAD(txbuffer);
      }
      break;

    default:  // never be here, if we get here by error, reset state machine
      SerialProtocol_ResetTransmitHandler();
      break;
  }

  return (return_val);
}
Exemplo n.º 14
0
/**************************************************************************
DOES:    Processes received bytes. Handles synchronization packets
         autonomously.
RETURNS: TRUE, if a complete, correct command was received and
         'SerialProtocol_In' contains the command.
GLOBALS: SerialProtocol_In, SerialProtocol_ReceiveErrorCounter
**************************************************************************/
static UNSIGNED8 SerialProtocol_ProcessReceive (
  void
  )
{
  UNSIGNED8 return_val = FALSE;
  UNSIGNED8 byte;
  static UNSIGNED16 mycrc;

  // Only process receive packets if not currently sending
  if (mSerialProtocol_SendState.send_state == SENDSTATE_IDLE)
  { 
    // Get the next byte from the receive buffer, if available, and process.
    if (COM_GetByte(&byte))
    {
      // Arm the timer for receiving the next byte
      mByteTimeout = MCOHW_GetTime() + SERIALPROTOCOL_NEXTBYTETIMEOUT;

      switch ( mSerialProtocol_ParseState.parse_state )
      {
        // The first byte is the start-of-header
        case PARSESTATE_START:

          // Test if start-of-header was received
          if (byte == PROT_SOH)
          {
            // Initialize CRC calculator
            mycrc = CRC_Init();

            // Packet reception started - now monitor subsequent bytes
            mSerialProtocol_ParseState.wait_next   = TRUE;

            // Next byte is the length
            mSerialProtocol_ParseState.parse_state = PARSESTATE_LENGTH;
          }
          else
          { // otherwise ignore byte and stay in this state
            ;
          }
          break;


        // Get the length
        case PARSESTATE_LENGTH:

          // Add to CRC
          CRC_Add(byte, &mycrc);

          mSerialProtocol_ParseState.dlc = byte;  // Memorize number of data bytes

          if (byte > MAX_PACKET_DATA)
          { // If this packet is too long: Error
            mSerialProtocol_ParseState.err = TRUE;
          }
          if (byte == 0)
          { // No data: Next state is the low checksum bytes
            mSerialProtocol_ParseState.parse_state = PARSESTATE_CHECKL;
          }
          else
          { // Next state is the field of data bytes
            mSerialProtocol_ParseState.parse_state = PARSESTATE_DATA;
          }
          break;


        // Get data
        case PARSESTATE_DATA:

          // Add to CRC
          CRC_Add(byte, &mycrc);

          // Only receive data if no error, packet is for us, and not too long
          if ( !mSerialProtocol_ParseState.err       &&
               !mSerialProtocol_ParseState.ignore      &&
               (mSerialProtocol_ParseState.num_bytes < MAX_PACKET_DATA) )
          { // If possible, save data in buffer
            rxbuffer.nextwrite->data[mSerialProtocol_ParseState.num_bytes] = byte;
          }

          // Increment counter for received data bytes
          mSerialProtocol_ParseState.num_bytes++;

          if (mSerialProtocol_ParseState.num_bytes == mSerialProtocol_ParseState.dlc)
          { // All data bytes received: Now checksum
            mSerialProtocol_ParseState.parse_state  = PARSESTATE_CHECKL;
          }
          else
          { // Otherwise stay here
            mSerialProtocol_ParseState.parse_state  = PARSESTATE_DATA;
          }
          break;

        // Get checksum low byte
        case PARSESTATE_CHECKL:

          // Memorize low byte
          mSerialProtocol_ParseState.crc = (UNSIGNED16)byte;

          // Now get high byte of checksum
          mSerialProtocol_ParseState.parse_state  = PARSESTATE_CHECKH;
          break;


        // End-of-packet: Get checksum and compare with the calculated one
        case PARSESTATE_CHECKH:

          // If this packet is not for us, don't do anything (just keep on parsing)
          if (!mSerialProtocol_ParseState.ignore)
          {
            // Add high byte of received checksum
            mSerialProtocol_ParseState.crc |= (UNSIGNED16)byte << 8;

            if (mSerialProtocol_ParseState.crc != mycrc)
            {
              mSerialProtocol_ParseState.err = TRUE;
            }

            // if packet received correct then store in receive buffer
            if (!mSerialProtocol_ParseState.err)
            {
              rxbuffer.nextwrite->dlc = mSerialProtocol_ParseState.dlc;
              BUFFER_INCWRITE(rxbuffer);
              // if overflow then lose oldest packet
              if (BUFFER_EMPTY(rxbuffer))
              {
                BUFFER_INCREAD(rxbuffer);
              }
              return_val = TRUE;
            }
          }

          // Now we are ready for the next packet
          mSerialProtocol_ParseState.wait_next = FALSE;
          SerialProtocol_ResetReceiveHandler();
          break;

        default:  // never be here, reset
          mSerialProtocol_ParseState.wait_next = FALSE;
          SerialProtocol_ResetReceiveHandler();
          break;
      }
    }
    else
    {
      // If no byte has been received, monitor timeout if we are in-packet
      if ( mSerialProtocol_ParseState.wait_next &&
           MCOHW_IsTimeExpired(mByteTimeout)
         )
      {
        // In-packet bytes have to arrive in time. After timeout resort to
        // the ground state to be ready for the next packet reception.
        mSerialProtocol_ParseState.wait_next = FALSE;
        SerialProtocol_ResetReceiveHandler();
        SerialProtocol_ReceiveErrorCounter++;
      }
    }
  }

  return (return_val);
}
Exemplo n.º 15
0
void CRC_Reset(CRC_Type *base)
{
    crc_config_t config;
    CRC_GetDefaultConfig(&config);
    CRC_Init(base, &config);
}
Exemplo n.º 16
0
dsk_err_t w32serial_open(DSK_PDRIVER pDriver, const char *name, char *nameout)
{	
	char *sep;
	W32SERIAL_REMOTE_DATA *self;
 
	self = (W32SERIAL_REMOTE_DATA *)pDriver->dr_remote;	
	if (!self || self->super.rd_class != &rpc_w32serial) return DSK_ERR_BADPTR;
	if (strncmp(name, "serial:", 7)) return DSK_ERR_NOTME;
	name += 7;
	self->filename = dsk_malloc(strlen(name) + 1);
	if (!self->filename) return DSK_ERR_NOMEM;
	strcpy(self->filename, name);
	sep = strchr(self->filename, ',');
	if (sep) *sep = 0;
/* We have a filename. Let's open it up... */
	self->hComm = CreateFile(self->filename, GENERIC_READ | GENERIC_WRITE,
			0,      /* Exclusive access */
			NULL,   /* No security */
			OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL,
			NULL);
	if (self->hComm == INVALID_HANDLE_VALUE) 
	{
		dsk_free(self->filename);
		self->filename = NULL;
		return DSK_ERR_SYSERR;
	}	
/* Comms channels open. See if the user provided a baud rate */	
	self->baud = 9600;
	sep = strchr(name, ',');
/* If the filename has a comma, then the bit after the comma is options. 
 *
 * Option syntax is:
 * {baud}{+crtscts|-crtscts}
 *
 */ 
	if (sep)
	{
		char *opt1, *opt2, *opte;

		++sep;
		opt1 = strstr(sep, "+crtscts");
		opt2 = strstr(sep, "-crtscts");
		opte = strchr(sep, ',');
		if (!opte) opte = sep + strlen(sep);
		if      (opt1 && opt1 < opte) self->crtscts = 1;
		else if (opt2 && opt2 < opte) self->crtscts = 0;
		else                          self->crtscts = 1;
		self->baud = atoi(sep);
		name = sep;
	}
        memset(&self->dcb, 0, sizeof(self->dcb));
	self->dcb.DCBlength = sizeof(self->dcb);
	self->dcb.Parity   = NOPARITY;
	self->dcb.fParity  = 0;
	self->dcb.fBinary  = 1;
	self->dcb.StopBits = ONESTOPBIT;
	self->dcb.ByteSize = 8;
	self->dcb.BaudRate = self->baud;
	if (self->crtscts)
	{
		self->dcb.fOutxCtsFlow = 1;
		self->dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
	}
	SetCommState(self->hComm, &self->dcb);
	SetCommTimeouts(self->hComm, &timeouts);

	sep = strchr(name, ',');
	if (sep) strcpy(nameout, sep + 1);
	else	 strcpy(nameout, "");	
	CRC_Init(crc16tab);
	return DSK_ERR_OK;
}
Exemplo n.º 17
0
static int ProcessInQueue (SerialLine *p)
{
	int	b;

	while (1)
	{
		b = TTY_ReadByte(p->tty);
		if (b == ERR_TTY_NODATA)
			break;

		if (b == ERR_TTY_LINE_STATUS)
		{
			p->currState = STATE_ABORT;
			continue;
		}
		if (b == ERR_TTY_MODEM_STATUS)
		{
			p->currState = STATE_ABORT;
			return -1;
		}

		if (b == ESCAPE_COMMAND)
		{
			if (p->currState != STATE_ESCAPE)
			{
				p->prevState = p->currState;
				p->currState = STATE_ESCAPE;
				continue;
			}
		}

		if (p->currState == STATE_ESCAPE)
		{
			if (b == ESCAPE_EOM)
			{
				if (p->prevState == STATE_ABORT)
				{
					p->currState = STATE_READY;
					p->lengthFound = 0;
					continue;
				}

				if (p->prevState != STATE_EOM)
				{
					p->currState = STATE_READY;
					p->lengthFound = 0;
					Con_DPrintf("Serial: premature EOM\n");
					continue;
				}

				switch (p->mtype)
				{
				case MTYPE_RELIABLE:
					Con_DPrintf("Serial: sending ack %u\n", p->sequence);
					Serial_SendACK (p, p->sequence);
					if (p->sequence == p->sock->receiveSequence)
					{
						p->sock->receiveSequence = (p->sequence + 1) & 0xff;
						p->sock->receiveMessageLength += p->lengthFound;
					}
					else
					{
						Con_DPrintf("Serial: reliable out of order; got %u wanted %u\n",
									p->sequence, p->sock->receiveSequence);
					}
					break;

				case MTYPE_UNRELIABLE:
					p->sock->unreliableReceiveSequence = (p->sequence + 1) & 0xff;
					p->sock->receiveMessageLength += p->lengthFound;
					break;

				case MTYPE_ACK:
					Con_DPrintf("Serial: got ack %u\n", p->sequence);
					if (p->sequence == p->sock->sendSequence)
					{
						p->sock->sendSequence = (p->sock->sendSequence + 1) & 0xff;
						p->sock->canSend = true;
					}
					else
					{
						Con_DPrintf("Serial: ack out of order; got %u wanted %u\n",
									p->sequence, p->sock->sendSequence);
					}
					break;

				case MTYPE_CONTROL:
					p->sock->receiveMessageLength += p->lengthFound;
					break;
				}

				p->currState = STATE_READY;
				p->lengthFound = 0;
				continue;
			}

			if (b != ESCAPE_COMMAND)
			{
				p->currState = STATE_ABORT;
				Con_DPrintf("Serial: Bad escape sequence\n");
				continue;
			}

			/* b == ESCAPE_COMMAND */
			p->currState = p->prevState;
		}

		p->prevState = p->currState;

/* DEBUG */
		if (p->sock->receiveMessageLength + p->lengthFound > NET_MAXMESSAGE)
		{
			Con_DPrintf("Serial blew out receive buffer: %u\n",
					p->sock->receiveMessageLength + p->lengthFound);
			p->currState = STATE_ABORT;
		}
		if (p->sock->receiveMessageLength + p->lengthFound == NET_MAXMESSAGE)
		{
			Con_DPrintf("Serial hit receive buffer limit: %u\n",
					p->sock->receiveMessageLength + p->lengthFound);
			p->currState = STATE_ABORT;
		}
/* end DEBUG */

		switch (p->currState)
		{
		case STATE_READY:
			CRC_Init(&p->crcValue);
			CRC_ProcessByte(&p->crcValue, b);
			if (p->client)
			{
				if ((b & MTYPE_CLIENT) != 0)
				{
					p->currState = STATE_ABORT;
					Con_DPrintf("Serial: client got own message\n");
					break;
				}
			}
			else
			{
				if ((b & MTYPE_CLIENT) == 0)
				{
					p->currState = STATE_ABORT;
					Con_DPrintf("Serial: server got own message\n");
					break;
				}
				b &= 0x7f;
			}
			p->mtype = b;
			if (b != MTYPE_CONTROL)
				p->currState = STATE_SEQUENCE;
			else
				p->currState = STATE_LENGTH1;
			if (p->mtype < MTYPE_ACK)
			{
				p->sock->receiveMessage[p->sock->receiveMessageLength] = b;
				p->lengthFound++;
			}
			break;

		case STATE_SEQUENCE:
			p->sequence = b;
			CRC_ProcessByte(&p->crcValue, b);
			if (p->mtype != MTYPE_ACK)
				p->currState = STATE_LENGTH1;
			else
				p->currState = STATE_CRC1;
			break;

		case STATE_LENGTH1:
			p->lengthStated = b * 256;
			CRC_ProcessByte(&p->crcValue, b);
			p->currState = STATE_LENGTH2;
			break;

		case STATE_LENGTH2:
			p->lengthStated += b;
			CRC_ProcessByte(&p->crcValue, b);
			if (p->mtype == MTYPE_RELIABLE && p->lengthStated > MAX_MSGLEN)
			{
				p->currState = STATE_ABORT;
				Con_DPrintf("Serial: bad reliable message length %u\n", p->lengthStated);
			}
			else if (p->mtype == MTYPE_UNRELIABLE && p->lengthStated > MAX_DATAGRAM)
			{
				p->currState = STATE_ABORT;
				Con_DPrintf("Serial: bad unreliable message length %u\n", p->lengthStated);
			}
			else
			{
				p->currState = STATE_DATA;
				if (p->mtype < MTYPE_ACK)
				{
					p->sock->receiveMessage [p->sock->receiveMessageLength + 1] =
									 (((short) p->lengthStated) & 0x00ff);
					p->sock->receiveMessage [p->sock->receiveMessageLength + 2] =
									 (((short) p->lengthStated) & 0xff00) >> 8;
					p->lengthFound += 2;
				}
			}
			break;

		case STATE_DATA:
			p->sock->receiveMessage[p->sock->receiveMessageLength + p->lengthFound] = b;
			p->lengthFound++;
			CRC_ProcessByte(&p->crcValue, b);
			if (p->lengthFound == p->lengthStated + 3)
				p->currState = STATE_CRC1;
			break;

		case STATE_CRC1:
			p->crcStated = b * 256;
			p->currState = STATE_CRC2;
			break;

		case STATE_CRC2:
			p->crcStated += b;
			if (p->crcStated == CRC_Value(p->crcValue))
			{
				p->currState = STATE_EOM;
			}
			else
			{
				p->currState = STATE_ABORT;
				Con_DPrintf("Serial: Bad crc\n");
			}
			break;

		case STATE_EOM:
			p->currState = STATE_ABORT;
			Con_DPrintf("Serial: Bad message format\n");
			break;

		case STATE_ABORT:
			break;
		}
	}
Exemplo n.º 18
0
/*
=================
Mod_LoadAliasModel
=================
*/
void Mod_LoadAliasModel (model_t *mod, void *buffer)
{
	int					i, j;
	mdl_t				*pinmodel;
	stvert_t			*pinstverts;
	dtriangle_t			*pintriangles;
	int					version, numframes;
	int					size;
	daliasframetype_t	*pframetype;
	daliasskintype_t	*pskintype;
	int					start, end, total;

	if (!strcmp(loadmodel->name, "progs/player.mdl") ||
		!strcmp(loadmodel->name, "progs/eyes.mdl")) {
		unsigned short crc;
		byte *p;
		int len;
		char st[40];

		CRC_Init(&crc);
		for (len = com_filesize, p = buffer; len; len--, p++)
			CRC_ProcessByte(&crc, *p);
	
		sprintf(st, "%d", (int) crc);
		Info_SetValueForKey (cls.userinfo, 
			!strcmp(loadmodel->name, "progs/player.mdl") ? pmodel_name : emodel_name,
			st, MAX_INFO_STRING);

		if (cls.state >= ca_connected) {
			MSG_WriteByte (&cls.netchan.message, clc_stringcmd);
			sprintf(st, "setinfo %s %d", 
				!strcmp(loadmodel->name, "progs/player.mdl") ? pmodel_name : emodel_name,
				(int)crc);
			SZ_Print (&cls.netchan.message, st);
		}
	}
	
	start = Hunk_LowMark ();

	pinmodel = (mdl_t *)buffer;

	version = LittleLong (pinmodel->version);
	if (version != ALIAS_VERSION)
		Sys_Error ("%s has wrong version number (%i should be %i)",
				 mod->name, version, ALIAS_VERSION);

//
// allocate space for a working header, plus all the data except the frames,
// skin and group info
//
	size = 	sizeof (aliashdr_t) 
			+ (LittleLong (pinmodel->numframes) - 1) *
			sizeof (pheader->frames[0]);
	pheader = Hunk_AllocName (size, loadname);
	
	mod->flags = LittleLong (pinmodel->flags);

//
// endian-adjust and copy the data, starting with the alias model header
//
	pheader->boundingradius = LittleFloat (pinmodel->boundingradius);
	pheader->numskins = LittleLong (pinmodel->numskins);
	pheader->skinwidth = LittleLong (pinmodel->skinwidth);
	pheader->skinheight = LittleLong (pinmodel->skinheight);

	if (pheader->skinheight > MAX_LBM_HEIGHT)
		Sys_Error ("model %s has a skin taller than %d", mod->name,
				   MAX_LBM_HEIGHT);

	pheader->numverts = LittleLong (pinmodel->numverts);

	if (pheader->numverts <= 0)
		Sys_Error ("model %s has no vertices", mod->name);

	if (pheader->numverts > MAXALIASVERTS)
		Sys_Error ("model %s has too many vertices", mod->name);

	pheader->numtris = LittleLong (pinmodel->numtris);

	if (pheader->numtris <= 0)
		Sys_Error ("model %s has no triangles", mod->name);

	pheader->numframes = LittleLong (pinmodel->numframes);
	numframes = pheader->numframes;
	if (numframes < 1)
		Sys_Error ("Mod_LoadAliasModel: Invalid # of frames: %d\n", numframes);

	pheader->size = LittleFloat (pinmodel->size) * ALIAS_BASE_SIZE_RATIO;
	mod->synctype = LittleLong (pinmodel->synctype);
	mod->numframes = pheader->numframes;

	for (i=0 ; i<3 ; i++)
	{
		pheader->scale[i] = LittleFloat (pinmodel->scale[i]);
		pheader->scale_origin[i] = LittleFloat (pinmodel->scale_origin[i]);
		pheader->eyeposition[i] = LittleFloat (pinmodel->eyeposition[i]);
	}


//
// load the skins
//
	pskintype = (daliasskintype_t *)&pinmodel[1];
	pskintype = Mod_LoadAllSkins (pheader->numskins, pskintype);

//
// load base s and t vertices
//
	pinstverts = (stvert_t *)pskintype;

	for (i=0 ; i<pheader->numverts ; i++)
	{
		stverts[i].onseam = LittleLong (pinstverts[i].onseam);
		stverts[i].s = LittleLong (pinstverts[i].s);
		stverts[i].t = LittleLong (pinstverts[i].t);
	}

//
// load triangle lists
//
	pintriangles = (dtriangle_t *)&pinstverts[pheader->numverts];

	for (i=0 ; i<pheader->numtris ; i++)
	{
		triangles[i].facesfront = LittleLong (pintriangles[i].facesfront);

		for (j=0 ; j<3 ; j++)
		{
			triangles[i].vertindex[j] =
					LittleLong (pintriangles[i].vertindex[j]);
		}
	}

//
// load the frames
//
	posenum = 0;
	pframetype = (daliasframetype_t *)&pintriangles[pheader->numtris];

	for (i=0 ; i<numframes ; i++)
	{
		aliasframetype_t	frametype;

		frametype = LittleLong (pframetype->type);

		if (frametype == ALIAS_SINGLE)
		{
			pframetype = (daliasframetype_t *)
					Mod_LoadAliasFrame (pframetype + 1, &pheader->frames[i]);
		}
		else
		{
			pframetype = (daliasframetype_t *)
					Mod_LoadAliasGroup (pframetype + 1, &pheader->frames[i]);
		}
	}

	pheader->numposes = posenum;

	mod->type = mod_alias;

// FIXME: do this right
	mod->mins[0] = mod->mins[1] = mod->mins[2] = -16;
	mod->maxs[0] = mod->maxs[1] = mod->maxs[2] = 16;

	//
	// build the draw lists
	//
	GL_MakeAliasModelDisplayLists (mod, pheader);

//
// move the complete, relocatable alias model to the cache
//	
	end = Hunk_LowMark ();
	total = end - start;
	
	Cache_Alloc (&mod->cache, total, loadname);
	if (!mod->cache.data)
		return;
	memcpy (mod->cache.data, pheader, total);

	Hunk_FreeToLowMark (start);
}
Exemplo n.º 19
0
//------------------------------------------------------------------------------
//! void CAN_UserProcessMsg(void)
//------------------------------------------------------------------------------
//! @brief	Processes incoming CAN messages
//------------------------------------------------------------------------------
void CAN_UserProcessMsg(void){
	RTC rtc;
	CANMsg_t msg;
	u8_t res=0;
	static u8_t toggle_led=0;
	CRCInit_t cfg= CRC32_CONFIG;
	u32_t cnt=0;


	res = CAN_UserRead(&msg);
	if(!res)
		return;

#if 0
	if(toggle_led){
		HW_SetLED (HW_LED_STATUS_2, HW_LED_GREEN);
		toggle_led = 0;
	}else{
		HW_SetLED (HW_LED_STATUS_2, HW_LED_ORANGE);
		toggle_led = 1;
	}
#endif

	if(msg.Id<INCOMING_CAN_ID_MIN || msg.Id>INCOMING_CAN_ID_MAX)
		return;

	switch(msg.Id){
	case SYM_OUT_IO:
		HW_SetDOUTn(HW_DOUT_1, (msg.Data.Data8[0] & 0x01));

		if (msg.Data.Data8[0] & 0x02)
			HW_GPS_PowerOn();
		else
			HW_GPS_PowerOff();
		break;

	case SYM_OUT_POWEROFF:
		if(msg.Data.Data8[0]&0x01)
			HW_SwitchOFF();
		break;

	case SYM_OUT_GYRO:
		MEMS_L3GD20_SetRange(msg.Data.Data8[0]&0x03);
		break;

	case SYM_OUT_ACC_SCALE:
		MEMS_BMC050_SetAccRange(msg.Data.Data8[0]&0x7);
		break;

	case SYM_OUT_SAVE_CFG:
		// only write configuration if LSB in lowest byte is set
		if(!(msg.Data.Data8[0]&0x1))
			break;

		MEMS_BMC050_GetAccCalTargets(	&cfg_data.Acc.cmp_target_x,
										&cfg_data.Acc.cmp_target_y,
										&cfg_data.Acc.cmp_target_z);
		MEMS_BMC050_GetAccRange(&cfg_data.Acc.range);
#if STORE_ACC_COMPENSATION_PERMANENT
		cfg_data.Acc.flags |= ACC_USE_EEPROM_RAW_COMPENSATION_VALUES;
		cfg_data.Acc.flags |= ACC_USE_EEPROM_FILT_COMPENSATION_VALUES;

		MEMS_BMC050_GetAccCalFiltValues(&cfg_data.Acc.cmp_filt_x,
										&cfg_data.Acc.cmp_filt_y,
										&cfg_data.Acc.cmp_filt_z);
		MEMS_BMC050_GetAccCalRawValues(	&cfg_data.Acc.cmp_raw_x,
										&cfg_data.Acc.cmp_raw_y,
										&cfg_data.Acc.cmp_raw_z);
#else
		cfg_data.Acc.flags = 0;
#endif

		MEMS_L3GD20_GetRange(&cfg_data.Gyro.range);

		res = CRC_Init(&cfg);
		if(res != CRC_ERR_OK)
			break;

		cnt = sizeof(cfg_data)-sizeofmember(S_CONFIG_DATA_t, crc32);
		res = CRC_CalcCRC((void*) &cfg_data, cnt, t_crc_8_bit, &cfg_data.crc32);
		if(res != CRC_ERR_OK)
					break;

		if(EEPROM_Write(EEPROM_INT, EEPROM_CFG_ADDR, &cfg_data,
				sizeof(cfg_data))!= EEPROM_ERR_OK){
			// write failed
		}
		if(EEPROM_FlushCache(EEPROM_INT)!= EEPROM_ERR_OK){
			// flush failed
		}
		break;

	case SYM_OUT_RTC_SET_TIME:
		rtc.sec = msg.Data.Data8[0] ;
		rtc.min	= msg.Data.Data8[1] ;
		rtc.hour = msg.Data.Data8[2] ;
		rtc.wday = msg.Data.Data8[3] ;
		rtc.mday = msg.Data.Data8[4] ;
		rtc.month = msg.Data.Data8[5] ;
		rtc.year = msg.Data.Data16[3] ;
		rtc_settime(&rtc);
		break;

	case SYM_OUT_RTC_ADOPT_GPS_TIME:
		if(!(msg.Data.Data8[0]&0x1))
			break;

		// only copy values if they are valid
		if((MAX7W_Readings.Validity & GPS_TIME_VALID)!=GPS_TIME_VALID)
			break;
		if((MAX7W_Readings.Validity & GPS_DATE_VALID)!=GPS_DATE_VALID)
			break;

		// get old values to keep day of week that was set before
		rtc_gettime(&rtc);

		rtc.sec = MAX7W_Readings.Time_Sec;
		rtc.min	= MAX7W_Readings.Time_Min;
		rtc.hour = MAX7W_Readings.Time_Hrs;
		rtc.mday = MAX7W_Readings.Date_DayOfMonth;
		rtc.month = MAX7W_Readings.Date_Month;
		rtc.year = MAX7W_Readings.Date_Year;
		rtc_settime(&rtc);
		break;

	case SYM_OUT_ACC_FAST_CALIBRATION:
		MEMS_BMC050_SetAccCalTargets(&msg.Data.Data8[0], &msg.Data.Data8[1], &msg.Data.Data8[2]);
		if(msg.Data.Data8[3]&0x1)
			MEMS_BMC050_StartFastAccCompensation();
		break;

	default:
		break;
	}

	return;
}