/**************************************************************************************/ /* Header for Packets.c */ /* Copyright(C)1999 Peter Armstrong */ /* Release 2.0 */ /**************************************************************************************/ #define MAX_PKTS_16 16 /* max number of packets stored */ #define MAX_PKT_DATA 6 /* max number of data bytes that can be sent/received */ /* PC's packet transfer mode type */ #define P_TFR_REAL 0 /* transfer packets with remote psx */ #define P_TFR_TEST 1 /* test transfers to PC and back */ /* packet types */ #define PSX_OK 0 #define PSX_NG 1 #define PSX_END 2 /* array indexes for general packet information (link.info[])*/ #define L_STORED 0 /* last local frame stored */ #define L_SENT 1 /* last local frame sent */ #define L_STORED_NUM 2 /* number of local packets stored for sending */ #define L_OUT 3 /* set if psx sending a packet */ #define R_STORED 4 /* frame number of last remote packet received */ #define R_STORED_NUM 5 /* number of remote packets received */ #define ERROR_PKT 6 /* last data packet sent before er_packet sent */ #define ERROR_AWAIT 7 /* waiting for pkt re-send */ #define END_PKT 8 /* last data packet sent before end transfer packet */ #define END_AWAIT 9 /* waiting for remote psx to send end packet */ #define LAST_STATUS 10 /* status of this/last packet */ #define FRAME 11 /* frame number of next local/remote data to send to app */ #define INFO_SIZE 12 /* structure of link/transfer info */ struct link_info { volatile struct cmds cmd_info; /* psx command structure */ int ping; /* connect type */ int connected; /* connect status */ int lk_type; /* link connection type */ int m_state; /* master/slave status */ int max_diff; /* max local/remote frame difference */ u_char *loc_data; /* ptr to local data */ u_char *rem_data; /* ptr to remote data */ int end_tfr; /* end packet transfer session */ int loc_status; /* local psx status */ int rem_status; /* remote psx status */ u_char info[INFO_SIZE]; /* array keeping track of packet transfers */ }; /* defines for above struct */ /* lk_type */ #define LK_PSX 0 /* psx<->psx */ #define LK_PC 1 /* psx<->pc<->psx */ #define LK_MODEM 2 /* psx<->pc<->pc<->psx */ /* m_state */ #define SLAVE 2 /* slave playstation */ #define MASTER 3 /* master playstation */ /* frame difference */ #define MAXD_PSX 2 /* difference between psxs no greater than 2 */ #define MAXD_PC 2 #define MAXD_MODEM 4 /* no greater than 4 */ /* loc_status values on return from pkt_connect() */ #define I_CONNECTED 1 /* connection made */ #define I_USER_INT 0 /* user interrupt */ #define I_CNT_FAIL -1 /* failed to connect */ /* defines for loc/rem_status in tfr mode */ #define TFR_OK 0 /* no connection or transfer problems */ #define TFR_END -1 /* local or remote has ended transfer */ #define TFR_TIMEOUT -2 /* loss of connection to remote psx */ /* return values for pkt_start() */ #define S_READY 1 /* transfer session has started */ #define S_NOT_CONNECTED 0 /* not connected */ #define S_START_FAIL -1 /* transfer could not be started */ #define S_BAD_SIZE -2 /* data size out of range */ #define S_MEM_FAIL -3 /* malloc() failure */ /* return values for pkt_transfer() */ #define T_DATA_AVAIL 1 /* local/remote data available for next frame */ #define T_NO_DATA 0 /* no data available */ #define T_TFR_ENDED -1 /* remote has ended transfer session */ #define T_TIMEOUT -2 /* remote psx no longer sending packets */ /* prototypes */ struct link_info *link_connect(volatile char *padbuf); void link_disconnect(void); int pkt_start(u_int size,int mode); int Cmd_Start(u_int size, int mode, int diff); int Pkt_Alloc(void); void Pkt_Free(void); void pkt_end(void); int pkt_transfer(u_char *data_p); void Store_Packet(u_char *data_p); void Next_Packet(void); int Check_Diff(void); void In_Error_Set(void); void Packet_Transfers(void); int Send_Rec_Packets(void); int Next_Frame_Data(void); int Pkt_Read(char *read_p, int to_read);