server: Include git version in output of com_si().
[paraslash.git] / afs.h
diff --git a/afs.h b/afs.h
index 9e04a7e..96da2da 100644 (file)
--- a/afs.h
+++ b/afs.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2007-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -21,7 +21,7 @@ struct afs_info {
        uint32_t image_id;
        /** Lyrics blob associated with this file (foreign key). */
        uint32_t lyrics_id;
-       /** Mp3, ogg or aac. */
+       /** Mp3, ogg, aac, wma, spx. */
        uint8_t audio_format_id;
        /** Amplification value. */
        uint8_t amp;
@@ -97,7 +97,13 @@ struct afs_table {
                void *data);
 };
 
-enum play_mode {PLAY_MODE_MOOD, PLAY_MODE_PLAYLIST};
+/** How audio files are selected by afs. */
+enum play_mode {
+       /** Admissible files are determined by a mood definition. */
+       PLAY_MODE_MOOD,
+       /** All listed files are admissible. */
+       PLAY_MODE_PLAYLIST,
+};
 
 /**
  * Data about one audio file.
@@ -123,12 +129,31 @@ struct audio_file_data {
        int fd;
        /** Vss needs this for streaming. */
        struct afh_info afhi;
+       /** Size of the largest chunk. */
+       uint32_t max_chunk_size;
+       /** Needed to get the audio file header. */
+       uint8_t audio_format_id;
 };
 
+/**
+ * Codes used for communication between the server and the afs process.
+ *
+ * Before forking the afs child, para_server creates a bidirectional pipe
+ * through which both processes communicate. Usually para_server requests a new
+ * audio in order to start streaming or when the end of the current audio file
+ * has been reached.  The afs process responds to such a request by sending
+ * back an eight byte buffer. The first four bytes is the uint32_t
+ * representation of the code, usually \p NEXT_AUDIO_FILE if an admissible
+ * audio file was found, successfully opened and verified. The other four bytes
+ * represent the shared memory id of the shared memory area that contains
+ * details about the audio file to be streamed next. The open file descriptor
+ * of that file is also passed from afs to para_server through the same pipe.
+ */
 enum afs_server_code {
+       /** An audio file was successfully opened. */
        NEXT_AUDIO_FILE,
+       /** No admissible audio file was found. */
        NO_ADMISSIBLE_FILES,
-       AFD_CHANGE
 };
 
 /** Flags passed to for_each_matching_row(). */
@@ -234,13 +259,6 @@ int get_afsi_object_of_row(const struct osl_row *row, struct osl_object *obj);
 int audio_file_loop(void *private_data, osl_rbtree_loop_func *func);
 void aft_check_callback(int fd, __a_unused const struct osl_object *query);
 
-/* mood */
-int change_current_mood(char *mood_name);
-void close_current_mood(void);
-int reload_current_mood(void);
-void mood_check_callback(int fd, __a_unused const struct osl_object *query);
-
-
 /* playlist */
 int playlist_open(char *name);
 void playlist_close(void);
@@ -278,21 +296,3 @@ enum blob_table_columns {
        /** A blob table has that many columns. */
        NUM_BLOB_COLUMNS
 };
-
-/** Define an osl table description for a blob table. */
-#define DEFINE_BLOB_TABLE_DESC(table_name) \
-       struct osl_table_description table_name ## _table_desc = { \
-               .name = #table_name, \
-               .num_columns = NUM_BLOB_COLUMNS, \
-               .flags = OSL_LARGE_TABLE, \
-               .column_descriptions = blob_cols \
-       };
-
-/** Define a pointer to an osl blob table with a canonical name. */
-#define DEFINE_BLOB_TABLE_PTR(table_name) struct osl_table *table_name ## _table;
-
-/** Define a blob table. */
-#define INIT_BLOB_TABLE(table_name) \
-       DEFINE_BLOB_TABLE_DESC(table_name); \
-       DEFINE_BLOB_TABLE_PTR(table_name);
-