/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Private declarations for vboot_audio.c. Defined here for easier testing.
 */

#ifndef VBOOT_REFERENCE_VBOOT_AUDIO_PRIVATE_H_
#define VBOOT_REFERENCE_VBOOT_AUDIO_PRIVATE_H_

#include "vboot_api.h"
#include "vboot_audio.h"

typedef struct VbDevMusicNote {
  uint16_t msec;
  uint16_t frequency;
} __attribute__((packed)) VbDevMusicNote;

typedef struct VbDevMusic {
  uint8_t sig[4];                       /* "$SND" */
  uint32_t checksum;                    /* crc32 over count & all notes */
  uint32_t count;                       /* number of notes */
  VbDevMusicNote notes[1];              /* gcc allows [0], MSVC doesn't */
  /* more VbDevMusicNotes follow immediately */
} __attribute__((packed)) VbDevMusic;

struct VbAudioContext {
  /* note tracking */
  VbDevMusicNote* music_notes;
  uint32_t note_count;
  uint32_t next_note;

  /* implementation flags */
  int background_beep;
  int free_notes_when_done;

  /* sound tracking */
  uint16_t current_frequency;
  uint64_t play_until;
  uint64_t last_time;
};

#ifdef CUSTOM_MUSIC
void *VbExGetMusicPtr(void);
uint32_t VbExMaxMusicSize(void);
#define CUSTOM_MUSIC_NOTES VbExGetMusicPtr()
#define CUSTOM_MUSIC_MAXSIZE VbExMaxMusicSize()
#else
#define CUSTOM_MUSIC_NOTES 0
#define CUSTOM_MUSIC_MAXSIZE 0
#endif

#endif /* VBOOT_REFERENCE_VBOOT_AUDIO_PRIVATE_H_ */

