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(); }
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); }
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 ); }
/* =========== 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); }
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; }
/************************************************************* 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 ); }
/* ============ 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; }
/* ============ 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); }
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 */ }
/* =============== 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); }
/* =============== 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]); }
/************************************************************************** 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); }
/************************************************************************** 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); }
void CRC_Reset(CRC_Type *base) { crc_config_t config; CRC_GetDefaultConfig(&config); CRC_Init(base, &config); }
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; }
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; } }
/* ================= 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); }
//------------------------------------------------------------------------------ //! 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; }