/* * Copyright (C) 2003, 2004, 2005 Filip Pizlo. All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY FILIP PIZLO ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FILIP PIZLO OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* This file holds constants required by the serial protocol. */ #ifndef FP_TSF_SERIAL_PROTOCOL_H #define FP_TSF_SERIAL_PROTOCOL_H #include "tsf_types.h" /* the length of all magic codes */ #define TSF_SP_MAGIC_LEN 4 /* What follows are the serial protocol command codes. */ /* Indicates that the type map should be reset. Every valid TSF stream * must begin with a TSF_SP_RESET_TYPES command. A TSF_SP_RESET_TYPES * command must be followed by the TSF magic code, defined in the constants * TSF_SP_MAGIC_SUFFIX and TSF_SP_MAGIC_SUFFIX_LEN. */ #define TSF_SP_C_RESET_TYPES ((uint8_t)0) /* Indicates that a new type definition follows. The new type is defined * to have whatever code comes next. At least one of these * must precede the first TSF_SP_C_DATA command in a stream. */ #define TSF_SP_C_NEW_TYPE ((uint8_t)1) /* Indicates that data follows. The format of said data is determined * by the tsf_buffer object. */ #define TSF_SP_C_DATA ((uint8_t)2) /* Indicates that we're going to change formats. Note that the * serial_in_man doesn't catch this; if you want to allow for zip formats * to be changed on the fly, you have to catch this yourself. The * tsf_adaptive_reader does this. */ #define TSF_SP_C_SWITCH_FORMAT ((uint8_t)'T') /* If this bit in the command code is set, it indicates that data follows, * with "compact framing" (CF). The low bits are then used as the type * code. */ #define TSF_SP_C_CF_DATA_BIT ((uint8_t)128) /* It is a requirement that any additional serial protocol command codes must * be immediately followed by a 32-bit length specifier. It is then * acceptable for input manager implementations to skip over the number of * bytes specified by the length specifier. */ /* The code that signifies a standard TSF stream. (This is just a * TSF_SP_C_RESET_TYPES followed by a TSF_SP_MAGIC_SUFFIX.)*/ #define TSF_SP_MAGIC_CODE "\000TSF" /* The 'suffix' of the above code; this is the part that will follow a * TSF_SP_C_RESET_TYPES command. */ #define TSF_SP_MAGIC_SUFFIX "TSF" #define TSF_SP_MAGIC_SUFFIX_LEN 3 /* Magic codes for ZLib and libbzip2 files. Note that it is no accident that * the first character of these codes has a 'T' - see TSF_SP_C_SWITCH_FORMAT * above. */ #define TSF_SP_ZLIB_MAGIC_CODE "TSFz" #define TSF_SP_BZIP2_MAGIC_CODE "TSFb" #endif