nkeynes@1: /** nkeynes@31: * $Id: maple.h,v 1.4 2005-12-25 08:24:11 nkeynes Exp $ nkeynes@31: * nkeynes@31: * Maple bus definitions nkeynes@31: * nkeynes@31: * Copyright (c) 2005 Nathan Keynes. nkeynes@31: * nkeynes@31: * This program is free software; you can redistribute it and/or modify nkeynes@31: * it under the terms of the GNU General Public License as published by nkeynes@31: * the Free Software Foundation; either version 2 of the License, or nkeynes@31: * (at your option) any later version. nkeynes@31: * nkeynes@31: * This program is distributed in the hope that it will be useful, nkeynes@31: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@31: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@31: * GNU General Public License for more details. nkeynes@1: */ nkeynes@31: nkeynes@1: #ifndef dream_maple_H nkeynes@1: #define dream_maple_H 1 nkeynes@1: nkeynes@1: #define MAPLE_CMD_INFO 1 /* Request device information */ nkeynes@1: #define MAPLE_CMD_EXT_INFO 2 /* Request extended information */ nkeynes@1: #define MAPLE_CMD_RESET 3 /* Reset device */ nkeynes@1: #define MAPLE_CMD_SHUTDOWN 4 /* Shutdown device */ nkeynes@1: #define MAPLE_CMD_GET_COND 9 /* Get condition */ nkeynes@1: #define MAPLE_CMD_MEM_INFO 10 /* Get memory information */ nkeynes@2: #define MAPLE_CMD_READ_BLOCK 11 /* Block read */ nkeynes@2: #define MAPLE_CMD_WRITE_BLOCK 12 /* Block write */ nkeynes@1: #define MAPLE_CMD_SET_COND 14 /* Set condition */ nkeynes@1: #define MAPLE_RESP_INFO 5 /* Device information response */ nkeynes@1: #define MAPLE_RESP_EXT_INFO 6 /* Extended device information response */ nkeynes@1: #define MAPLE_RESP_ACK 7 /* Acknowledge command */ nkeynes@1: #define MAPLE_RESP_DATA 8 /* Bytes read */ nkeynes@1: #define MAPLE_ERR_NO_RESPONSE -1 /* Device did not respond */ nkeynes@1: #define MAPLE_ERR_FUNC_UNSUP -2 /* Function code unsupported */ nkeynes@1: #define MAPLE_ERR_CMD_UNKNOWN -3 /* Command code unknown */ nkeynes@1: #define MAPLE_ERR_RETRY -4 /* Retry command */ nkeynes@1: #define MAPLE_ERR_FILE -5 /* File error? */ nkeynes@1: nkeynes@2: #define MAPLE_FUNC_CONTROLLER 0x01000000 nkeynes@2: #define MAPLE_FUNC_MEMORY 0x02000000 nkeynes@2: #define MAPLE_FUNC_LCD 0x04000000 nkeynes@2: #define MAPLE_FUNC_CLOCK 0x08000000 nkeynes@2: #define MAPLE_FUNC_MICROPHONE 0x10000000 nkeynes@2: #define MAPLE_FUNC_AR_GUN 0x20000000 nkeynes@2: #define MAPLE_FUNC_KEYBOARD 0x40000000 nkeynes@2: #define MAPLE_FUNC_LIGHT_GUN 0x80000000 nkeynes@2: #define MAPLE_FUNC_PURU_PURU 0x00010000 nkeynes@2: #define MAPLE_FUNC_MOUSE 0x00020000 nkeynes@2: nkeynes@2: #define MAPLE_DEVICE_TAG 0x4D41504C nkeynes@2: #define MAPLE_DEVICE(x) ((maple_device_t)x) nkeynes@2: nkeynes@31: /** nkeynes@31: * Table of functions to be implemented by any maple device. nkeynes@31: */ nkeynes@2: typedef struct maple_device { nkeynes@2: uint32_t _tag; nkeynes@2: unsigned char ident[112]; nkeynes@2: unsigned char version[80]; nkeynes@2: int (*reset)(struct maple_device *dev); nkeynes@2: int (*shutdown)(struct maple_device *dev); nkeynes@2: int (*get_condition)(struct maple_device *dev, nkeynes@15: int function, unsigned char *outbuf, int *buflen); nkeynes@2: int (*set_condition)(struct maple_device *dev, nkeynes@15: int function, unsigned char *inbuf, int buflen); nkeynes@2: int (*read_block)(struct maple_device *dev, nkeynes@15: int function, uint32_t block, unsigned char *outbuf, int *buflen); nkeynes@2: int (*write_block)(struct maple_device *dev, nkeynes@15: int function, uint32_t block, unsigned char *inbuf, int buflen); nkeynes@2: void (*attach)(struct maple_device *dev); nkeynes@2: void (*detach)(struct maple_device *dev); nkeynes@2: } *maple_device_t; nkeynes@2: nkeynes@2: maple_device_t controller_new(void); nkeynes@1: nkeynes@1: void maple_handle_buffer( uint32_t buffer ); nkeynes@2: void maple_attach_device( maple_device_t dev, unsigned int port, unsigned int periph ); nkeynes@2: void maple_detach_device( unsigned int port, unsigned int periph ); nkeynes@1: nkeynes@1: #endif /* !dream_maple_H */