/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2003 Linus Nielsen Feltzing
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/
#ifndef RADIO_H
#define RADIO_H

#ifndef FMRADIO_H
#include "fmradio.h"
#endif
#include "screen_access.h"
#include "bmp.h"

enum {
    RADIO_SCAN_MODE = 0,
    RADIO_PRESET_MODE,
};

#if CONFIG_TUNER
void radio_load_presets(char *filename);
void radio_init(void) INIT_ATTR;
int radio_screen(void);
void radio_start(void);
void radio_pause(void);
void radio_stop(void);
bool radio_hardware_present(void);
bool in_radio_screen(void);

bool radio_scan_mode(void); /* true for scan mode, false for preset mode */
bool radio_is_stereo(void);
int radio_current_frequency(void);
int radio_current_preset(void);
int radio_preset_count(void);
const struct fmstation *radio_get_preset(int preset);

/* skin functions */
void fms_data_load(enum screen_type screen, const char *buf, bool isfile);
void fms_skin_init(void);

/* callbacks for the radio settings */
void set_radio_region(int region);
void toggle_mono_mode(bool mono);

#define MAX_FMPRESET_LEN 27

struct fmstation
{
    int frequency; /* In Hz */
    char name[MAX_FMPRESET_LEN+1];
};
const char* radio_get_preset_name(int preset);
void presets_draw_markers(struct screen *screen, int x, int y, int w, int h);

#ifdef HAVE_ALBUMART
void radioart_init(bool entering_screen);
int radio_get_art_hid(struct dim *requested_dim);
#endif

void next_station(int direction);


enum fms_exiting {
    FMS_EXIT,
    FMS_ENTER
};

/* only radio.c should be using these! */
int fms_do_button_loop(bool update_screen);
struct gui_wps *fms_get(enum screen_type screen);
void fms_fix_displays(enum fms_exiting toggle_state);

#endif /* CONFIG_TUNER */

#endif /* RADIO_H */
