libnjb  2.2.7
Macros | Functions | Variables
protocol.c File Reference
#include "config.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include "libnjb.h"
#include "protocol.h"
#include "byteorder.h"
#include "njb_error.h"
#include "usb_io.h"
#include "ioutil.h"
#include "defs.h"
#include "base.h"
#include "eax.h"
#include "songid.h"
#include "datafile.h"
#include "njbtime.h"
#include "playlist.h"

Macros

#define NJB_STATUS(a, b)
 

Functions

int njb_init_state (njb_t *njb)
 
int njb_set_library_counter (njb_t *njb, u_int64_t count)
 
int njb_get_library_counter (njb_t *njb, njblibctr_t *lcount)
 
int njb_ping (njb_t *njb)
 
int njb_verify_last_command (njb_t *njb)
 
int njb_capture (njb_t *njb, int which)
 
int njb_get_track_tag_header (njb_t *njb, njbttaghdr_t *tagh, int cmd)
 
njb_songid_tnjb_get_track_tag (njb_t *njb, njbttaghdr_t *tagh)
 
int njb_get_playlist_header (njb_t *njb, njbplhdr_t *plh, int cmd)
 
njb_playlist_tnjb_get_playlist (njb_t *njb, njbplhdr_t *plh)
 
int njb_get_disk_usage (njb_t *njb, u_int64_t *total, u_int64_t *free_bytes)
 
int njb_get_owner_string (njb_t *njb, owner_string name)
 
int njb_set_owner_string (njb_t *njb, owner_string name)
 
int njb_get_datafile_header (njb_t *njb, njbdfhdr_t *dfh, int cmd)
 
njb_datafile_tnjb_get_datafile_tag (njb_t *njb, njbdfhdr_t *dfh)
 
u_int32_t njb_receive_file_block (njb_t *njb, u_int32_t offset, u_int32_t bsize, void *bp)
 
int njb_request_file (njb_t *njb, u_int32_t fileid)
 
int njb_transfer_complete (njb_t *njb)
 
int njb_send_track_tag (njb_t *njb, njbttaghdr_t *tagh, void *tag)
 
int njb_send_datafile_tag (njb_t *njb, njbdfhdr_t *dfh, void *tag)
 
u_int32_t njb_send_file_block (njb_t *njb, void *data, u_int32_t blocksize)
 
int njb_stop_play (njb_t *njb)
 
int njb_get_eax_size (njb_t *njb, u_int32_t *size)
 
void njb_read_eaxtypes (njb_t *njb, u_int32_t size)
 
njb_eax_tnjb_get_nexteax (njb_t *njb)
 
njb_time_tnjb_get_time (njb_t *njb)
 
int njb_set_time (njb_t *njb, njb_time_t *time)
 
int njb_create_playlist (njb_t *njb, char *name, u_int32_t *plid)
 
int njb_delete_playlist (njb_t *njb, u_int32_t plid)
 
int njb_rename_playlist (njb_t *njb, u_int32_t plid, char *name)
 
int njb_add_track_to_playlist (njb_t *njb, u_int32_t plid, u_int32_t trid)
 
int njb_add_multiple_tracks_to_playlist (njb_t *njb, u_int32_t plid, u_int32_t *trids, u_int16_t ntracks)
 
int njb_delete_track (njb_t *njb, u_int32_t trackid)
 
int njb_delete_datafile (njb_t *njb, u_int32_t fileid)
 
int njb_play_or_queue (njb_t *njb, u_int32_t trackid, int cmd)
 
int njb_elapsed_time (njb_t *njb, u_int16_t *elapsed, int *change)
 
int njb_replace_track_tag (njb_t *njb, njbttaghdr_t *tagh, void *tag)
 
int njb_adjust_sound (njb_t *njb, u_int8_t effect, int16_t value)
 

Variables

int __sub_depth
 

Detailed Description

This file contains the major parts of the NJB1 (OaSIS) protocol for all jukebox functionality.

Macro Definition Documentation

◆ NJB_STATUS

#define NJB_STATUS (   a,
 
)
Value:
{ \
char *s = njb_status_string(b);\
njb_error_add_string(a,subroutinename,s);\
free (s); \
}

This returns the string representing an internal NJB1 error code.

Function Documentation

◆ njb_capture()

int njb_capture ( njb_t njb,
int  which 
)

This function captures the NJB1 device.

Parameters
njbis a pointer to the jukebox object to use.
Returns
0 on success, -1 on failure.

References EO_BADSTATUS, EO_USBCTL, and usb_setup().

Referenced by NJB_Capture(), and NJB_Release().

◆ njb_get_datafile_header()

int njb_get_datafile_header ( njb_t njb,
njbdfhdr_t dfh,
int  cmd 
)

Retrieves a datafile header from the NJB1

Returns
0 on OK, -1 on error, -2 means the last header has already been returned.

References EO_USBCTL, njb1_bytes_to_32bit(), NJB_STATUS, and usb_setup().

◆ njb_get_disk_usage()

int njb_get_disk_usage ( njb_t njb,
u_int64_t *  total,
u_int64_t *  free_bytes 
)

Get disk usage for the NJB1

Returns
0 on OK, -1 on failure, -2 means "try again"

References EO_USBCTL, njb1_bytes_to_64bit(), NJB_STATUS, and usb_setup().

Referenced by NJB_Get_Disk_Usage().

◆ njb_get_library_counter()

int njb_get_library_counter ( njb_t njb,
njblibctr_t lcount 
)

This function gets the library counter from the device. The library counter is sent back and forth to the device to indicate if something in the library as changed.

Parameters
njbis a pointer to the jukebox object to use. @lcount is a pointer to the current library counter to get from the device.
Returns
0 on success, -1 on failure.

References data_dump(), EO_USBCTL, njb1_bytes_to_64bit(), NJB_STATUS, and usb_setup().

Referenced by NJB_Capture().

◆ njb_get_nexteax()

njb_eax_t* njb_get_nexteax ( njb_t njb)

This retrieves an EAX effect from the list of effects read in by the previous functions.

Parameters
njba pointer to the NJB object to use

References njb_eax_struct::next, and njb_struct::protocol_state.

Referenced by NJB_Get_EAX_Type().

◆ njb_get_playlist_header()

int njb_get_playlist_header ( njb_t njb,
njbplhdr_t plh,
int  cmd 
)

Gets a playlist header.

Returns
0 on OK, -1 on error, -2 means "retry", -3 means "not found" or "last playlist already retrieved".

References EO_USBCTL, njb1_bytes_to_32bit(), NJB_STATUS, and usb_setup().

◆ njb_get_track_tag_header()

int njb_get_track_tag_header ( njb_t njb,
njbttaghdr_t tagh,
int  cmd 
)

Get a track header from the NJB1.

Returns
0 on OK, -1 on error, -2 if the last header has been retrieved.

References EO_USBCTL, njb1_bytes_to_32bit(), NJB_STATUS, and usb_setup().

◆ njb_init_state()

int njb_init_state ( njb_t njb)

Initializes the basic state of the njb->protocol_state for the NJB1-device.

Parameters
njbis a pointer to the jukebox object to use.
Returns
0 on success, -1 on failure.

References njb_state_t::power, njb_struct::protocol_state, and njb_state_t::sdmiid.

Referenced by NJB_Open().

◆ njb_ping()

int njb_ping ( njb_t njb)

This function pings the NJB1 device to see if it is up and running, and ready for action. This is done every now and then.

Parameters
njbis a pointer to the jukebox object to use.
Returns
0 on success, -1 on failure.

References data_dump(), EO_RDSHORT, EO_USBBLK, EO_USBCTL, njb_state_t::fwMajor, njb_state_t::fwMinor, NJB_STATUS, njb_state_t::power, njb_state_t::productName, njb_struct::protocol_state, njb_state_t::sdmiid, usb_pipe_read(), and usb_setup().

Referenced by NJB_Handshake(), and NJB_Ping().

◆ njb_read_eaxtypes()

void njb_read_eaxtypes ( njb_t njb,
u_int32_t  size 
)

This reads in the block with EAX types. It is a byte chunk which is then interpreted and the EAX effects are added to a list of effects which is then retrieved by calls to the njb_get_nexteax() function.

Parameters
njba pointer to the NJB object to use
sizethe previously determined size of the EAX block

References eax_unpack(), EO_NOMEM, EO_RDSHORT, EO_USBBLK, EO_USBCTL, from_32bit_to_njb1_bytes(), njb1_bytes_to_32bit(), NJB_STATUS, njb_struct::protocol_state, usb_pipe_read(), and usb_setup().

◆ njb_receive_file_block()

u_int32_t njb_receive_file_block ( njb_t njb,
u_int32_t  offset,
u_int32_t  bsize,
void *  bp 
)

offset is the offset into the file, starting at 0. bsize indicates the recieved buffer max size. bp points to the recieve buffer (atleast NJB_XFER_BLOCK_SIZE + NJB_XFER_BLOCK_HEADER_SIZE) lastsort indicates if last transfer was short (ended before requested number of bytes were recieved).

If lastshort == 1, the last call to this function returned a a short read. In that case, a new setup command shall not be sent, the bus shall just keep retrieveing buffer contents from the bulk pipe.

References EO_TOOBIG, EO_USBBLK, EO_USBCTL, from_32bit_to_njb1_bytes(), NJB_STATUS, usb_pipe_read(), and usb_setup().

◆ njb_set_library_counter()

int njb_set_library_counter ( njb_t njb,
u_int64_t  count 
)

This function sets the library counter on the device. The library counter is sent back and forth to the device to indicate if something in the library has changed.

Parameters
njbis a pointer to the jukebox object to use.
countis the current library counter to set on the device.
Returns
0 on success, -1 on failure.

References EO_USBCTL, from_64bit_to_njb1_bytes(), and usb_setup().

◆ njb_verify_last_command()

int njb_verify_last_command ( njb_t njb)

This function verifies if the last command was successful or not.

Parameters
njbis a pointer to the jukebox object to use.
Returns
0 on success, -1 on failure.

References EO_USBCTL, NJB_STATUS, and usb_setup().

Referenced by NJB_Play_Track(), and NJB_Queue_Track().

Variable Documentation

◆ __sub_depth

int __sub_depth
extern

The current subroutine depth for all of libnjb (global)