//------------------------------------------------------------------------------ // // Function: CS8900AMulticastList // BOOL CS8900AMulticastList(UINT8 *pAddresses, UINT32 count) { UINT32 i, j, crc, data, bit; OALMSGS(OAL_ETHER && OAL_FUNC, ( L"+RTL8139MulticastList(0x%08x, %d)\r\n", pAddresses, count )); g_hash[0] = g_hash[1] = g_hash[2] = g_hash[3] = 0; for (i = 0; i < count; i++) { data = crc = ComputeCRC(pAddresses, 6); for (j = 0, bit = 0; j < 6; j++) { bit <<= 1; bit |= (data & 1); data >>= 1; } g_hash[bit >> 4] |= 1 << (bit & 0x0f); pAddresses += 6; } // But update only if all multicast mode isn't active if ((g_filter & PACKET_TYPE_ALL_MULTICAST) == 0) { WritePacketPage(LOGICAL_ADDR_FILTER_BASE + 0, g_hash[0]); WritePacketPage(LOGICAL_ADDR_FILTER_BASE + 2, g_hash[1]); WritePacketPage(LOGICAL_ADDR_FILTER_BASE + 4, g_hash[2]); WritePacketPage(LOGICAL_ADDR_FILTER_BASE + 6, g_hash[3]); } OALMSGS(OAL_ETHER && OAL_FUNC, (L"-CS8900AMulticastList(rc = 1)\r\n")); return (TRUE); }
/* sendPacket() is called by just about every other member function. It calculates some CRC bytes, then sends the message string. If a response is requested, it'll return that in the response array. Otherwise that and the responseLength variable should be 0. If you're using a bluetooth module that's not the RN-42, this'd be the place to modify. */ void SFE_MetaWatch::sendPacket(unsigned char * data, int length, unsigned char * response, int responseLength) { int crc = ComputeCRC(data, length - 2); // Get the crc values for our string data[length-1] = (crc & 0xFF00) >> 8; // LSB goes first data[length-2] = crc & 0xFF; // the MSB // If you want a response, let's flush out the bt buffer first. if (responseLength > 0) bt.flush(); // Send the data out to the BlueSMiRF for (int i=0; i<length; i++) { bt.write(data[i]); } // If a response was requested, read that into the response array. if (responseLength > 0) { delay(BLUETOOTH_RESPONSE_DELAY); int i=0; while (bt.available() && (i < responseLength)) { response[i++] = bt.read(); } } }
/*------------------------------------------------------------------------------------ FUNCTION NAME: CheckCrcLicenseData DESCRIPTION: Check CRC. PARAMETERS: - INPUT - MGL_LICENSE * pLicense - OUTPUT: RETURN: - TRUE : CRC ok. - FALSE : error in CRC. NOTES: ------------------------------------------------------------------------------------*/ BOOL CheckCrcLicenseData (MGL_LICENSE * pLicense) { DWORD _CRC_size; DWORD _file_CRC; _CRC_size = sizeof (LICENSE_DATA) + sizeof(HARDWARE_ID_LIST) + sizeof(TERMINALS_TABLE); _file_CRC = ComputeCRC ((BYTE *) pLicense, _CRC_size); if ( _file_CRC != pLicense->CRCFile.FileCRC ) { return FALSE; } return TRUE; } /* CheckCrcLicenseData */