/usr/include/aroarfw/i2c.h is in aroarfw-dev 0.1~beta5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | //i2c.h:
/*
* Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2012-2013
*
* This file is part of aroarfw, a RoarAudio framework for
* embedded systems (µControlers).
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3
* or (at your option) any later version as published by
* the Free Software Foundation.
*
* aroarfw is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef _AROARFW_I2C_H_
#define _AROARFW_I2C_H_
#include <stdint.h>
#include <aroarfw/types.h>
//! Offset of interface version
#define I2C_OFFSET_IFVERSION 0x00
//! Offset of status byte 0
#define I2C_OFFSET_STATUS0 0x01
//! offset of bank select byte (command byte)
#define I2C_OFFSET_BANKSELECT 0x02
//! Offset of device error code
#define I2C_OFFSET_DEVERROR 0x03
//! Offset of bank data
#define I2C_OFFSET_BANKDATA 0x04
//! Version of the current interface
#define RI2C_INTERFACE_VERSION 0x00
//! Initial value for status byte 0
#define RI2C_STATUS0_NONE 0x00
//! Device ready (device has fully booted or reseted)
#define RI2C_STATUS0_DEVICE_READY 0x01
//! Seflcheck passed
#define RI2C_STATUS0_SELFCHECK_PASSED 0x02
//! Selfcheck returned error
#define RI2C_STATUS0_SELFCHECK_ERROR 0x04
//! There are panding device status updates (e.g. <b>any</b> DAC or GPI level change)
#define RI2C_STATUS0_UPDATES_PENDING 0x08
//! Initial value for status byte 1
#define RI2C_STATUS1_NONE 0x00
//! Initial value for status byte 2
#define RI2C_STATUS2_NONE 0x00
//! Caps Byte 0 for RI2C_DEV_BRIDGE: No caps set.
#define RI2C_CAPS0_BRIDGE_NONE 0x00
//! Caps Byte 0 for RI2C_DEV_BRIDGE: Network present (any kind of network).
#define RI2C_CAPS0_BRIDGE_NETWORK 0x01
//! Caps Byte 0 for RI2C_DEV_BRIDGE: Ethernet present.
#define RI2C_CAPS0_BRIDGE_ETHERNET 0x02
//! Caps Byte 0 for RI2C_DEV_BRIDGE: I²C present.
#define RI2C_CAPS0_BRIDGE_I2C 0x04
//! Caps Byte 0 for RI2C_DEV_BRIDGE: SPI present.
#define RI2C_CAPS0_BRIDGE_SPI 0x08
//! Caps Byte 0 for RI2C_DEV_BRIDGE: DMX512 present.
#define RI2C_CAPS0_BRIDGE_DMX512 0x10
//! Caps Byte 0 for RI2C_DEV_BRIDGE: MIDI present.
#define RI2C_CAPS0_BRIDGE_MIDI 0x20
//! Caps Byte 0 for RI2C_DEV_BRIDGE: Wavefrom IO present.
#define RI2C_CAPS0_BRIDGE_WAVEFORM 0x40
//! Caps Byte 0 for RI2C_DEV_BRIDGE: Reserved bit.
#define RI2C_CAPS0_BRIDGE_RESERVED7 0x80
//! Type for storing I²C slave addresses
typedef uint8_t ri2c_addr_t;
//! Type for device types
typedef enum {
//! Most generic device. Supports bank 0
RI2C_DEV_GENERIC = 0x00,
// 1-63: RAF Defined types
//! This is a bridge device. It converts between at least two diffrent communication channels. Subtypes are defined in ri2c_subtype_bridge_t.
RI2C_DEV_BRIDGE = 0x01,
//$ for i in `seq 64 127`; do v=`expr $i - 64`; printf " //! Vendor specific device type %i\n RI2C_DEV_VENDOR%.2i = %#0.2x,\n" $v $v $i; done
//! Vendor specific device type 0
RI2C_DEV_VENDOR00 = 0x40,
//! Vendor specific device type 1
RI2C_DEV_VENDOR01 = 0x41,
//! Vendor specific device type 2
RI2C_DEV_VENDOR02 = 0x42,
//! Vendor specific device type 3
RI2C_DEV_VENDOR03 = 0x43,
//! Vendor specific device type 4
RI2C_DEV_VENDOR04 = 0x44,
//! Vendor specific device type 5
RI2C_DEV_VENDOR05 = 0x45,
//! Vendor specific device type 6
RI2C_DEV_VENDOR06 = 0x46,
//! Vendor specific device type 7
RI2C_DEV_VENDOR07 = 0x47,
//! Vendor specific device type 8
RI2C_DEV_VENDOR08 = 0x48,
//! Vendor specific device type 9
RI2C_DEV_VENDOR09 = 0x49,
//! Vendor specific device type 10
RI2C_DEV_VENDOR10 = 0x4a,
//! Vendor specific device type 11
RI2C_DEV_VENDOR11 = 0x4b,
//! Vendor specific device type 12
RI2C_DEV_VENDOR12 = 0x4c,
//! Vendor specific device type 13
RI2C_DEV_VENDOR13 = 0x4d,
//! Vendor specific device type 14
RI2C_DEV_VENDOR14 = 0x4e,
//! Vendor specific device type 15
RI2C_DEV_VENDOR15 = 0x4f,
//! Vendor specific device type 16
RI2C_DEV_VENDOR16 = 0x50,
//! Vendor specific device type 17
RI2C_DEV_VENDOR17 = 0x51,
//! Vendor specific device type 18
RI2C_DEV_VENDOR18 = 0x52,
//! Vendor specific device type 19
RI2C_DEV_VENDOR19 = 0x53,
//! Vendor specific device type 20
RI2C_DEV_VENDOR20 = 0x54,
//! Vendor specific device type 21
RI2C_DEV_VENDOR21 = 0x55,
//! Vendor specific device type 22
RI2C_DEV_VENDOR22 = 0x56,
//! Vendor specific device type 23
RI2C_DEV_VENDOR23 = 0x57,
//! Vendor specific device type 24
RI2C_DEV_VENDOR24 = 0x58,
//! Vendor specific device type 25
RI2C_DEV_VENDOR25 = 0x59,
//! Vendor specific device type 26
RI2C_DEV_VENDOR26 = 0x5a,
//! Vendor specific device type 27
RI2C_DEV_VENDOR27 = 0x5b,
//! Vendor specific device type 28
RI2C_DEV_VENDOR28 = 0x5c,
//! Vendor specific device type 29
RI2C_DEV_VENDOR29 = 0x5d,
//! Vendor specific device type 30
RI2C_DEV_VENDOR30 = 0x5e,
//! Vendor specific device type 31
RI2C_DEV_VENDOR31 = 0x5f,
//! Vendor specific device type 32
RI2C_DEV_VENDOR32 = 0x60,
//! Vendor specific device type 33
RI2C_DEV_VENDOR33 = 0x61,
//! Vendor specific device type 34
RI2C_DEV_VENDOR34 = 0x62,
//! Vendor specific device type 35
RI2C_DEV_VENDOR35 = 0x63,
//! Vendor specific device type 36
RI2C_DEV_VENDOR36 = 0x64,
//! Vendor specific device type 37
RI2C_DEV_VENDOR37 = 0x65,
//! Vendor specific device type 38
RI2C_DEV_VENDOR38 = 0x66,
//! Vendor specific device type 39
RI2C_DEV_VENDOR39 = 0x67,
//! Vendor specific device type 40
RI2C_DEV_VENDOR40 = 0x68,
//! Vendor specific device type 41
RI2C_DEV_VENDOR41 = 0x69,
//! Vendor specific device type 42
RI2C_DEV_VENDOR42 = 0x6a,
//! Vendor specific device type 43
RI2C_DEV_VENDOR43 = 0x6b,
//! Vendor specific device type 44
RI2C_DEV_VENDOR44 = 0x6c,
//! Vendor specific device type 45
RI2C_DEV_VENDOR45 = 0x6d,
//! Vendor specific device type 46
RI2C_DEV_VENDOR46 = 0x6e,
//! Vendor specific device type 47
RI2C_DEV_VENDOR47 = 0x6f,
//! Vendor specific device type 48
RI2C_DEV_VENDOR48 = 0x70,
//! Vendor specific device type 49
RI2C_DEV_VENDOR49 = 0x71,
//! Vendor specific device type 50
RI2C_DEV_VENDOR50 = 0x72,
//! Vendor specific device type 51
RI2C_DEV_VENDOR51 = 0x73,
//! Vendor specific device type 52
RI2C_DEV_VENDOR52 = 0x74,
//! Vendor specific device type 53
RI2C_DEV_VENDOR53 = 0x75,
//! Vendor specific device type 54
RI2C_DEV_VENDOR54 = 0x76,
//! Vendor specific device type 55
RI2C_DEV_VENDOR55 = 0x77,
//! Vendor specific device type 56
RI2C_DEV_VENDOR56 = 0x78,
//! Vendor specific device type 57
RI2C_DEV_VENDOR57 = 0x79,
//! Vendor specific device type 58
RI2C_DEV_VENDOR58 = 0x7a,
//! Vendor specific device type 59
RI2C_DEV_VENDOR59 = 0x7b,
//! Vendor specific device type 60
RI2C_DEV_VENDOR60 = 0x7c,
//! Vendor specific device type 61
RI2C_DEV_VENDOR61 = 0x7d,
//! Vendor specific device type 62
RI2C_DEV_VENDOR62 = 0x7e,
//! Vendor specific device type 63
RI2C_DEV_VENDOR63 = 0x7f
} ri2c_dev_t;
//! Subtype for devices of type RI2C_DEV_BRIDGE
typedef enum {
//! Generic bridge device. Can be used as prent for vendor specific bridges.
RI2C_SUBTYPE_BRIDGE_GENERIC = 0x00,
//! This is a media converter. It converts between two (or more) low level protocols and physical layers.
RI2C_SUBTYPE_BRIDGE_CONVERTER = 0x01
} ri2c_subtype_bridge_t;
//! Type for memory banks (commands)
typedef enum {
// 0-31: Generic
//! Generic device information
RI2C_BANK_DEVINFO = 0x00,
//! Generic control of the device
RI2C_BANK_SYSCTL = 0x01,
//! General Purpose Digital Input/Output
RI2C_BANK_GPDIO = 0x02,
//! General Purpose Analog Input/Output
RI2C_BANK_GPAIO = 0x03,
// 32-63: RAF Defined
// DISPLAY interface?
//! DMX512 data
RI2C_BANK_DMX512 = 0x3f,
// 64-95: RAF Defined Type/Sub-Type specific
//$ for i in `seq 64 95`; do v=`expr $i - 64`; printf " //! Assigned Type and Subtype specific bank %i\n RI2C_BANK_TYPEST%.2i = %#0.2x,\n" $v $v $i; done
//! Assigned Type and Subtype specific bank 0
RI2C_BANK_TYPEST00 = 0x40,
//! Assigned Type and Subtype specific bank 1
RI2C_BANK_TYPEST01 = 0x41,
//! Assigned Type and Subtype specific bank 2
RI2C_BANK_TYPEST02 = 0x42,
//! Assigned Type and Subtype specific bank 3
RI2C_BANK_TYPEST03 = 0x43,
//! Assigned Type and Subtype specific bank 4
RI2C_BANK_TYPEST04 = 0x44,
//! Assigned Type and Subtype specific bank 5
RI2C_BANK_TYPEST05 = 0x45,
//! Assigned Type and Subtype specific bank 6
RI2C_BANK_TYPEST06 = 0x46,
//! Assigned Type and Subtype specific bank 7
RI2C_BANK_TYPEST07 = 0x47,
//! Assigned Type and Subtype specific bank 8
RI2C_BANK_TYPEST08 = 0x48,
//! Assigned Type and Subtype specific bank 9
RI2C_BANK_TYPEST09 = 0x49,
//! Assigned Type and Subtype specific bank 10
RI2C_BANK_TYPEST10 = 0x4a,
//! Assigned Type and Subtype specific bank 11
RI2C_BANK_TYPEST11 = 0x4b,
//! Assigned Type and Subtype specific bank 12
RI2C_BANK_TYPEST12 = 0x4c,
//! Assigned Type and Subtype specific bank 13
RI2C_BANK_TYPEST13 = 0x4d,
//! Assigned Type and Subtype specific bank 14
RI2C_BANK_TYPEST14 = 0x4e,
//! Assigned Type and Subtype specific bank 15
RI2C_BANK_TYPEST15 = 0x4f,
//! Assigned Type and Subtype specific bank 16
RI2C_BANK_TYPEST16 = 0x50,
//! Assigned Type and Subtype specific bank 17
RI2C_BANK_TYPEST17 = 0x51,
//! Assigned Type and Subtype specific bank 18
RI2C_BANK_TYPEST18 = 0x52,
//! Assigned Type and Subtype specific bank 19
RI2C_BANK_TYPEST19 = 0x53,
//! Assigned Type and Subtype specific bank 20
RI2C_BANK_TYPEST20 = 0x54,
//! Assigned Type and Subtype specific bank 21
RI2C_BANK_TYPEST21 = 0x55,
//! Assigned Type and Subtype specific bank 22
RI2C_BANK_TYPEST22 = 0x56,
//! Assigned Type and Subtype specific bank 23
RI2C_BANK_TYPEST23 = 0x57,
//! Assigned Type and Subtype specific bank 24
RI2C_BANK_TYPEST24 = 0x58,
//! Assigned Type and Subtype specific bank 25
RI2C_BANK_TYPEST25 = 0x59,
//! Assigned Type and Subtype specific bank 26
RI2C_BANK_TYPEST26 = 0x5a,
//! Assigned Type and Subtype specific bank 27
RI2C_BANK_TYPEST27 = 0x5b,
//! Assigned Type and Subtype specific bank 28
RI2C_BANK_TYPEST28 = 0x5c,
//! Assigned Type and Subtype specific bank 29
RI2C_BANK_TYPEST29 = 0x5d,
//! Assigned Type and Subtype specific bank 30
RI2C_BANK_TYPEST30 = 0x5e,
//! Assigned Type and Subtype specific bank 31
RI2C_BANK_TYPEST31 = 0x5f,
// 96-127: Vendor + Type/Sub-Type specific
//$ for i in `seq 96 127`; do v=`expr $i - 96`; printf " //! Vendor, Type and Subtype specific bank %i\n RI2C_BANK_VENDOR%.2i = %#0.2x,\n" $v $v $i; done
//! Vendor, Type and Subtype specific bank 0
RI2C_BANK_VENDOR00 = 0x60,
//! Vendor, Type and Subtype specific bank 1
RI2C_BANK_VENDOR01 = 0x61,
//! Vendor, Type and Subtype specific bank 2
RI2C_BANK_VENDOR02 = 0x62,
//! Vendor, Type and Subtype specific bank 3
RI2C_BANK_VENDOR03 = 0x63,
//! Vendor, Type and Subtype specific bank 4
RI2C_BANK_VENDOR04 = 0x64,
//! Vendor, Type and Subtype specific bank 5
RI2C_BANK_VENDOR05 = 0x65,
//! Vendor, Type and Subtype specific bank 6
RI2C_BANK_VENDOR06 = 0x66,
//! Vendor, Type and Subtype specific bank 7
RI2C_BANK_VENDOR07 = 0x67,
//! Vendor, Type and Subtype specific bank 8
RI2C_BANK_VENDOR08 = 0x68,
//! Vendor, Type and Subtype specific bank 9
RI2C_BANK_VENDOR09 = 0x69,
//! Vendor, Type and Subtype specific bank 10
RI2C_BANK_VENDOR10 = 0x6a,
//! Vendor, Type and Subtype specific bank 11
RI2C_BANK_VENDOR11 = 0x6b,
//! Vendor, Type and Subtype specific bank 12
RI2C_BANK_VENDOR12 = 0x6c,
//! Vendor, Type and Subtype specific bank 13
RI2C_BANK_VENDOR13 = 0x6d,
//! Vendor, Type and Subtype specific bank 14
RI2C_BANK_VENDOR14 = 0x6e,
//! Vendor, Type and Subtype specific bank 15
RI2C_BANK_VENDOR15 = 0x6f,
//! Vendor, Type and Subtype specific bank 16
RI2C_BANK_VENDOR16 = 0x70,
//! Vendor, Type and Subtype specific bank 17
RI2C_BANK_VENDOR17 = 0x71,
//! Vendor, Type and Subtype specific bank 18
RI2C_BANK_VENDOR18 = 0x72,
//! Vendor, Type and Subtype specific bank 19
RI2C_BANK_VENDOR19 = 0x73,
//! Vendor, Type and Subtype specific bank 20
RI2C_BANK_VENDOR20 = 0x74,
//! Vendor, Type and Subtype specific bank 21
RI2C_BANK_VENDOR21 = 0x75,
//! Vendor, Type and Subtype specific bank 22
RI2C_BANK_VENDOR22 = 0x76,
//! Vendor, Type and Subtype specific bank 23
RI2C_BANK_VENDOR23 = 0x77,
//! Vendor, Type and Subtype specific bank 24
RI2C_BANK_VENDOR24 = 0x78,
//! Vendor, Type and Subtype specific bank 25
RI2C_BANK_VENDOR25 = 0x79,
//! Vendor, Type and Subtype specific bank 26
RI2C_BANK_VENDOR26 = 0x7a,
//! Vendor, Type and Subtype specific bank 27
RI2C_BANK_VENDOR27 = 0x7b,
//! Vendor, Type and Subtype specific bank 28
RI2C_BANK_VENDOR28 = 0x7c,
//! Vendor, Type and Subtype specific bank 29
RI2C_BANK_VENDOR29 = 0x7d,
//! Vendor, Type and Subtype specific bank 30
RI2C_BANK_VENDOR30 = 0x7e,
//! Vendor, Type and Subtype specific bank 31
RI2C_BANK_VENDOR31 = 0x7f
} ri2c_bank_t;
//! Type to store (in packed format) static information for the device info bank (bank 0). This is prefixed with status byte 1 and status byte 2
typedef struct {
//! Vendor of this device. This is a assigned device vendor ID
uint8_t vendor;
//! Vendor specific type of device
uint8_t type;
//! Vendor specific subtype of device
uint8_t subtype;
//! Vendor specific revision of the device
uint8_t revision;
//! Parent device's vendor ID
uint8_t parentvendor;
//! Parent device's type ID
uint8_t parenttype;
//! Parent device's subtype ID
uint8_t parentsubtype;
//! Capabilities of the device (type and subtype depended)
uint8_t caps[3];
//! Sieral of the device
ruuid_t serial;
} __RPACKED__ ri2c_devinfo_data_t;
#endif
//ll
|