145 lines
5.5 KiB
C++
145 lines
5.5 KiB
C++
/*
|
|
Copyright (C) 2001-2003 Paul Davis
|
|
Copyright (C) 2005-2012 Grame
|
|
Copyright (C) 2013 Samsung Electronics
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
#ifndef __jack_shm_android_h__
|
|
#define __jack_shm_android_h__
|
|
|
|
#include <limits.h>
|
|
#include <sys/types.h>
|
|
#include "types.h"
|
|
#include "JackCompilerDeps.h"
|
|
#include <binder/MemoryHeapBase.h>
|
|
#include <utils/RefBase.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#define JACK_SHM_REGISTRY_FD -1
|
|
#define JACK_SHM_HEAP_ENOUGH_COUNT 300
|
|
|
|
void jack_instantiate();
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
namespace android {
|
|
|
|
class IAndroidShm;
|
|
|
|
class Shm {
|
|
public:
|
|
static Shm* Instantiate();
|
|
virtual ~Shm();
|
|
private:
|
|
Shm();
|
|
Shm( const Shm&);
|
|
Shm& operator=(const Shm);
|
|
|
|
private:
|
|
void set_server_prefix (const char *server_name);
|
|
int server_initialize_shm (int new_registry);
|
|
int shm_lock_registry (void);
|
|
void shm_unlock_registry (void);
|
|
int access_registry (jack_shm_info_t *ri);
|
|
void remove_shm (jack_shm_id_t *id);
|
|
int create_registry (jack_shm_info_t *ri);
|
|
int shm_validate_registry ();
|
|
int GetUID();
|
|
int GetPID();
|
|
void shm_init_registry ();
|
|
void release_shm_entry (jack_shm_registry_index_t index);
|
|
jack_shm_registry_t * get_free_shm_info ();
|
|
|
|
public:
|
|
static void jack_shm_copy_from_registry (jack_shm_info_t*, jack_shm_registry_index_t);
|
|
static void jack_shm_copy_to_registry (jack_shm_info_t*, jack_shm_registry_index_t*);
|
|
static int jack_release_shm_info (jack_shm_registry_index_t);
|
|
static char* jack_shm_addr (jack_shm_info_t* si);
|
|
static int jack_register_server (const char *server_name, int new_registry);
|
|
static int jack_unregister_server (const char *server_name);
|
|
static int jack_initialize_shm (const char *server_name);
|
|
static int jack_initialize_shm_server (void);
|
|
static int jack_initialize_shm_client (void);
|
|
static int jack_cleanup_shm (void);
|
|
static int jack_shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* result);
|
|
static void jack_release_shm (jack_shm_info_t*);
|
|
static void jack_release_lib_shm (jack_shm_info_t*);
|
|
static void jack_destroy_shm (jack_shm_info_t*);
|
|
static int jack_attach_shm (jack_shm_info_t*);
|
|
static int jack_attach_lib_shm (jack_shm_info_t*);
|
|
static int jack_attach_shm_read (jack_shm_info_t*);
|
|
static int jack_attach_lib_shm_read (jack_shm_info_t*);
|
|
static int jack_resize_shm (jack_shm_info_t*, jack_shmsize_t size);
|
|
|
|
public:
|
|
void shm_copy_from_registry (jack_shm_info_t*, jack_shm_registry_index_t);
|
|
void shm_copy_to_registry (jack_shm_info_t*, jack_shm_registry_index_t*);
|
|
int release_shm_info (jack_shm_registry_index_t);
|
|
char* shm_addr (unsigned int fd);
|
|
|
|
// here begin the API
|
|
int register_server (const char *server_name, int new_registry);
|
|
int unregister_server (const char *server_name);
|
|
|
|
int initialize_shm (const char *server_name);
|
|
int initialize_shm_server (void);
|
|
int initialize_shm_client (void);
|
|
int cleanup_shm (void);
|
|
|
|
int shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* result);
|
|
void release_shm (jack_shm_info_t*);
|
|
void release_lib_shm (jack_shm_info_t*);
|
|
void destroy_shm (jack_shm_info_t*);
|
|
int attach_shm (jack_shm_info_t*);
|
|
int attach_lib_shm (jack_shm_info_t*);
|
|
int attach_shm_read (jack_shm_info_t*);
|
|
int attach_lib_shm_read (jack_shm_info_t*);
|
|
int resize_shm (jack_shm_info_t*, jack_shmsize_t size);
|
|
|
|
private:
|
|
static jack_shmtype_t jack_shmtype;
|
|
static jack_shm_id_t registry_id;
|
|
static jack_shm_fd_t registry_fd;
|
|
static jack_shm_info_t registry_info;
|
|
static jack_shm_header_t *jack_shm_header;
|
|
static jack_shm_registry_t *jack_shm_registry;
|
|
static char jack_shm_server_prefix[JACK_SERVER_NAME_SIZE+1];
|
|
static int semid;
|
|
static pthread_mutex_t mutex;
|
|
static Shm* ref;
|
|
|
|
void jack_release_shm_entry (jack_shm_registry_index_t index);
|
|
int jack_shm_lock_registry (void);
|
|
void jack_shm_unlock_registry (void);
|
|
|
|
//static sp<IAndroidShm> mShmService;
|
|
static sp<IMemoryHeap> mShmMemBase[JACK_SHM_HEAP_ENOUGH_COUNT];
|
|
|
|
public:
|
|
static sp<IAndroidShm> getShmService();
|
|
};
|
|
};
|
|
|
|
#endif /* __jack_shm_android_h__ */
|