|
| 1 | +/* |
| 2 | + * Tux Droid - Driver |
| 3 | + * Copyright (C) 2008 C2ME Sa <Acness : [email protected]> |
| 4 | + * |
| 5 | + * This program is free software; you can redistribute it and/or modify |
| 6 | + * it under the terms of the GNU General Public License as published by |
| 7 | + * the Free Software Foundation; either version 2, or (at your option) |
| 8 | + * any later version. |
| 9 | + * |
| 10 | + * This program is distributed in the hope that it will be useful, |
| 11 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | + * GNU General Public License for more details. |
| 14 | + * |
| 15 | + * You should have received a copy of the GNU General Public License |
| 16 | + * along with this program; if not, write to the Free Software |
| 17 | + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
| 18 | + * 02111-1307, USA. |
| 19 | + */ |
| 20 | + |
| 21 | +#ifndef _TUX_DRIVER_H_ |
| 22 | +#define _TUX_DRIVER_H_ |
| 23 | + |
| 24 | +#include <stdbool.h> |
| 25 | + |
| 26 | +/** |
| 27 | + * Id enumeration of high level status. |
| 28 | + */ |
| 29 | +typedef enum { |
| 30 | + SW_ID_FLIPPERS_POSITION = 0, |
| 31 | + SW_ID_FLIPPERS_REMAINING_MVM, |
| 32 | + SW_ID_SPINNING_DIRECTION, |
| 33 | + SW_ID_SPINNING_REMAINING_MVM, |
| 34 | + SW_ID_LEFT_WING_BUTTON, |
| 35 | + SW_ID_RIGHT_WING_BUTTON, |
| 36 | + SW_ID_HEAD_BUTTON, |
| 37 | + SW_ID_REMOTE_BUTTON, |
| 38 | + SW_ID_MOUTH_POSITION, |
| 39 | + SW_ID_MOUTH_REMAINING_MVM, |
| 40 | + SW_ID_EYES_POSITION, |
| 41 | + SW_ID_EYES_REMAINING_MVM, |
| 42 | + SW_ID_DESCRIPTOR_COMPLETE, |
| 43 | + SW_ID_RF_STATE, |
| 44 | + SW_ID_DONGLE_PLUG, |
| 45 | + SW_ID_CHARGER_STATE, |
| 46 | + SW_ID_BATTERY_LEVEL, |
| 47 | + SW_ID_BATTERY_STATE, |
| 48 | + SW_ID_LIGHT_LEVEL, |
| 49 | + SW_ID_LEFT_LED_STATE, |
| 50 | + SW_ID_RIGHT_LED_STATE, |
| 51 | + SW_ID_CONNECTION_QUALITY, |
| 52 | + SW_ID_AUDIO_FLASH_PLAY, |
| 53 | + SW_ID_AUDIO_GENERAL_PLAY, |
| 54 | + SW_ID_FLASH_PROG_CURR_TRACK, |
| 55 | + SW_ID_FLASH_PROG_LAST_TRACK_SIZE, |
| 56 | + SW_ID_TUXCORE_SYMBOLIC_VERSION, |
| 57 | + SW_ID_TUXAUDIO_SYMBOLIC_VERSION, |
| 58 | + SW_ID_FUXUSB_SYMBOLIC_VERSION, |
| 59 | + SW_ID_FUXRF_SYMBOLIC_VERSION, |
| 60 | + SW_ID_TUXRF_SYMBOLIC_VERSION, |
| 61 | + SW_ID_DRIVER_SYMBOLIC_VERSION, |
| 62 | + SW_ID_SOUND_REFLASH_BEGIN, |
| 63 | + SW_ID_SOUND_REFLASH_END, |
| 64 | + SW_ID_SOUND_REFLASH_CURRENT_TRACK, |
| 65 | + SW_ID_EYES_MOTOR_ON, |
| 66 | + SW_ID_MOUTH_MOTOR_ON, |
| 67 | + SW_ID_FLIPPERS_MOTOR_ON, |
| 68 | + SW_ID_SPIN_LEFT_MOTOR_ON, |
| 69 | + SW_ID_SPIN_RIGHT_MOTOR_ON, |
| 70 | + SW_ID_FLASH_SOUND_COUNT, |
| 71 | +} SW_ID_DRIVER; |
| 72 | + |
| 73 | +#if defined(__cplusplus) |
| 74 | +extern "C" { |
| 75 | +#endif |
| 76 | + |
| 77 | +/** |
| 78 | + * Error codes |
| 79 | + */ |
| 80 | +#define TUX_ERROR_BEGIN 256 |
| 81 | +typedef int TuxDrvError; |
| 82 | +typedef enum |
| 83 | +{ |
| 84 | + E_TUXDRV_NOERROR = 0, |
| 85 | + E_TUXDRV_PARSERISDISABLED = TUX_ERROR_BEGIN, |
| 86 | + E_TUXDRV_INVALIDCOMMAND, |
| 87 | + E_TUXDRV_STACKOVERFLOW, |
| 88 | + E_TUXDRV_FILEERROR, |
| 89 | + E_TUXDRV_BADWAVFILE, |
| 90 | + E_TUXDRV_INVALIDIDENTIFIER, |
| 91 | + E_TUXDRV_INVALIDNAME, |
| 92 | + E_TUXDRV_INVALIDPARAMETER, |
| 93 | + E_TUXDRV_BUSY, |
| 94 | + E_TUXDRV_WAVSIZEEXCEDED, |
| 95 | +} tux_drv_error_t; |
| 96 | + |
| 97 | +/** |
| 98 | + * CPU number enumeration. |
| 99 | + */ |
| 100 | +typedef enum { |
| 101 | + TUXCORE_CPU_NUM = 0, |
| 102 | + TUXAUDIO_CPU_NUM = 1, |
| 103 | + TUXRF_CPU_NUM = 2, |
| 104 | + FUXRF_CPU_NUM = 3, |
| 105 | + FUXUSB_CPU_NUM = 4, |
| 106 | + INVALID_CPU_NUM = -1, |
| 107 | +} CPU_IDENTIFIERS; |
| 108 | + |
| 109 | +/** |
| 110 | + * Descriptor structure of a firmaware. |
| 111 | + */ |
| 112 | +typedef struct { |
| 113 | + CPU_IDENTIFIERS cpu_id; |
| 114 | + unsigned int version_major; |
| 115 | + unsigned int version_minor; |
| 116 | + unsigned int version_update; |
| 117 | + unsigned int revision; |
| 118 | + bool release; |
| 119 | + bool local_modification; |
| 120 | + bool mixed_revisions; |
| 121 | + unsigned int author; |
| 122 | + unsigned int variation; |
| 123 | + char version_string[256]; |
| 124 | +} firmware_descriptor_t; |
| 125 | + |
| 126 | +/** |
| 127 | + * Descriptor structure of sound flash. |
| 128 | + */ |
| 129 | +typedef struct { |
| 130 | + unsigned int number_of_sounds; |
| 131 | + unsigned int flash_usage; |
| 132 | + unsigned int available_record_time; |
| 133 | +} sound_flash_descriptor_t; |
| 134 | + |
| 135 | +/** |
| 136 | + * Descriptor structure of ID connection. |
| 137 | + */ |
| 138 | +typedef struct { |
| 139 | + unsigned int number; |
| 140 | +} id_descriptor_t; |
| 141 | + |
| 142 | +/** |
| 143 | + * Global descriptor structure of tuxdroid. |
| 144 | + */ |
| 145 | +typedef struct { |
| 146 | + struct firmwares_t { |
| 147 | + firmware_descriptor_t *package; |
| 148 | + firmware_descriptor_t *tuxcore; |
| 149 | + firmware_descriptor_t *tuxaudio; |
| 150 | + firmware_descriptor_t *tuxrf; |
| 151 | + firmware_descriptor_t *fuxrf; |
| 152 | + firmware_descriptor_t *fuxusb; |
| 153 | + } firmwares; |
| 154 | + struct driver_version_t { |
| 155 | + unsigned int version_major; |
| 156 | + unsigned int version_minor; |
| 157 | + unsigned int version_update; |
| 158 | + unsigned int version_build; |
| 159 | + char version_state[100]; |
| 160 | + char version_string[100]; |
| 161 | + } driver; |
| 162 | + sound_flash_descriptor_t *sound_flash; |
| 163 | + id_descriptor_t *id; |
| 164 | +} tux_descriptor_t; |
| 165 | + |
| 166 | +/** |
| 167 | + * Simple callback definition. |
| 168 | + */ |
| 169 | +typedef void(*drv_simple_callback_t)(void); |
| 170 | + |
| 171 | +/** |
| 172 | + * Status callback definition. |
| 173 | + */ |
| 174 | +typedef void(*drv_status_callback_t)(char *status); |
| 175 | + |
| 176 | +/** |
| 177 | + * Tokens structure |
| 178 | + */ |
| 179 | +typedef char drv_token_str_t[1024]; |
| 180 | +typedef drv_token_str_t drv_tokens_t[256]; |
| 181 | + |
| 182 | +/** |
| 183 | + * Logging target |
| 184 | + */ |
| 185 | +typedef enum log_target |
| 186 | +{ |
| 187 | + LOG_TARGET_TUX, |
| 188 | + LOG_TARGET_SHELL |
| 189 | +} log_target_t; |
| 190 | + |
| 191 | +/** |
| 192 | + * Logging levels, in increasing priorities |
| 193 | + */ |
| 194 | +typedef enum log_level |
| 195 | +{ |
| 196 | + LOG_LEVEL_DEBUG, |
| 197 | + LOG_LEVEL_INFO, |
| 198 | + LOG_LEVEL_WARNING, |
| 199 | + LOG_LEVEL_ERROR, |
| 200 | + LOG_LEVEL_NONE |
| 201 | +} log_level_t; |
| 202 | + |
| 203 | +extern void TuxDrv_Start(void); |
| 204 | +extern void TuxDrv_Stop(void); |
| 205 | + |
| 206 | +/** |
| 207 | + * 31/08/2012 - Joël Maatteotti <sfuser: joelmatteitti> |
| 208 | + */ |
| 209 | +extern bool TuxDrv_Eyes_cmd_off(void); |
| 210 | +extern bool TuxDrv_Mouth_cmd_off(void); |
| 211 | +extern bool TuxDrv_Spinning_cmd_off(void); |
| 212 | +extern bool TuxDrv_Flippers_cmd_off(void); |
| 213 | +extern char *TuxDrv_SoundFlash_dump_descriptor(char *p); |
| 214 | +extern void TuxDrv_LightLevel_update(void); |
| 215 | +/** ------------------------- */ |
| 216 | + |
| 217 | + |
| 218 | +extern const char *TuxDrv_StrError(TuxDrvError error_code); |
| 219 | +extern void TuxDrv_GetDescriptor(tux_descriptor_t *tux_desc); |
| 220 | +extern void TuxDrv_SetStatusCallback(drv_status_callback_t funct); |
| 221 | +extern void TuxDrv_SetEndCycleCallback(drv_simple_callback_t funct); |
| 222 | +extern void TuxDrv_SetDongleConnectedCallback(drv_simple_callback_t funct); |
| 223 | +extern void TuxDrv_SetDongleDisconnectedCallback(drv_simple_callback_t funct); |
| 224 | +extern TuxDrvError TuxDrv_PerformCommand(double delay, char *cmd_str); |
| 225 | +extern void TuxDrv_ClearCommandStack(void); |
| 226 | +extern TuxDrvError TuxDrv_PerformMacroFile(char *file_path); |
| 227 | +extern TuxDrvError TuxDrv_PerformMacroText(char *macro); |
| 228 | +extern TuxDrvError TuxDrv_SoundReflash(char *tracks); |
| 229 | +extern void TuxDrv_SetLogLevel(log_level_t level); |
| 230 | +extern void TuxDrv_SetLogTarget(log_target_t target); |
| 231 | +extern TuxDrvError TuxDrv_GetStatusName(int id, char* name); |
| 232 | +extern TuxDrvError TuxDrv_GetStatusId(char* name, int *id); |
| 233 | +extern TuxDrvError TuxDrv_GetStatusState(int id, char *state); |
| 234 | +extern TuxDrvError TuxDrv_GetStatusValue(int id, char *value); |
| 235 | +extern void TuxDrv_GetAllStatusState(char *state); |
| 236 | +extern int TuxDrv_TokenizeStatus(char *status, drv_tokens_t *tokens); |
| 237 | +extern void TuxDrv_ResetPositions(void); |
| 238 | +extern void TuxDrv_ResetDongle(void); |
| 239 | +extern double get_time(void); |
| 240 | + |
| 241 | +#if defined(__cplusplus) |
| 242 | +} |
| 243 | +#endif |
| 244 | + |
| 245 | +#endif /* _TUX_DRIVER_H_ */ |
0 commit comments