Blame lib/driver/cdtext_private.h

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2004-2005, 2008, 2011-2013
Packit dd8086
   Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086

Packit dd8086
#ifndef CDIO_DRIVER_CDTEXT_PRIVATE_H_
Packit dd8086
#define CDIO_DRIVER_CDTEXT_PRIVATE_H_
Packit dd8086
Packit dd8086
#include <cdio/types.h>
Packit dd8086
Packit dd8086
#ifndef CDIO_CD_MAX_TRACKS
Packit dd8086
# define CDIO_CD_MAX_TRACKS 99 /* Largest CD track number */
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#define CDTEXT_GET_LEN16(p) (p[0]<<8) + p[1]
Packit dd8086
Packit dd8086
Packit dd8086
typedef enum {
Packit dd8086
  CDTEXT_LEN_BINARY_MAX     = 9216,
Packit dd8086
  CDTEXT_LEN_TEXTDATA       = 12,
Packit dd8086
  CDTEXT_LEN_PACK           = 18,
Packit dd8086
  CDTEXT_LEN_BLOCKSIZE      = 36,
Packit dd8086
  CDTEXT_NUM_BLOCKS_MAX     = 8,
Packit dd8086
  CDTEXT_NUM_TRACKS_MAX     = CDIO_CD_MAX_TRACKS+1, /* +1 for 0th disk track */
Packit dd8086
  CDTEXT_NUM_BLOCKPACKS_MAX = 255
Packit dd8086
} cdtext_format_enum_t;
Packit dd8086
Packit dd8086
/**
Packit dd8086
 * From table J.2 - Pack Type Indicator Definitions from
Packit dd8086
 * Working Draft NCITS XXX T10/1364-D Revision 10G. November 12, 2001.
Packit dd8086
 */
Packit dd8086
typedef enum {
Packit dd8086
  CDTEXT_PACK_TITLE         = 0x80,
Packit dd8086
  CDTEXT_PACK_PERFORMER     = 0x81,
Packit dd8086
  CDTEXT_PACK_SONGWRITER    = 0x82,
Packit dd8086
  CDTEXT_PACK_COMPOSER      = 0x83,
Packit dd8086
  CDTEXT_PACK_ARRANGER      = 0x84,
Packit dd8086
  CDTEXT_PACK_MESSAGE       = 0x85,
Packit dd8086
  CDTEXT_PACK_DISCID        = 0x86,
Packit dd8086
  CDTEXT_PACK_GENRE         = 0x87,
Packit dd8086
  CDTEXT_PACK_TOC           = 0x88,
Packit dd8086
  CDTEXT_PACK_TOC2          = 0x89,
Packit dd8086
  CDTEXT_PACK_UPC           = 0x8E,
Packit dd8086
  CDTEXT_PACK_BLOCKSIZE     = 0x8F
Packit dd8086
} cdtext_packtype_enum_t;
Packit dd8086
Packit dd8086
Packit dd8086
/** CD-Text character encodings */
Packit dd8086
typedef enum cdtext_charcode_enum_s {
Packit dd8086
  CDTEXT_CHARCODE_ISO_8859_1 = 0x00, /**< ISO-8859-1 (8 bit), Latin-1 */
Packit dd8086
  CDTEXT_CHARCODE_ASCII      = 0x01, /**< ASCII (7 bit) */
Packit dd8086
  CDTEXT_CHARCODE_SHIFT_JIS  = 0x80  /**< Shift_JIS (double byte), JIS X 0208 Appendix 1 */
Packit dd8086
///* The following were proposed but never implemented anywhere.
Packit dd8086
// * They are mentioned for completeness here
Packit dd8086
// *  CDTEXT_CHARCODE_KOREAN     = 0x81, /**< Korean */
Packit dd8086
// *  CDTEXT_CHARCODE_CHINESE    = 0x82, /**< Mandarin Chinese */
Packit dd8086
// *  CDTEXT_CHARCODE_UNDEFINED  = 0xFF, /**< everything else */
Packit dd8086
// */
Packit dd8086
Packit dd8086
} cdtext_charcode_enum_t;
Packit dd8086
Packit dd8086
/** Structure of CD-TEXT data Packs */
Packit dd8086
struct cdtext_pack_s
Packit dd8086
{
Packit dd8086
  uint8_t  type;
Packit dd8086
  uint8_t  i_track;
Packit dd8086
  uint8_t  seq;
Packit dd8086
  uint8_t  char_pos;  /* character position */
Packit dd8086
  uint8_t  block;     /* block number 0..7 */
Packit dd8086
  uint8_t  db_chars;  /* double byte character */
Packit dd8086
  uint8_t  text[CDTEXT_LEN_TEXTDATA];
Packit dd8086
  uint8_t  crc[2];
Packit dd8086
};
Packit dd8086
Packit dd8086
Packit dd8086
/** Structure of of block size information packs */
Packit dd8086
struct cdtext_blocksize_s
Packit dd8086
{
Packit dd8086
  uint8_t charcode;      /* character code */
Packit dd8086
  uint8_t i_first_track; /* first track number */
Packit dd8086
  uint8_t i_last_track;  /* last track number */
Packit dd8086
  uint8_t copyright;     /* 3 CD-TEXT is copyrighted, 0 no copyright on CD-TEXT */
Packit dd8086
  uint8_t i_packs[16];   /* number of packs of each type
Packit dd8086
                          * 0 TITLE; 1 PERFORMER; 2 SONGWRITER; 3 COMPOSER;
Packit dd8086
                          * 4 ARRANGER; 5 MESSAGE; 6 DISCID; 7 GENRE;
Packit dd8086
                          * 8 TOC; 9 TOC2; 10-12 RESERVED; 13 CLOSED;
Packit dd8086
                          * 14 UPC_ISRC; 15 BLOCKSIZE */
Packit dd8086
  uint8_t lastseq[8];    /* last sequence for block 0..7 */
Packit dd8086
  uint8_t langcode[8];   /* language code for block 0..7 */
Packit dd8086
};
Packit dd8086
Packit dd8086
typedef struct cdtext_pack_s cdtext_pack_t;
Packit dd8086
typedef struct cdtext_blocksize_s cdtext_blocksize_t;
Packit dd8086
Packit dd8086
/*! Structure for CD-TEXT of a track. */
Packit dd8086
struct cdtext_track_s {
Packit dd8086
  char *field[MAX_CDTEXT_FIELDS];
Packit dd8086
};
Packit dd8086
Packit dd8086
/*! Structure for CD-TEXT of a block. */
Packit dd8086
struct cdtext_block_s {
Packit dd8086
  struct cdtext_track_s track[CDTEXT_NUM_TRACKS_MAX]; /**< 0: disc; 1..99: tracks */
Packit dd8086
  cdtext_genre_t genre_code;                          /**< genre code of the disc */
Packit dd8086
  cdtext_lang_t  language_code;                       /**< language of this block */
Packit dd8086
  bool           copyright;                           /**< CD-TEXT copyright      */
Packit dd8086
  track_t        first_track;                         /**< first track number     */
Packit dd8086
  track_t        last_track;                          /**< last track number      */
Packit dd8086
};
Packit dd8086
Packit dd8086
/*! Structure for CD-TEXT of a disc.
Packit dd8086
Packit dd8086
  @see cdtext_init, cdtext_destroy, cdtext_get, and cdtext_set.
Packit dd8086
 */
Packit dd8086
struct cdtext_s {
Packit dd8086
  struct cdtext_block_s block[CDTEXT_NUM_BLOCKS_MAX]; /**< CD-TEXT for block 0..7 */
Packit dd8086
  uint8_t  block_i;                                   /**< index of active block  */
Packit dd8086
};
Packit dd8086
Packit dd8086
int cdtext_read_pack (cdtext_pack_t *pack, const uint8_t *data);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  returns enum of field if key is a CD-Text keyword,
Packit dd8086
  returns CDTEXT_FIELD_INVALID otherwise.
Packit dd8086
*/
Packit dd8086
cdtext_field_t cdtext_is_field (const char *field);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  returns enum of language if lang is a valid language,
Packit dd8086
  returns CDTEXT_LANGUAGE_UNKNOWN otherwise.
Packit dd8086
*/
Packit dd8086
cdtext_lang_t cdtext_is_language (const char *lang);
Packit dd8086
Packit dd8086
Packit dd8086
#endif /* CDIO_DRIVER_CDTEXT_PRIVATE_H_ */
Packit dd8086

Packit dd8086
/*
Packit dd8086
 * Local variables:
Packit dd8086
 *  c-file-style: "gnu"
Packit dd8086
 *  tab-width: 8
Packit dd8086
 *  indent-tabs-mode: nil
Packit dd8086
 * End:
Packit dd8086
 */