Difference between revisions of "Async kb"
(→S) |
(→Communication Protocols) |
||
Line 123: | Line 123: | ||
== Communication Protocols == | == 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 |
Revision as of 10:54, 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:
Contents
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)
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
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