#ifndef STOPANDWAIT_H #define STOPANDWAIT_H #include typedef enum { DATA, ACK } FrameKind; typedef struct { FrameKind kind; /* only ever DATA or ACK */ int messageLength; /* the length of the message portion only */ int checksum; /* checksum of the whole frame */ int sequenceNumber; /* only ever 0 or 1 */ char message[MAX_MESSAGE_SIZE]; } Frame; #define FRAME_HEADER_SIZE (sizeof(FrameKind) + 3*sizeof(int)) #define FRAME_SIZE(f) (FRAME_HEADER_SIZE + f.messageLength * sizeof(char)) static void on_physical_ready( CnetEvent ev, CnetTimer ts, CnetData data ); static void on_application_ready( CnetEvent ev, CnetTimer ts, CnetData data ); static void on_timer_expired( CnetEvent ev, CnetTimer ts, CnetData data ); static void transmit_frame( char *message, int messageLength, FrameKind kind, int sequenceNumber ); #endif