Rane ECM 64 handleiding

26 pagina's
PDF beschikbaar

Handleiding

Je bekijkt pagina 25 van 26
Manual-25
Example Packet Expansion Code for RW 232 Messages
// 09-10-96 - Devin Cook (Derived from RW232.CPP code)
// This code only deals with the Body of an RW 232 message (Command/Data)
// The steps needed to fully communicate with an RW 232 device are as follows:
// 1. Send the Address: [FB xx FB xx]
// 2. Get the returned Device Type and Device ID flags
// 3. Send the FB expanded Body
// 4. Get and check the returned ComStat byte
// Take a simple command and expand it into a full packet.
// Input:
// Buff - BYTE array with the unexpanded message and lots of extra room
// MsgLen - Unexpanded message length
// Steps required are:
// 1. Add Packet size. This is simply the Command length + 1 for the checksum
// 2. Duplicate 0xFBs
// 3. Calculate Checksum
// 4. Add Checksum to packet (Check for a 0xFB Checksum!)
// 5. Copy Packet back to the buffer
// 6. Return the new Packet Size
// Note: The buffer must be large enough to accept the expanded data. No checking is done to verify it is, so be careful!
// A packet into this routine consists of the one byte Command and any Data
int CmdToPacket(BYTE Buff[ ], int MsgLen)
{
BYTE L_MSB = ((MsgLen+1) >> 8) & 0xFF; // Grab MSB of Size
BYTE L_LSB = (MsgLen+1) & 0xFF; // Grab LSB of Size
// FBs is the number of 0xFB bytes in the messages
int FBs = 0;
// Don’t forget to check message length for FBs
if (L_MSB == 0xFB)
FBs ++;
if (L_LSB == 0xFB)
FBs ++;
// Calculate Checksum of Message Length bytes along with bytes in the packet
int CheckSum = L_MSB + L_LSB;
for (int x=0;x<L;x++)
{
CheckSum += Buff[x];
if (Buff[x] == 0xFB)
FBs ++;
}
CheckSum = (256-CheckSum) & 0xFF;
// Don’t forget to up the FB count for a FB checksum!
if (CheckSum == 0xFB)
FBs ++;
// New Length is: 2 (For 2 length bytes) + L (Old message Length) + Repeated FBs count + 1 (For CheckSum)
int NewLen = 2 + MsgLen + FBs + 1;
// Create a temporary holding tank for Packet Expansion
BYTE Packet[MAX_CMD_BUF];
BYTE *Ptr = Packet;
// Stick message length in the packet (Watching for FBs of course)
*(Ptr++) = L_MSB ;
if (L_MSB == 0xFB)
*(Ptr++) = 0xFB;
*(Ptr++) = L_LSB ;
if (L_LSB == 0xFB)
*(Ptr++) = 0xFB;
// Expand the original packet into the new buffer
for (x=0;x<L;x++)
{
*(Ptr++) = Buff[x];
if (Buff[x] == 0xFB)
*(Ptr++) = 0xFB;
}
// Add the Checksum byte (or Bytes if Checksum == FB)
*(Ptr++) = CheckSum ;
if (CheckSum == 0xFB)
*(Ptr++) = 0xFB;
// Copy the expanded packet back into the original buffer
memcpy(Buff,Packet,NewLen);
return NewLen;
}

Bekijk gratis de handleiding van Rane ECM 64, stel vragen en lees de antwoorden op veelvoorkomende problemen, of gebruik onze assistent om sneller informatie in de handleiding te vinden of uitleg te krijgen over specifieke functies.

Productinformatie

MerkRane
ModelECM 64
CategorieNiet gecategoriseerd
TaalNederlands
Grootte3260 MB