Difference between revisions of "Async kb"

From Felixl.com
Jump to navigationJump to search
(Adjust framerate)
(Suspend transfer)
Line 127: Line 127:
  
 
== Suspend transfer ==
 
== Suspend transfer ==
 +
 +
.data[0] = 0xfe
 +
 +
.data[1] = 0x00
 +
 +
parameters:
 +
 +
.data[2] = event.
 +
 +
 +
Events:
 +
 +
*0x00-0x01 -- Reserved (not used)
 +
*0x02-0x7f -- Priority info (when requested priority is less than current available)
 +
*0x80 - Reserved (not used)
 +
*0x81 - '''0-Frame''' received, but the receiver is busy with another connection
 +
*0x82 - '''0-Frame''' received, but the receiver don't have free buffer at the moment
 +
*0x83-0xff -- Reserved (not used)
  
 
== Waiting for buffer ==
 
== Waiting for buffer ==

Revision as of 11:31, 6 March 2007

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

.data[0] = 0xf0


don't bother about this command :)

Suspend transfer

.data[0] = 0xfe

.data[1] = 0x00

parameters:

.data[2] = event.


Events:

  • 0x00-0x01 -- Reserved (not used)
  • 0x02-0x7f -- Priority info (when requested priority is less than current available)
  • 0x80 - Reserved (not used)
  • 0x81 - 0-Frame received, but the receiver is busy with another connection
  • 0x82 - 0-Frame received, but the receiver don't have free buffer at the moment
  • 0x83-0xff -- Reserved (not used)

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