コード例 #1
0
ファイル: pwrMeter.cpp プロジェクト: Red680812/pwrMeter
unsigned int pwrMeter::chkcrc(unsigned char *buf,unsigned char len)
{
    unsigned char hi,lo;
    unsigned int i;
    unsigned int crc;
    crc=0xFFFF;
    for(i=0; i<len; i++)
    {
        crc=calccrc(*buf,crc);
        buf++;
    }
    hi=(unsigned char)(crc%256);
    lo=(unsigned char)(crc/256);
    crc=(((unsigned int)(hi))<<8)|lo;
    return crc;
}
コード例 #2
0
ファイル: store.c プロジェクト: davel/nspark
Status
unstore(Header *header, FILE *ifp, FILE *ofp)
{
	/* BB changed next line: complen is a long */
	/* register len = header->complen; */
#ifdef __MSDOS__
	register long len = header->complen;
#else
	register int len = header->complen;
#endif							/* __MSDOS__ */
	register Byte byte;

    init_garble();

	crc = 0;
	while (len--)
	{
		if (check_stream(ifp) != FNOERR)
			break;
		byte = read_byte(ifp);
		byte = ungarble(byte);
		calccrc(byte);
		if (!testing)
			write_byte(ofp, byte);
	}

	if (check_stream(ifp) == FRWERR)
		return (RERR);
	if (!testing && check_stream(ofp) == FRWERR)
		return (WERR);
	if ((Halfword) crc != header->crc)
		return (CRCERR);
	if (testing)
	{
		if (!quiet)
			printf("OK (stored)");
	}
	else if (!quiet)
		printf("unstored");
	return (NOERR);
}
コード例 #3
0
ファイル: hacdevicemanager.cpp プロジェクト: etop-wesley/hac
int HacDeviceManager::searchDevices()
{
	int retry = 3;
	bool found = false;
	while (retry --) {
		QByteArray data(8, 0);
		data[0] = 0x00;
		data[1] = 0x03;
		data[2] = 0x00;
		data[3] = 0x00;
		data[4] = 0x00;
		data[5] = 32;
		crc.crc_16bit=0xffff;
		calccrc(data[0]);
		calccrc(data[1]);
		calccrc(data[2]);
		calccrc(data[3]);
		calccrc(data[4]);
		calccrc(data[5]);
		data[6] = crc.crc_8bit[0];
		data[7] = crc.crc_8bit[1];
		transmitData(data);
		data = receiveData();
		qDebug() << data.toHex();
		if (data.at(0)== 0x00 && data.at(1) == 0x03 &&data.at(2)== 32
			&& data.at(3) == 0x0E && data.at(4) == 0xAA && data.at(5) == 0x11 && data.at(6) == 0xA0) {
			found = true;
			break;
		}
	}

	if (found) {
		d_devices.append(new HacSwitchDevice(this, this));
#ifdef HAC_SWITCH_TEST
		for (int i = 0; i < 18; i++) {
			HacSwitchDevice *swtDev = qobject_cast<HacSwitchDevice *>(d_devices.at(0));
			swtDev->switchControl(i, true);
			HacHelp::MSleep(100);
		}

		for (int i = 0; i < 18; i++) {
			HacSwitchDevice *swtDev = qobject_cast<HacSwitchDevice *>(d_devices.at(0));
			swtDev->switchControl(i, false);
			HacHelp::MSleep(100);
		}
#endif
	}
}
コード例 #4
0
void setchecksum(struct frame (*vals)[FRAMECOUNT]) {
    int i;
    for(i = 0; i<FRAMECOUNT; i++) {
        if((*vals)[i].length[0]) {
            char checksumcalc[50] = "";
            strcpy(checksumcalc,(*vals)[i].header);
            strcat(checksumcalc,(*vals)[i].control);
            strcat(checksumcalc,(*vals)[i].address);
            strcat(checksumcalc,(char*)(*vals)[i].length);
            //strcat(checksumcalc,(char*)(*vals)[i].header);
            strcat(checksumcalc,(*vals)[i].data);
            
            uint16_t crc = calccrc(checksumcalc, strlen(checksumcalc));

            (*vals)[i].checksum[0] = (uint8_t)(crc>>8);
            (*vals)[i].checksum[1] = (uint8_t)(crc & 0xff);
            (*vals)[i].checksum[2] = '\0';
            // char temp[30];
            // sprintf(temp, "crc = %x, %x %x\n",crc, (*vals)[i].checksum[0],(*vals)[i].checksum[1]);
            // display_string(temp);
        }
    }
コード例 #5
0
ファイル: main.cpp プロジェクト: auberj/ComputerNetworkB1
int decode_frame(struct frame framedata, char * Rframe) {
    /*
    return 0 if error
    
    bits in return set to specify different things

    bit 0: No errors
    bit 1: for me
    bit 2: set = INFOFRAME, not set = SUPEFRAME 
    bit 3: first frame
    bit 4: last frame

    */
    int retval = 0;
    if(Rframe[0] == HEADER && Rframe[strlen(Rframe)-1] == FOOTER ) {
        unbytestuff(Rframe);
        strncpy(Rframe, Rframe, strlen(Rframe)-1);
        Rframe[strlen(Rframe)-1] = '\0';
        if(!((long unsigned int)calccrc(Rframe, strlen(Rframe)))) {
            //put_string("\nNo Errors!\n");
            retval |= 1;
            int i;
            for(i = 0; i < 10; i++) {
                if(i < CONTROLLEN) {
                    framedata.control[i] = Rframe[HEADERLEN + i]; 
                }
                if(i < ADDRESSLEN) {
                    framedata.address[i] = Rframe[HEADERLEN + CONTROLLEN + i];
                }
                if(i < LENGTHLEN) {
                    framedata.length[i] = Rframe[HEADERLEN + CONTROLLEN + ADDRESSLEN + i];
                }
            }
            framedata.control[CONTROLLEN] = 0;
            framedata.address[ADDRESSLEN] = 0;
            framedata.length[LENGTHLEN] = 0;
            for(i = 0; i < framedata.length[0]; i++) {
                framedata.data[i] = Rframe[HEADERLEN + CONTROLLEN + ADDRESSLEN + LENGTHLEN + i];
            }
            framedata.data[(int)framedata.length[0]] = 0;
            put_string("           ");
            put_string(framedata.data);
            if(framedata.address[0] == BROADCAST || framedata.address[0] == THISDEVICE) {
                put_string("\nPacket for me!");
                retval |= 1 << 1;
                if(framedata.data[0] == START) {
                    retval |= 1<< 3;
                }
                if(framedata.data[strlen(framedata.data)-1] == END) {
                    retval |= 1<<4;
                }
                if(!strcmp(framedata.control, INFOFRAME)) {
                    retval |= 1 << 2;
                }
            }
            else {
                // not intended recepient
                put_string("\nNot for me!\n");
                //retval = 1;
            }


        }
        else {
            // error in transmission
            //retval = 1;
            ;
        }

    }



    
    return retval;

}