void SoD00Z::ReadHeader(QDataStream &datastr){ QMutexLocker locker(&readmutex); char *buf=new char[512]; datastr.readRawData(buf,512); int formatid=((int)(buf[10])+256*((int)buf[11])); if(formatid!=2){ error("Wrond datafile format descriptor"); Set_Error(); } recordwidth=(((int)buf[8])+256*((int)buf[9])); blocklength=(((int)buf[14])+256*((int)buf[15])); recsperblock=blocklength/recordwidth; blocktag=blocklength%recordwidth; numblocks=(((int)buf[18])+256*((int)buf[19])); lastblocklength=(((int)buf[20])+256*((int)buf[21])); count=recsperblock*numblocks-(recsperblock-lastblocklength); Set_NADC((char)(recordwidth-1)); char cntcnt=buf[134]; for(int i=0;i<cntcnt;i++){ uint v=((uint)buf[136+i*4])+ ((uint)buf[136+i*4+1])*256+ ((uint)buf[136+i*4+2])*65536+ ((uint)buf[136+i*4+3])*256*65536; double val=v; ApplyConstant("M#"+QString::number(i),val); } int textlen=buf[232]; QString text=""; for(int i=0; (i< (textlen+1)/2) && (i<10); i++){ int data= ((int)buf[234+i*2])+ ((int)buf[234+i*2])*256; int basa=RADIX50.length(); text+=RADIX50[(data%(basa*basa*basa))/(basa*basa)]; text+=RADIX50[(data%(basa*basa))/basa]; text+=RADIX50[data%basa]; } Set_description(Description()+ text); cnt=0; blockcnt=0; delete [] buf; }
//================================================================================== //================================================================================== //================================================================================== int main() { bool ver = 0; uint8_t cnt_link = 0; PLL_init(); GPIO_init(); TIM1_init(); TIM2_init(); TIM3_init(); UART_init(); WDT_init(); EEPROM_init(); SysTick_Config(SystemCoreClock/800);//~10 ms time.t1=5; time.t2=5; time.t3=5; time.t4=5; delay_ms(100); Segment[0]=0xFF; Segment[1]=0xFF; Segment[2]=0xFF; Segment[3]=0xFF; Segment[4]=0xFF; Segment[5]=0xFF; Segment[6]=0x7F; ALARM_ON; delay_ms(100); ALARM_OFF; delay_ms(1000); // // while(1) { if( TX_st ) { TX_st = 0; if( cnt_link < LINK_COUNT ) { link_PKBA(); ++cnt_link; } else { PKDU.error = true; cnt_link = 0; } } if( RX_ok && !PKDU.error ) { uint8_t cnt_byte = 0, sum = 0; while( cnt_byte < RX_FRAME_SIZE ) { sum += ArrayRX_PKBA[cnt_byte]; ++cnt_byte; } sum += 0xAA; if( !sum ) { StatusPKBA.reg0 = ArrayRX_PKBA[0]; StatusPKBA.reg1 = ArrayRX_PKBA[1]; StatusPKBA.Error = (ArrayRX_PKBA[3]<<8) | ArrayRX_PKBA[2]; StatusPKBA.RabReg0 = ArrayRX_PKBA[4]; StatusPKBA.UGen = (ArrayRX_PKBA[6]<<8) | ArrayRX_PKBA[5]; StatusPKBA.IGen = (ArrayRX_PKBA[8]<<8) | ArrayRX_PKBA[7]; StatusPKBA.DT = ArrayRX_PKBA[9]; StatusPKBA.DM = ArrayRX_PKBA[10]; StatusPKBA.TM = ArrayRX_PKBA[11]; StatusPKBA.NDiz = (ArrayRX_PKBA[13]<<8) | ArrayRX_PKBA[12]; StatusPKBA.TBapEx = ArrayRX_PKBA[14]; StatusPKBA.TBapIn = ArrayRX_PKBA[15]; StatusPKBA.Led1 = ArrayRX_PKBA[16]; StatusPKBA.Led2 = ArrayRX_PKBA[17]; if( !ver ) { ver = true; show_ver(); delay_ms( 1500 ); Segment[ 0 ] = 0; Segment[ 1 ] = 0; Segment[ 2 ] = 0; Segment[ 3 ] = 0; Segment[ 4 ] = 0; } cnt_link=0; } RX_ok=0; } __nop(); Set_Error(); if(!PKDU.error) ShowParam(); if((PKDU.StatusKN>>4)&1) { maska_err = 0; StatusPKBA.Error=0; PKDU.error=false; cnt_link = 0; } if(((PKDU.StatusKN>>5)&1) && ((PKDU.StatusKN>>6)&1)) { Segment[0] = 0xFF; Segment[1] = 0xFF; Segment[2] = 0xFF; Segment[3] = 0xFF; Segment[4] = 0xFF; Segment[5] = 0xFF; Segment[6] = 0x7F; while(((PKDU.StatusKN>>5)&1)&&((PKDU.StatusKN>>6)&1)) IWDG_ReloadCounter(); } ControlZvonok(); write_hour(); IWDG_ReloadCounter(); } }