Async kb

From Felixl.com
Revision as of 11:27, 6 March 2007 by Felix (talk | contribs) (Abort connection)
Jump to navigationJump to search

Terms:

connection: data transfer session, highest in hierarchy

block: data transfer unit, consists of several frames

frame: lowest data transfer unit. basically -- one network message


Message type ==

  • 0x80 = data
  • 0x90 = command

commands:

Request Session

.data[0] = 0xca -- request session

parameters:

.data[1] = priority (always 1)

.data[2] , .data[3] -- message packet max size (16 bit, big endian)

.data[4] == 0x01 (revision)

Session Granted

.data[0] = 0xf2 -- session granted

parameters:

.data[1] = number of frames per block

.data[2] = revision (always 0x01)

.data[3] = priority acknowledge (should reply with the same priority requested)

.data[4] .data[5] = bytes per frame (maximum allowed bytes per frame, 16bit, bigendian)

.data[6] .data[7] = number of microseconds between messages -- don't bother about it

Starting Transfer

.data[0] = 0xfd

no parameters

Frame Acknowledge

.data[0] = 0xfa (frame acknowledge)

parameters

.data[1]= total number of frames in this block

.data[2]= id of received message

.data[3]= id of current block

Frame Not Acknowledged

.data[0] = 0xfa

.data[1] = 0x00

.data[2] = 0x00

params :

.data[3] = id of current block

Single Frame Request

.data[0] = 0xfb

.data[1] = 0x00

parameters:

.data[2] = id of requested frame in current block

Current block request

.data[0] = 0xfb

.data[1] = 0x00

.data[2] = 0x00

Multiple Frame Request

.data[0] = 0xff


.data[1] .... .data[msg.length-1] == id's of requested frames

End of transfer

.data[0] = 0xf3

.data[1] = 0x00

parameters:

.data[2] = result -- 0x00 -- everything was ok, 0xff -- something went BAD

Abort connection

.data[0] = 0xfc

.data[1] = 0x00

.data[2] = 0xff

send by receiver to abort connection.

Adjust framerate

Suspend transfer

Waiting for buffer

Data Frame

.data[0] = frame id

.data[1] = number of frames in current block (not including 0-Frame)

.data[2] .... .data[N] == user data


There are 2 different frame types --- "0-Frame" and Regular Frame

0-Frame is the first frame to be send out -- it has description of current block transfer.

0-Frame has following structure:

.data[0]=0x00

.data[1]=number of frames in current block (not including 0-Frame)

.data[2]=0x00

.data[3]=Flags ( 0x01 == acknowledge after the entire block, 0x02 = acknowledge every frame)

.data[4]=total block count

Communication Protocols

Sender (TX)

Receiver (RX)

Simple transfer :

TX:Request Session
RX:Session Granted
TX:Starting Transfer
TX:0-Frame (one block, 4 frames, ack after block)
TX:Frame #1
TX:Frame #2
TX:Frame #3
TX:Frame #4
RX:Frame Acknowledge
TX:End of tranfer
TX:End of tranfer
TX:End of tranfer