Put brave old bb10 platform to a well-deserved rest

Add some 🔥 to appease @reduz. Fixes #8692.
This commit is contained in:
Rémi Verschelde 2017-05-08 22:22:20 +02:00
parent bba8f1db30
commit 32afcbc482
22 changed files with 2 additions and 3153 deletions

View file

@ -26264,7 +26264,7 @@
<return type="String">
</return>
<description>
Return the name of the host OS. Possible values are: "Android", "BlackBerry 10", "Flash", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11"
Return the name of the host OS. Possible values are: "Android", "Haiku", "iOS", "HTML5", "OSX", "Server", "Windows", "UWP", "X11".
</description>
</method>
<method name="get_power_percent_left">

View file

@ -515,7 +515,6 @@ static const char *_dl_platforms_info[] = {
"unix|x11|so|X11",
"unix|server|so|Server",
"unix|android|so|Android",
"unix|blackberry|so|Blackberry 10",
"unix|haiku|so|Haiku", // Right?
"|mac|dynlib|Mac",
"mac|ios|dynlib|iOS",

View file

@ -273,7 +273,7 @@ else:
webm_cpu_x86 = True
else:
webm_cpu_x86 = not is_x11_or_server_arm and (cpu_bits == '32' or cpu_bits == '64') and (env["platform"] == 'windows' or env["platform"] == 'x11' or env["platform"] == 'osx' or env["platform"] == 'haiku' or is_android_x86 or is_ios_x86)
webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or env["platform"] == 'bb10' or (not is_android_x86 and env["platform"] == 'android')
webm_cpu_arm = is_x11_or_server_arm or (not is_ios_x86 and env["platform"] == 'iphone') or (not is_android_x86 and env["platform"] == 'android')
if webm_cpu_x86:
import subprocess

View file

@ -1,23 +0,0 @@
#!/usr/bin/env python
Import('env')
bb10_lib = [
'bbutil.c',
'os_bb10.cpp',
'audio_driver_bb10.cpp',
'godot_bb10.cpp',
'payment_service.cpp',
]
env_bps = env.Clone()
if env['bb10_payment_service'] == "yes":
env_bps.Append(CPPFLAGS=['-DPAYMENT_SERVICE_ENABLED'])
if env['bb10_lgles_override'] == "yes":
env_bps.Append(CPPFLAGS=['-DBB10_LGLES_OVERRIDE'])
prog = None
prog = env_bps.Program('#bin/godot', bb10_lib)

View file

@ -1,254 +0,0 @@
/*************************************************************************/
/* audio_driver_bb10.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "audio_driver_bb10.h"
#include <errno.h>
Error AudioDriverBB10::init() {
return init(NULL);
};
Error AudioDriverBB10::init(const char *p_name) {
active = false;
thread_exited = false;
exit_thread = false;
pcm_open = false;
samples_in = NULL;
samples_out = NULL;
mix_rate = 44100;
speaker_mode = SPEAKER_MODE_STEREO;
char *dev_name;
if (p_name == NULL) {
dev_name = "pcmPreferred";
} else {
dev_name = (char *)p_name;
}
printf("******** reconnecting to device %s\n", dev_name);
int ret = snd_pcm_open_name(&pcm_handle, dev_name, SND_PCM_OPEN_PLAYBACK);
ERR_FAIL_COND_V(ret < 0, FAILED);
pcm_open = true;
snd_pcm_channel_info_t cinfo;
zeromem(&cinfo, sizeof(cinfo));
cinfo.channel = SND_PCM_CHANNEL_PLAYBACK;
snd_pcm_plugin_info(pcm_handle, &cinfo);
printf("rates %i, %i, %i, %i, %i\n", cinfo.rates, cinfo.rates & SND_PCM_RATE_44100, cinfo.rates & SND_PCM_RATE_32000, cinfo.rates & SND_PCM_RATE_22050, cinfo.max_rate);
mix_rate = cinfo.max_rate;
printf("formats %i, %i, %i\n", cinfo.formats, cinfo.formats & SND_PCM_FMT_S16_BE, cinfo.formats & SND_PCM_FMT_S16_LE);
ERR_FAIL_COND_V(!(cinfo.formats & SND_PCM_FMT_S16_LE), FAILED);
printf("voices %i\n", cinfo.max_voices);
speaker_mode = SPEAKER_MODE_STEREO;
snd_pcm_channel_params_t cp;
zeromem(&cp, sizeof(cp));
cp.mode = SND_PCM_MODE_BLOCK;
cp.channel = SND_PCM_CHANNEL_PLAYBACK;
cp.start_mode = SND_PCM_START_DATA;
cp.stop_mode = SND_PCM_STOP_STOP;
//cp.buf.block.frag_size = cinfo.max_fragment_size;
cp.buf.block.frag_size = 512;
cp.buf.block.frags_max = 1;
cp.buf.block.frags_min = 1;
cp.format.interleave = 1;
cp.format.rate = mix_rate;
cp.format.voices = speaker_mode;
cp.format.format = SND_PCM_SFMT_S16_LE;
ret = snd_pcm_plugin_params(pcm_handle, &cp);
printf("ret is %i, %i\n", ret, cp.why_failed);
ERR_FAIL_COND_V(ret < 0, FAILED);
ret = snd_pcm_plugin_prepare(pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
ERR_FAIL_COND_V(ret < 0, FAILED);
snd_mixer_group_t group;
zeromem(&group, sizeof(group));
snd_pcm_channel_setup_t setup;
zeromem(&setup, sizeof(setup));
setup.channel = SND_PCM_CHANNEL_PLAYBACK;
setup.mode = SND_PCM_MODE_BLOCK;
setup.mixer_gid = &group.gid;
ret = snd_pcm_plugin_setup(pcm_handle, &setup);
ERR_FAIL_COND_V(ret < 0, FAILED);
pcm_frag_size = setup.buf.block.frag_size;
pcm_max_frags = 1;
sample_buf_count = pcm_frag_size * pcm_max_frags / 2;
printf("sample count %i, %i, %i\n", sample_buf_count, pcm_frag_size, pcm_max_frags);
samples_in = memnew_arr(int32_t, sample_buf_count);
samples_out = memnew_arr(int16_t, sample_buf_count);
thread = Thread::create(AudioDriverBB10::thread_func, this);
return OK;
};
void AudioDriverBB10::thread_func(void *p_udata) {
AudioDriverBB10 *ad = (AudioDriverBB10 *)p_udata;
int channels = speaker_mode;
int frame_count = ad->sample_buf_count / channels;
int bytes_out = frame_count * channels * 2;
while (!ad->exit_thread) {
if (!ad->active) {
for (int i = 0; i < ad->sample_buf_count; i++) {
ad->samples_out[i] = 0;
};
} else {
ad->lock();
ad->audio_server_process(frame_count, ad->samples_in);
ad->unlock();
for (int i = 0; i < frame_count * channels; i++) {
ad->samples_out[i] = ad->samples_in[i] >> 16;
}
};
int todo = bytes_out;
int total = 0;
while (todo) {
uint8_t *src = (uint8_t *)ad->samples_out;
int wrote = snd_pcm_plugin_write(ad->pcm_handle, (void *)(src + total), todo);
if (wrote < 0) {
// error?
break;
};
total += wrote;
todo -= wrote;
if (wrote < todo) {
if (ad->thread_exited) {
break;
};
printf("pcm_write underrun %i, errno %i\n", (int)ad->thread_exited, errno);
snd_pcm_channel_status_t status;
zeromem(&status, sizeof(status));
// put in non-blocking mode
snd_pcm_nonblock_mode(ad->pcm_handle, 1);
status.channel = SND_PCM_CHANNEL_PLAYBACK;
int ret = snd_pcm_plugin_status(ad->pcm_handle, &status);
//printf("status return %i, %i, %i, %i, %i\n", ret, errno, status.status, SND_PCM_STATUS_READY, SND_PCM_STATUS_UNDERRUN);
snd_pcm_nonblock_mode(ad->pcm_handle, 0);
if (ret < 0) {
break;
};
if (status.status == SND_PCM_STATUS_READY ||
status.status == SND_PCM_STATUS_UNDERRUN) {
snd_pcm_plugin_prepare(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
} else {
break;
};
};
};
};
snd_pcm_plugin_flush(ad->pcm_handle, SND_PCM_CHANNEL_PLAYBACK);
ad->thread_exited = true;
printf("**************** audio thread exit\n");
};
void AudioDriverBB10::start() {
active = true;
};
int AudioDriverBB10::get_mix_rate() const {
return mix_rate;
};
AudioDriver::SpeakerMode AudioDriverBB10::get_speaker_mode() const {
return speaker_mode;
};
void AudioDriverBB10::lock() {
if (!thread)
return;
mutex->lock();
};
void AudioDriverBB10::unlock() {
if (!thread)
return;
mutex->unlock();
};
void AudioDriverBB10::finish() {
if (!thread)
return;
exit_thread = true;
Thread::wait_to_finish(thread);
if (pcm_open)
snd_pcm_close(pcm_handle);
if (samples_in) {
memdelete_arr(samples_in);
memdelete_arr(samples_out);
};
memdelete(thread);
thread = NULL;
};
AudioDriverBB10::AudioDriverBB10() {
mutex = Mutex::create();
};
AudioDriverBB10::~AudioDriverBB10() {
memdelete(mutex);
mutex = NULL;
};

View file

@ -1,77 +0,0 @@
/*************************************************************************/
/* audio_driver_bb10.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "servers/audio_server.h"
#include "core/os/mutex.h"
#include "core/os/thread.h"
#include <sys/asoundlib.h>
class AudioDriverBB10 : public AudioDriver {
Thread *thread;
Mutex *mutex;
snd_pcm_t *pcm_handle;
int32_t *samples_in;
int16_t *samples_out;
int sample_buf_count;
static void thread_func(void *p_udata);
int mix_rate;
SpeakerMode speaker_mode;
int pcm_frag_size;
int pcm_max_frags;
bool active;
bool thread_exited;
mutable bool exit_thread;
bool pcm_open;
public:
const char *get_name() const {
return "BB10";
};
virtual Error init();
virtual Error init(const char *p_name);
virtual void start();
virtual int get_mix_rate() const;
virtual SpeakerMode get_speaker_mode() const;
virtual void lock();
virtual void unlock();
virtual void finish();
AudioDriverBB10();
~AudioDriverBB10();
};

View file

@ -1,53 +0,0 @@
<?xml version='1.0' encoding='utf-8' standalone='no'?>
<qnx xmlns="http://www.qnx.com/schemas/application/1.0">
<!-- BlackBerry® 10 application descriptor file.
Specifies parameters for identifying, installing, and launching native applications on BlackBerry® 10 OS.
-->
<!-- A universally unique application identifier. Must be unique across all BlackBerry applications.
Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
<id>com.godot.game</id>
<!-- The name that is displayed in the BlackBerry application installer.
May have multiple values for each language. See samples or xsd schema file. Optional. -->
<name>Godot Game</name>
<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade.
Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
An updated version of application must have a versionNumber value higher than the previous version. Required. -->
<versionNumber>0.0.1</versionNumber>
<!-- Fourth digit segment of the package version. First three segments are taken from the
<versionNumber> element. Must be an integer from 0 to 2^16-1 -->
<buildId>0</buildId>
<!-- Description, displayed in the BlackBerry application installer.
May have multiple values for each language. See samples or xsd schema file. Optional. -->
<description>Game made with Godot Engine</description>
<!-- Name of author which is used for signing. Must match the developer name of your development certificate. -->
<author>You Name or Company</author>
<authorId>authorIDherePlease</authorId>
<!-- Unique author ID assigned by signing authority. Required if using debug tokens. -->
<!-- <authorId>ABC1234YjsnUk235h</authorId> -->
<initialWindow>
<aspectRatio>landscape</aspectRatio>
<autoOrients>false</autoOrients>
<systemChrome>none</systemChrome>
<transparent>false</transparent>
</initialWindow>
<!-- The category where the application appears. Either core.games or core.media. -->
<category>core.games</category>
<permission>read_device_identifying_information</permission>
<permission>access_internet</permission>
<asset path="data.pck">data.pck</asset>
<configuration name="Device-Debug">
<platformArchitecture>armle-v7</platformArchitecture>
<asset type="Qnx/Elf" path="godot.bb10.debug.qnx.armle" entry="true">godot.bb10.debug.qnx.armle</asset>
</configuration>
<configuration name="Device-Release">
<platformArchitecture>armle-v7</platformArchitecture>
<asset type="Qnx/Elf" path="godot.bb10.opt.qnx.armle" entry="true">godot.bb10.opt.qnx.armle</asset>
</configuration>
<!-- The icon for the application. -->
<icon>
<image>icon.png</image>
</icon>
<!-- Ensure that shared libraries in the package are found at run-time. -->
<env value="app/native/lib:/usr/lib/qt4/lib" var="LD_LIBRARY_PATH"/>
</qnx>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

View file

@ -1,529 +0,0 @@
/*
* Copyright (c) 2011-2013 Research In Motion Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/keycodes.h>
#include <time.h>
#include "bbutil.h"
EGLDisplay egl_disp;
EGLSurface egl_surf;
static EGLConfig egl_conf;
static EGLContext egl_ctx;
static screen_context_t screen_ctx;
static screen_window_t screen_win;
static screen_display_t screen_disp;
static void
bbutil_egl_perror(const char *msg) {
static const char *errmsg[] = {
"function succeeded",
"EGL is not initialized, or could not be initialized, for the specified display",
"cannot access a requested resource",
"failed to allocate resources for the requested operation",
"an unrecognized attribute or attribute value was passed in an attribute list",
"an EGLConfig argument does not name a valid EGLConfig",
"an EGLContext argument does not name a valid EGLContext",
"the current surface of the calling thread is no longer valid",
"an EGLDisplay argument does not name a valid EGLDisplay",
"arguments are inconsistent",
"an EGLNativePixmapType argument does not refer to a valid native pixmap",
"an EGLNativeWindowType argument does not refer to a valid native window",
"one or more argument values are invalid",
"an EGLSurface argument does not name a valid surface configured for rendering",
"a power management event has occurred",
};
fprintf(stderr, "%s: %s\n", msg, errmsg[eglGetError() - EGL_SUCCESS]);
}
EGLConfig bbutil_choose_config(EGLDisplay egl_disp, enum RENDERING_API api) {
EGLConfig egl_conf = (EGLConfig)0;
EGLConfig *egl_configs;
EGLint egl_num_configs;
EGLint val;
EGLBoolean rc;
EGLint i;
rc = eglGetConfigs(egl_disp, NULL, 0, &egl_num_configs);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglGetConfigs");
return egl_conf;
}
if (egl_num_configs == 0) {
fprintf(stderr, "eglGetConfigs: could not find a configuration\n");
return egl_conf;
}
egl_configs = malloc(egl_num_configs * sizeof(*egl_configs));
if (egl_configs == NULL) {
fprintf(stderr, "could not allocate memory for %d EGL configs\n", egl_num_configs);
return egl_conf;
}
rc = eglGetConfigs(egl_disp, egl_configs,
egl_num_configs, &egl_num_configs);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglGetConfigs");
free(egl_configs);
return egl_conf;
}
for (i = 0; i < egl_num_configs; i++) {
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_SURFACE_TYPE, &val);
if (!(val & EGL_WINDOW_BIT)) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_RENDERABLE_TYPE, &val);
if (!(val & api)) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_DEPTH_SIZE, &val);
if ((api & (GL_ES_1|GL_ES_2)) && (val == 0)) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_RED_SIZE, &val);
if (val != 8) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_GREEN_SIZE, &val);
if (val != 8) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_BLUE_SIZE, &val);
if (val != 8) {
continue;
}
eglGetConfigAttrib(egl_disp, egl_configs[i], EGL_BUFFER_SIZE, &val);
if (val != 32) {
continue;
}
egl_conf = egl_configs[i];
break;
}
free(egl_configs);
if (egl_conf == (EGLConfig)0) {
fprintf(stderr, "bbutil_choose_config: could not find a matching configuration\n");
}
return egl_conf;
}
int
bbutil_init_egl(screen_context_t ctx, enum RENDERING_API api) {
int usage;
int format = SCREEN_FORMAT_RGBX8888;
int nbuffers = 2;
EGLint interval = 1;
int rc;
EGLint attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
if (api == GL_ES_1) {
usage = SCREEN_USAGE_OPENGL_ES1 | SCREEN_USAGE_ROTATION;
} else if (api == GL_ES_2) {
usage = SCREEN_USAGE_OPENGL_ES2 | SCREEN_USAGE_ROTATION;
} else if (api == VG) {
usage = SCREEN_USAGE_OPENVG | SCREEN_USAGE_ROTATION;
} else {
fprintf(stderr, "invalid api setting\n");
return EXIT_FAILURE;
}
//Simple egl initialization
screen_ctx = ctx;
egl_disp = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (egl_disp == EGL_NO_DISPLAY) {
bbutil_egl_perror("eglGetDisplay");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = eglInitialize(egl_disp, NULL, NULL);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglInitialize");
bbutil_terminate();
return EXIT_FAILURE;
}
if ((api == GL_ES_1) || (api == GL_ES_2)) {
rc = eglBindAPI(EGL_OPENGL_ES_API);
} else if (api == VG) {
rc = eglBindAPI(EGL_OPENVG_API);
}
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglBindApi");
bbutil_terminate();
return EXIT_FAILURE;
}
egl_conf = bbutil_choose_config(egl_disp, api);
if (egl_conf == (EGLConfig)0) {
bbutil_terminate();
return EXIT_FAILURE;
}
if (api == GL_ES_2) {
egl_ctx = eglCreateContext(egl_disp, egl_conf, EGL_NO_CONTEXT, attributes);
} else {
egl_ctx = eglCreateContext(egl_disp, egl_conf, EGL_NO_CONTEXT, NULL);
}
if (egl_ctx == EGL_NO_CONTEXT) {
bbutil_egl_perror("eglCreateContext");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_create_window(&screen_win, screen_ctx);
if (rc) {
perror("screen_create_window");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_FORMAT, &format);
if (rc) {
perror("screen_set_window_property_iv(SCREEN_PROPERTY_FORMAT)");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_USAGE, &usage);
if (rc) {
perror("screen_set_window_property_iv(SCREEN_PROPERTY_USAGE)");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_get_window_property_pv(screen_win, SCREEN_PROPERTY_DISPLAY, (void **)&screen_disp);
if (rc) {
perror("screen_get_window_property_pv");
bbutil_terminate();
return EXIT_FAILURE;
}
int screen_resolution[2];
rc = screen_get_display_property_iv(screen_disp, SCREEN_PROPERTY_SIZE, screen_resolution);
if (rc) {
perror("screen_get_display_property_iv");
bbutil_terminate();
return EXIT_FAILURE;
}
int angle = atoi(getenv("ORIENTATION"));
screen_display_mode_t screen_mode;
rc = screen_get_display_property_pv(screen_disp, SCREEN_PROPERTY_MODE, (void**)&screen_mode);
if (rc) {
perror("screen_get_display_property_pv");
bbutil_terminate();
return EXIT_FAILURE;
}
int size[2];
rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
if (rc) {
perror("screen_get_window_property_iv");
bbutil_terminate();
return EXIT_FAILURE;
}
int buffer_size[2] = {size[0], size[1]};
if ((angle == 0) || (angle == 180)) {
if (((screen_mode.width > screen_mode.height) && (size[0] < size[1])) ||
((screen_mode.width < screen_mode.height) && (size[0] > size[1]))) {
buffer_size[1] = size[0];
buffer_size[0] = size[1];
}
} else if ((angle == 90) || (angle == 270)){
if (((screen_mode.width > screen_mode.height) && (size[0] > size[1])) ||
((screen_mode.width < screen_mode.height && size[0] < size[1]))) {
buffer_size[1] = size[0];
buffer_size[0] = size[1];
}
} else {
fprintf(stderr, "Navigator returned an unexpected orientation angle.\n");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, buffer_size);
if (rc) {
perror("screen_set_window_property_iv");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &angle);
if (rc) {
perror("screen_set_window_property_iv");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_create_window_buffers(screen_win, nbuffers);
if (rc) {
perror("screen_create_window_buffers");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = screen_create_window_group(screen_win, get_window_group_id());
if (rc) {
perror("screen_create_window_group");
bbutil_terminate();
return EXIT_FAILURE;
}
/* if (screen_create_window_group(screen_win, get_window_group_id()) != 0) goto fail; */
int idle_mode = SCREEN_IDLE_MODE_KEEP_AWAKE;
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_IDLE_MODE, &idle_mode);
egl_surf = eglCreateWindowSurface(egl_disp, egl_conf, screen_win, NULL);
if (egl_surf == EGL_NO_SURFACE) {
bbutil_egl_perror("eglCreateWindowSurface");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = eglMakeCurrent(egl_disp, egl_surf, egl_surf, egl_ctx);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglMakeCurrent");
bbutil_terminate();
return EXIT_FAILURE;
}
rc = eglSwapInterval(egl_disp, interval);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglSwapInterval");
bbutil_terminate();
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
int
bbutil_init_gl2d() {
#if 0
EGLint surface_width, surface_height;
if ((egl_disp == EGL_NO_DISPLAY) || (egl_surf == EGL_NO_SURFACE) ){
return EXIT_FAILURE;
}
eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
glShadeModel(GL_SMOOTH);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glViewport(0, 0, surface_width, surface_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0.0f, (float)(surface_width) / (float)(surface_height), 0.0f, 1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
#endif
return EXIT_SUCCESS;
}
int
bbutil_init(screen_context_t ctx, enum RENDERING_API api) {
if (EXIT_SUCCESS != bbutil_init_egl(ctx, api)) {
return EXIT_FAILURE;
}
if ((GL_ES_1 == api) && (EXIT_SUCCESS != bbutil_init_gl2d())) {
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
int bbutil_is_flipped() {
int ret;
screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_FLIP, &ret);
return ret;
};
int bbutil_get_rotation() {
int ret;
screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &ret);
return ret;
};
void
bbutil_terminate() {
//Typical EGL cleanup
if (egl_disp != EGL_NO_DISPLAY) {
eglMakeCurrent(egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (egl_surf != EGL_NO_SURFACE) {
eglDestroySurface(egl_disp, egl_surf);
egl_surf = EGL_NO_SURFACE;
}
if (egl_ctx != EGL_NO_CONTEXT) {
eglDestroyContext(egl_disp, egl_ctx);
egl_ctx = EGL_NO_CONTEXT;
}
if (screen_win != NULL) {
screen_destroy_window(screen_win);
screen_win = NULL;
}
eglTerminate(egl_disp);
egl_disp = EGL_NO_DISPLAY;
}
eglReleaseThread();
}
void
bbutil_swap() {
int rc = eglSwapBuffers(egl_disp, egl_surf);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglSwapBuffers");
}
}
void
bbutil_clear() {
glClear(GL_COLOR_BUFFER_BIT);
}
char *
get_window_group_id()
{
static char s_window_group_id[16] = "";
if (s_window_group_id[0] == '\0') {
snprintf(s_window_group_id, sizeof(s_window_group_id), "%d", getpid());
}
return s_window_group_id;
}
int bbutil_rotate_screen_surface(int angle) {
int rc, rotation, skip = 1, temp;
EGLint interval = 1;
int size[2];
if ((angle != 0) && (angle != 90) && (angle != 180) && (angle != 270)) {
fprintf(stderr, "Invalid angle\n");
return EXIT_FAILURE;
}
rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &rotation);
if (rc) {
perror("screen_set_window_property_iv");
return EXIT_FAILURE;
}
rc = screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
if (rc) {
perror("screen_set_window_property_iv");
return EXIT_FAILURE;
}
switch (angle - rotation) {
case -270:
case -90:
case 90:
case 270:
temp = size[0];
size[0] = size[1];
size[1] = temp;
skip = 0;
break;
}
if (!skip) {
rc = eglMakeCurrent(egl_disp, NULL, NULL, NULL);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglMakeCurrent");
return EXIT_FAILURE;
}
rc = eglDestroySurface(egl_disp, egl_surf);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglMakeCurrent");
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_SOURCE_SIZE, size);
if (rc) {
perror("screen_set_window_property_iv");
return EXIT_FAILURE;
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size);
if (rc) {
perror("screen_set_window_property_iv");
return EXIT_FAILURE;
}
egl_surf = eglCreateWindowSurface(egl_disp, egl_conf, screen_win, NULL);
if (egl_surf == EGL_NO_SURFACE) {
bbutil_egl_perror("eglCreateWindowSurface");
return EXIT_FAILURE;
}
rc = eglMakeCurrent(egl_disp, egl_surf, egl_surf, egl_ctx);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglMakeCurrent");
return EXIT_FAILURE;
}
rc = eglSwapInterval(egl_disp, interval);
if (rc != EGL_TRUE) {
bbutil_egl_perror("eglSwapInterval");
return EXIT_FAILURE;
}
}
rc = screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ROTATION, &angle);
if (rc) {
perror("screen_set_window_property_iv");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

View file

@ -1,88 +0,0 @@
/*
* Copyright (c) 2011-2013 Research In Motion Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _UTILITY_H_INCLUDED
#define _UTILITY_H_INCLUDED
#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <screen/screen.h>
#include <sys/platform.h>
#ifdef __cplusplus
extern "C" {
#endif
extern EGLDisplay egl_disp;
extern EGLSurface egl_surf;
enum RENDERING_API {
GL_ES_1 = EGL_OPENGL_ES_BIT,
GL_ES_2 = EGL_OPENGL_ES2_BIT,
VG = EGL_OPENVG_BIT
};
/**
* Initializes EGL, GL and loads a default font
*
* \param libscreen context that will be used for EGL setup
* \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
*/
int bbutil_init(screen_context_t ctx, enum RENDERING_API api);
/**
* Initializes EGL
*
* \param libscreen context that will be used for EGL setup
* \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
*/
int bbutil_init_egl(screen_context_t ctx, enum RENDERING_API api);
/**
* Initializes GL 1.1 for simple 2D rendering. GL2 initialization will be added at a later point.
*
* \return EXIT_SUCCESS if initialization succeeded otherwise EXIT_FAILURE
*/
int bbutil_init_gl2d();
int bbutil_is_flipped();
int bbutil_get_rotation();
char *get_window_group_id();
int bbutil_rotate_screen_surface(int angle);
/**
* Terminates EGL
*/
void bbutil_terminate();
/**
* Swaps default bbutil window surface to the screen
*/
void bbutil_swap();
/**
* Clears the screen of any existing text.
* NOTE: must be called after a successful return from bbutil_init() or bbutil_init_egl() call
*/
void bbutil_clear();
#ifdef __cplusplus
};
#endif
#endif

View file

@ -1,92 +0,0 @@
import os
import sys
import string
import methods
def is_active():
return True
def get_name():
return "BlackBerry 10"
def can_build():
import os
if (not os.environ.has_key("QNX_TARGET")):
return False
return True
def get_opts():
return [
('QNX_HOST', 'path to qnx host', os.environ.get("QNX_HOST", 0)),
('QNX_TARGET', 'path to qnx target', os.environ.get("QNX_TARGET", 0)),
('QNX_CONFIGURATION', 'path to qnx configuration', os.environ.get("QNX_CONFIGURATION", 0)),
('qnx_target', 'Qnx target (armle or x86', 'armle'),
('bb10_payment_service', 'Enable Payment Service for BlackBerry10', 'yes'),
('bb10_lgles_override', 'Force legacy GLES (1.1) on iOS', 'no'),
('bb10_exceptions', 'Use exceptions when compiling on bb10', 'no'),
]
def get_flags():
return [
('tools', 'no'),
('module_theora_enabled', 'no'),
]
def configure(env):
if env['PLATFORM'] == 'win32':
env.Tool('mingw')
env['SPAWN'] = methods.win32_spawn
env['qnx_target_ver'] = env['qnx_target']
if env['qnx_target'] == "armle":
env['qnx_prefix'] = 'ntoarmv7'
env['qnx_target_ver'] = 'armle-v7'
else:
env['qnx_prefix'] = 'ntox86'
env['OBJSUFFIX'] = ".qnx.${qnx_target}.o"
env['LIBSUFFIX'] = ".qnx.${qnx_target}.a"
env['PROGSUFFIX'] = ".qnx.${qnx_target}"
print("PROGSUFFIX: " + env['PROGSUFFIX'] + " target: " + env['qnx_target'])
env.PrependENVPath('PATH', env['QNX_CONFIGURATION'] + '/bin')
env.PrependENVPath('PATH', env['QNX_CONFIGURATION'] + '/usr/bin')
env['ENV']['QNX_HOST'] = env['QNX_HOST']
env['ENV']['QNX_TARGET'] = env['QNX_TARGET']
env['ENV']['QNX_CONFIGURATION'] = env['QNX_CONFIGURATION']
env['CC'] = '$qnx_prefix-gcc'
env['CXX'] = '$qnx_prefix-g++'
env['AR'] = '$qnx_prefix-ar'
env['RANLIB'] = '$qnx_prefix-ranlib'
env.Append(CPPPATH=['#platform/bb10'])
env.Append(LIBPATH=['#platform/bb10/lib/$qnx_target', '#platform/bb10/lib/$qnx_target_ver'])
env.Append(CCFLAGS=string.split('-DBB10_ENABLED -DUNIX_ENABLED -DGLES2_ENABLED -DGLES1_ENABLED -D_LITTLE_ENDIAN -DNO_THREADS -DNO_FCNTL'))
if env['bb10_exceptions'] == "yes":
env.Append(CCFLAGS=['-fexceptions'])
else:
env.Append(CCFLAGS=['-fno-exceptions'])
# env.Append(LINKFLAGS = string.split()
if (env["target"] == "release"):
env.Append(CCFLAGS=['-O3', '-DRELEASE_BUILD'])
elif (env["target"] == "debug"):
env.Append(CCFLAGS=['-g', '-O0', '-DDEBUG_ENABLED', '-D_DEBUG'])
env.Append(LINKFLAGS=['-g'])
env.Append(LIBS=['bps', 'pps', 'screen', 'socket', 'EGL', 'GLESv2', 'GLESv1_CM', 'm', 'asound'])

View file

@ -1,829 +0,0 @@
/*************************************************************************/
/* export.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "export.h"
#include "editor/editor_export.h"
#include "editor/editor_node.h"
#include "editor/editor_settings.h"
#include "global_config.h"
#include "io/marshalls.h"
#include "io/xml_parser.h"
#include "io/zip_io.h"
#include "os/file_access.h"
#include "os/os.h"
#include "platform/bb10/logo.h"
#include "version.h"
#define MAX_DEVICES 5
#if 0
class EditorExportPlatformBB10 : public EditorExportPlatform {
GDCLASS( EditorExportPlatformBB10,EditorExportPlatform );
String custom_package;
int version_code;
String version_name;
String package;
String name;
String category;
String description;
String author_name;
String author_id;
String icon;
struct Device {
int index;
String name;
String description;
};
Vector<Device> devices;
bool devices_changed;
Mutex *device_lock;
Thread *device_thread;
Ref<ImageTexture> logo;
volatile bool quit_request;
static void _device_poll_thread(void *ud);
void _fix_descriptor(Vector<uint8_t>& p_manifest);
protected:
bool _set(const StringName& p_name, const Variant& p_value);
bool _get(const StringName& p_name,Variant &r_ret) const;
void _get_property_list( List<PropertyInfo> *p_list) const;
public:
virtual String get_name() const { return "BlackBerry 10"; }
virtual ImageCompression get_image_compression() const { return IMAGE_COMPRESSION_ETC1; }
virtual Ref<Texture> get_logo() const { return logo; }
virtual bool poll_devices();
virtual int get_device_count() const;
virtual String get_device_name(int p_device) const;
virtual String get_device_info(int p_device) const;
virtual Error run(int p_device,int p_flags=0);
virtual bool requires_password(bool p_debug) const { return !p_debug; }
virtual String get_binary_extension() const { return "bar"; }
virtual Error export_project(const String& p_path,bool p_debug,int p_flags=0);
virtual bool can_export(String *r_error=NULL) const;
EditorExportPlatformBB10();
~EditorExportPlatformBB10();
};
bool EditorExportPlatformBB10::_set(const StringName& p_name, const Variant& p_value) {
String n=p_name;
if (n=="version/code")
version_code=p_value;
else if (n=="version/name")
version_name=p_value;
else if (n=="package/unique_name")
package=p_value;
else if (n=="package/category")
category=p_value;
else if (n=="package/name")
name=p_value;
else if (n=="package/description")
description=p_value;
else if (n=="package/icon")
icon=p_value;
else if (n=="package/custom_template")
custom_package=p_value;
else if (n=="release/author")
author_name=p_value;
else if (n=="release/author_id")
author_id=p_value;
else
return false;
return true;
}
bool EditorExportPlatformBB10::_get(const StringName& p_name,Variant &r_ret) const{
String n=p_name;
if (n=="version/code")
r_ret=version_code;
else if (n=="version/name")
r_ret=version_name;
else if (n=="package/unique_name")
r_ret=package;
else if (n=="package/category")
r_ret=category;
else if (n=="package/name")
r_ret=name;
else if (n=="package/description")
r_ret=description;
else if (n=="package/icon")
r_ret=icon;
else if (n=="package/custom_template")
r_ret=custom_package;
else if (n=="release/author")
r_ret=author_name;
else if (n=="release/author_id")
r_ret=author_id;
else
return false;
return true;
}
void EditorExportPlatformBB10::_get_property_list( List<PropertyInfo> *p_list) const{
p_list->push_back( PropertyInfo( Variant::INT, "version/code", PROPERTY_HINT_RANGE,"1,65535,1"));
p_list->push_back( PropertyInfo( Variant::STRING, "version/name") );
p_list->push_back( PropertyInfo( Variant::STRING, "package/unique_name") );
p_list->push_back( PropertyInfo( Variant::STRING, "package/category") );
p_list->push_back( PropertyInfo( Variant::STRING, "package/name") );
p_list->push_back( PropertyInfo( Variant::STRING, "package/description",PROPERTY_HINT_MULTILINE_TEXT) );
p_list->push_back( PropertyInfo( Variant::STRING, "package/icon",PROPERTY_HINT_FILE,"png") );
p_list->push_back( PropertyInfo( Variant::STRING, "package/custom_template", PROPERTY_HINT_GLOBAL_FILE,"zip"));
p_list->push_back( PropertyInfo( Variant::STRING, "release/author") );
p_list->push_back( PropertyInfo( Variant::STRING, "release/author_id") );
//p_list->push_back( PropertyInfo( Variant::INT, "resources/pack_mode", PROPERTY_HINT_ENUM,"Copy,Single Exec.,Pack (.pck),Bundles (Optical)"));
}
void EditorExportPlatformBB10::_fix_descriptor(Vector<uint8_t>& p_descriptor) {
String fpath = EditorSettings::get_singleton()->get_settings_path().plus_file("tmp_bar-settings.xml");
{
FileAccessRef f = FileAccess::open(fpath,FileAccess::WRITE);
f->store_buffer(p_descriptor.ptr(),p_descriptor.size());
}
Ref<XMLParser> parser = memnew( XMLParser );
Error err = parser->open(fpath);
ERR_FAIL_COND(err!=OK);
String txt;
err = parser->read();
Vector<String> depth;
while(err!=ERR_FILE_EOF) {
ERR_FAIL_COND(err!=OK);
switch(parser->get_node_type()) {
case XMLParser::NODE_NONE: {
print_line("???");
} break;
case XMLParser::NODE_ELEMENT: {
String e="<";
e+=parser->get_node_name();
for(int i=0;i<parser->get_attribute_count();i++) {
e+=" ";
e+=parser->get_attribute_name(i)+"=\"";
e+=parser->get_attribute_value(i)+"\" ";
}
if (parser->is_empty()) {
e+="/";
} else {
depth.push_back(parser->get_node_name());
}
e+=">";
txt+=e;
} break;
case XMLParser::NODE_ELEMENT_END: {
txt+="</"+parser->get_node_name()+">";
if (depth.size() && depth[depth.size()-1]==parser->get_node_name()) {
depth.resize(depth.size()-1);
}
} break;
case XMLParser::NODE_TEXT: {
if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="id") {
txt+=package;
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="name") {
String aname;
if (this->name!="") {
aname=this->name;
} else {
aname = GlobalConfig::get_singleton()->get("application/name");
}
if (aname=="") {
aname=_MKSTR(VERSION_NAME);
}
txt+=aname;
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="versionNumber") {
txt+=itos(version_code);
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="description") {
txt+=description;
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="author") {
txt+=author_name;
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="authorId") {
txt+=author_id;
} else if (depth.size()==2 && depth[0]=="qnx" && depth[1]=="category") {
txt+=category;
} else {
txt+=parser->get_node_data();
}
} break;
case XMLParser::NODE_COMMENT: {
txt+="<!--"+parser->get_node_name()+"-->";
} break;
case XMLParser::NODE_CDATA: {
//ignore
//print_line("cdata");
} break;
case XMLParser::NODE_UNKNOWN: {
//ignore
txt+="<"+parser->get_node_name()+">";
} break;
}
err = parser->read();
}
CharString cs = txt.utf8();
p_descriptor.resize(cs.length());
for(int i=0;i<cs.length();i++)
p_descriptor[i]=cs[i];
}
Error EditorExportPlatformBB10::export_project(const String& p_path, bool p_debug, int p_flags) {
EditorProgress ep("export","Exporting for BlackBerry 10",104);
String src_template=custom_package;
if (src_template=="") {
String err;
src_template = find_export_template("bb10.zip", &err);
if (src_template=="") {
EditorNode::add_io_error(err);
return ERR_FILE_NOT_FOUND;
}
}
FileAccess *src_f=NULL;
zlib_filefunc_def io = zipio_create_io_from_file(&src_f);
ep.step("Creating FileSystem for BAR",0);
unzFile pkg = unzOpen2(src_template.utf8().get_data(), &io);
if (!pkg) {
EditorNode::add_io_error("Could not find template zip to export:\n"+src_template);
return ERR_FILE_NOT_FOUND;
}
DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
da->change_dir(EditorSettings::get_singleton()->get_settings_path());
if (da->change_dir("tmp")!=OK) {
da->make_dir("tmp");
if (da->change_dir("tmp")!=OK)
return ERR_CANT_CREATE;
}
if (da->change_dir("bb10_export")!=OK) {
da->make_dir("bb10_export");
if (da->change_dir("bb10_export")!=OK) {
return ERR_CANT_CREATE;
}
}
String bar_dir = da->get_current_dir();
if (bar_dir.ends_with("/")) {
bar_dir=bar_dir.substr(0,bar_dir.length()-1);
}
//THIS IS SUPER, SUPER DANGEROUS!!!!
//CAREFUL WITH THIS CODE, MIGHT DELETE USERS HARD DRIVE OR HOME DIR
//EXTRA CHECKS ARE IN PLACE EVERYWERE TO MAKE SURE NOTHING BAD HAPPENS BUT STILL....
//BE SUPER CAREFUL WITH THIS PLEASE!!!
//BLACKBERRY THIS IS YOUR FAULT FOR NOT MAKING A BETTER WAY!!
bool berr = bar_dir.ends_with("bb10_export");
if (berr) {
if (da->list_dir_begin()) {
EditorNode::add_io_error("Can't ensure that dir is empty:\n"+bar_dir);
ERR_FAIL_COND_V(berr,FAILED);
};
String f = da->get_next();
while (f != "") {
if (f == "." || f == "..") {
f = da->get_next();
continue;
};
Error err = da->remove(bar_dir + "/" + f);
if (err != OK) {
EditorNode::add_io_error("Can't ensure that dir is empty:\n"+bar_dir);
ERR_FAIL_COND_V(err!=OK,err);
};
f = da->get_next();
};
da->list_dir_end();
} else {
print_line("ARE YOU CRAZY??? THIS IS A SERIOUS BUG HERE!!!");
ERR_FAIL_V(ERR_OMFG_THIS_IS_VERY_VERY_BAD);
}
ERR_FAIL_COND_V(!pkg, ERR_CANT_OPEN);
int ret = unzGoToFirstFile(pkg);
while(ret==UNZ_OK) {
//get filename
unz_file_info info;
char fname[16384];
ret = unzGetCurrentFileInfo(pkg,&info,fname,16384,NULL,0,NULL,0);
String file=fname;
Vector<uint8_t> data;
data.resize(info.uncompressed_size);
//read
unzOpenCurrentFile(pkg);
unzReadCurrentFile(pkg,data.ptr(),data.size());
unzCloseCurrentFile(pkg);
//write
if (file=="bar-descriptor.xml") {
_fix_descriptor(data);
}
if (file=="icon.png") {
bool found=false;
if (this->icon!="" && this->icon.ends_with(".png")) {
FileAccess *f = FileAccess::open(this->icon,FileAccess::READ);
if (f) {
data.resize(f->get_len());
f->get_buffer(data.ptr(),data.size());
memdelete(f);
found=true;
}
}
if (!found) {
String appicon = GlobalConfig::get_singleton()->get("application/icon");
if (appicon!="" && appicon.ends_with(".png")) {
FileAccess*f = FileAccess::open(appicon,FileAccess::READ);
if (f) {
data.resize(f->get_len());
f->get_buffer(data.ptr(),data.size());
memdelete(f);
}
}
}
}
if (file.find("/")) {
da->make_dir_recursive(file.get_base_dir());
}
FileAccessRef wf = FileAccess::open(bar_dir.plus_file(file),FileAccess::WRITE);
wf->store_buffer(data.ptr(),data.size());
ret = unzGoToNextFile(pkg);
}
ep.step("Adding Files..",2);
FileAccess* dst = FileAccess::open(bar_dir+"/data.pck", FileAccess::WRITE);
if (!dst) {
EditorNode::add_io_error("Can't copy executable file to:\n "+p_path);
return ERR_FILE_CANT_WRITE;
}
save_pack(dst, false, 1024);
dst->close();
memdelete(dst);
ep.step("Creating BAR Package..",104);
String bb_packager=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
bb_packager=bb_packager.plus_file("blackberry-nativepackager");
if (OS::get_singleton()->get_name()=="Windows")
bb_packager+=".bat";
if (!FileAccess::exists(bb_packager)) {
EditorNode::add_io_error("Can't find packager:\n"+bb_packager);
return ERR_CANT_OPEN;
}
List<String> args;
args.push_back("-package");
args.push_back(p_path);
if (p_debug) {
String debug_token=EditorSettings::get_singleton()->get("export/blackberry/debug_token");
if (!FileAccess::exists(debug_token)) {
EditorNode::add_io_error("Debug token not found!");
} else {
args.push_back("-debugToken");
args.push_back(debug_token);
}
args.push_back("-devMode");
args.push_back("-configuration");
args.push_back("Device-Debug");
} else {
args.push_back("-configuration");
args.push_back("Device-Release");
}
args.push_back(bar_dir.plus_file("bar-descriptor.xml"));
int ec;
Error err = OS::get_singleton()->execute(bb_packager,args,true,NULL,NULL,&ec);
if (err!=OK)
return err;
if (ec!=0)
return ERR_CANT_CREATE;
return OK;
}
bool EditorExportPlatformBB10::poll_devices() {
bool dc=devices_changed;
devices_changed=false;
return dc;
}
int EditorExportPlatformBB10::get_device_count() const {
device_lock->lock();
int dc=devices.size();
device_lock->unlock();
return dc;
}
String EditorExportPlatformBB10::get_device_name(int p_device) const {
ERR_FAIL_INDEX_V(p_device,devices.size(),"");
device_lock->lock();
String s=devices[p_device].name;
device_lock->unlock();
return s;
}
String EditorExportPlatformBB10::get_device_info(int p_device) const {
ERR_FAIL_INDEX_V(p_device,devices.size(),"");
device_lock->lock();
String s=devices[p_device].description;
device_lock->unlock();
return s;
}
void EditorExportPlatformBB10::_device_poll_thread(void *ud) {
EditorExportPlatformBB10 *ea=(EditorExportPlatformBB10 *)ud;
while(!ea->quit_request) {
String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
bb_deploy=bb_deploy.plus_file("blackberry-deploy");
bool windows = OS::get_singleton()->get_name()=="Windows";
if (windows)
bb_deploy+=".bat";
if (FileAccess::exists(bb_deploy)) {
Vector<Device> devices;
for (int i=0;i<MAX_DEVICES;i++) {
String host = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(i+1)+"/host");
if (host==String())
continue;
String pass = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(i+1)+"/password");
if (pass==String())
continue;
List<String> args;
args.push_back("-listDeviceInfo");
args.push_back(host);
args.push_back("-password");
args.push_back(pass);
int ec;
String dp;
Error err = OS::get_singleton()->execute(bb_deploy,args,true,NULL,&dp,&ec);
if (err==OK && ec==0) {
Device dev;
dev.index=i;
String descr;
Vector<String> ls=dp.split("\n");
for(int i=0;i<ls.size();i++) {
String l = ls[i].strip_edges();
if (l.begins_with("modelfullname::")) {
dev.name=l.get_slice("::",1);
descr+="Model: "+dev.name+"\n";
}
if (l.begins_with("modelnumber::")) {
String s = l.get_slice("::",1);
dev.name+=" ("+s+")";
descr+="Model Number: "+s+"\n";
}
if (l.begins_with("scmbundle::"))
descr+="OS Version: "+l.get_slice("::",1)+"\n";
if (l.begins_with("[n]debug_token_expiration::"))
descr+="Debug Token Expires:: "+l.get_slice("::",1)+"\n";
}
dev.description=descr;
devices.push_back(dev);
}
}
bool changed=false;
ea->device_lock->lock();
if (ea->devices.size()!=devices.size()) {
changed=true;
} else {
for(int i=0;i<ea->devices.size();i++) {
if (ea->devices[i].index!=devices[i].index) {
changed=true;
break;
}
}
}
if (changed) {
ea->devices=devices;
ea->devices_changed=true;
}
ea->device_lock->unlock();
}
uint64_t wait = 3000000;
uint64_t time = OS::get_singleton()->get_ticks_usec();
while(OS::get_singleton()->get_ticks_usec() - time < wait ) {
OS::get_singleton()->delay_usec(1000);
if (ea->quit_request)
break;
}
}
}
Error EditorExportPlatformBB10::run(int p_device, int p_flags) {
ERR_FAIL_INDEX_V(p_device,devices.size(),ERR_INVALID_PARAMETER);
String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
bb_deploy=bb_deploy.plus_file("blackberry-deploy");
if (OS::get_singleton()->get_name()=="Windows")
bb_deploy+=".bat";
if (!FileAccess::exists(bb_deploy)) {
EditorNode::add_io_error("Blackberry Deploy not found:\n"+bb_deploy);
return ERR_FILE_NOT_FOUND;
}
device_lock->lock();
EditorProgress ep("run","Running on "+devices[p_device].name,3);
//export_temp
ep.step("Exporting APK",0);
String export_to=EditorSettings::get_singleton()->get_settings_path().plus_file("/tmp/tmpexport.bar");
Error err = export_project(export_to,true,p_flags);
if (err) {
device_lock->unlock();
return err;
}
#if 0
ep.step("Uninstalling..",1);
print_line("Uninstalling previous version: "+devices[p_device].name);
List<String> args;
args.push_back("-s");
args.push_back(devices[p_device].id);
args.push_back("uninstall");
args.push_back(package);
int rv;
err = OS::get_singleton()->execute(adb,args,true,NULL,NULL,&rv);
if (err || rv!=0) {
EditorNode::add_io_error("Could not install to device.");
device_lock->unlock();
return ERR_CANT_CREATE;
}
print_line("Installing into device (please wait..): "+devices[p_device].name);
#endif
ep.step("Installing to Device (please wait..)..",2);
List<String> args;
args.clear();
args.push_back("-installApp");
args.push_back("-launchApp");
args.push_back("-device");
String host = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(p_device+1)+"/host");
String pass = EditorSettings::get_singleton()->get("export/blackberry/device_"+itos(p_device+1)+"/password");
args.push_back(host);
args.push_back("-password");
args.push_back(pass);
args.push_back(export_to);
int rv;
err = OS::get_singleton()->execute(bb_deploy,args,true,NULL,NULL,&rv);
if (err || rv!=0) {
EditorNode::add_io_error("Could not install to device.");
device_lock->unlock();
return ERR_CANT_CREATE;
}
device_lock->unlock();
return OK;
}
EditorExportPlatformBB10::EditorExportPlatformBB10() {
version_code=1;
version_name="1.0";
package="com.godot.noname";
category="core.games";
name="";
author_name="Cert. Name";
author_id="Cert. ID";
description="Game made with Godot Engine";
device_lock = Mutex::create();
quit_request=false;
device_thread=Thread::create(_device_poll_thread,this);
devices_changed=true;
Image img( _bb10_logo );
logo = Ref<ImageTexture>( memnew( ImageTexture ));
logo->create_from_image(img);
}
bool EditorExportPlatformBB10::can_export(String *r_error) const {
bool valid=true;
String bb_deploy=EditorSettings::get_singleton()->get("export/blackberry/host_tools");
String err;
if (!FileAccess::exists(bb_deploy.plus_file("blackberry-deploy"))) {
valid=false;
err+="Blackberry host tools not configured in editor settings.\n";
}
if (!exists_export_template("bb10.zip")) {
valid=false;
err+="No export template found.\nDownload and install export templates.\n";
}
String debug_token=EditorSettings::get_singleton()->get("export/blackberry/debug_token");
if (!FileAccess::exists(debug_token)) {
valid=false;
err+="No debug token set, will not be able to test on device.\n";
}
if (custom_package!="" && !FileAccess::exists(custom_package)) {
valid=false;
err+="Custom release package not found.\n";
}
if (r_error)
*r_error=err;
return valid;
}
EditorExportPlatformBB10::~EditorExportPlatformBB10() {
quit_request=true;
Thread::wait_to_finish(device_thread);
memdelete(device_lock);
memdelete(device_thread);
}
#endif
void register_bb10_exporter() {
#if 0
EDITOR_DEF("export/blackberry/host_tools","");
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"export/blackberry/host_tools",PROPERTY_HINT_GLOBAL_DIR));
EDITOR_DEF("export/blackberry/debug_token","");
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"export/blackberry/debug_token",PROPERTY_HINT_GLOBAL_FILE,"bar"));
EDITOR_DEF("export/blackberry/device_1/host","");
EDITOR_DEF("export/blackberry/device_1/password","");
EDITOR_DEF("export/blackberry/device_2/host","");
EDITOR_DEF("export/blackberry/device_2/password","");
EDITOR_DEF("export/blackberry/device_3/host","");
EDITOR_DEF("export/blackberry/device_3/password","");
EDITOR_DEF("export/blackberry/device_4/host","");
EDITOR_DEF("export/blackberry/device_4/password","");
EDITOR_DEF("export/blackberry/device_5/host","");
EDITOR_DEF("export/blackberry/device_5/password","");
Ref<EditorExportPlatformBB10> exporter = Ref<EditorExportPlatformBB10>( memnew(EditorExportPlatformBB10) );
EditorImportExport::get_singleton()->add_export_platform(exporter);
#endif
}

View file

@ -1,30 +0,0 @@
/*************************************************************************/
/* export.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
void register_bb10_exporter();

View file

@ -1,48 +0,0 @@
/*************************************************************************/
/* godot_bb10.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "main/main.h"
#include "os_bb10.h"
#include <unistd.h>
int main(int argc, char *argv[]) {
OSBB10 os;
Error err = Main::setup(argv[0], argc - 1, &argv[1]);
if (err != OK)
return 255;
if (Main::start())
os.run(); // it is actually the OS that decides how to run
Main::cleanup();
return os.get_exit_code();
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,608 +0,0 @@
/*************************************************************************/
/* os_bb10.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "os_bb10.h"
#include "bbutil.h"
#include "core/global_config.h"
#include "core/os/dir_access.h"
#include "core/os/keyboard.h"
#include "drivers/gles2/rasterizer_gles2.h"
#include "main/main.h"
#include "servers/visual/visual_server_raster.h"
#include <assert.h>
#include <bps/accelerometer.h>
#include <bps/audiodevice.h>
#include <bps/bps.h>
#include <bps/navigator.h>
#include <bps/orientation.h>
#include <bps/screen.h>
#include <bps/virtualkeyboard.h>
#include <stdbool.h>
#include <stdlib.h>
#ifdef BB10_SCORELOOP_ENABLED
#include "modules/scoreloop/scoreloop_bb10.h"
#endif
static char launch_dir[512];
char *launch_dir_ptr;
int OSBB10::get_video_driver_count() const {
return 1;
}
const char *OSBB10::get_video_driver_name(int p_driver) const {
return "GLES2";
}
OS::VideoMode OSBB10::get_default_video_mode() const {
return OS::VideoMode();
}
int OSBB10::get_audio_driver_count() const {
return 1;
}
const char *OSBB10::get_audio_driver_name(int p_driver) const {
return "BB10";
}
void OSBB10::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) {
data_dir = getenv("HOME");
//Create a screen context that will be used to create an EGL surface to to receive libscreen events
screen_create_context(&screen_cxt, 0);
//Initialize BPS library
bps_initialize();
//Use utility code to initialize EGL for 2D rendering with GL ES 1.1
enum RENDERING_API api = GL_ES_2;
#ifdef BB10_LGLES_OVERRIDE
api = GL_ES_1;
#endif
if (EXIT_SUCCESS != bbutil_init(screen_cxt, api)) {
bbutil_terminate();
screen_destroy_context(screen_cxt);
return;
};
EGLint surface_width, surface_height;
eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
printf("screen size: %ix%i\n", surface_width, surface_height);
VideoMode mode;
mode.width = surface_width;
mode.height = surface_height;
mode.fullscreen = true;
mode.resizable = false;
set_video_mode(mode);
//Signal BPS library that navigator and screen events will be requested
screen_request_events(screen_cxt);
navigator_request_events(0);
virtualkeyboard_request_events(0);
audiodevice_request_events(0);
#ifdef DEBUG_ENABLED
bps_set_verbosity(3);
#endif
accel_supported = accelerometer_is_supported();
if (accel_supported)
accelerometer_set_update_frequency(FREQ_40_HZ);
pitch = 0;
roll = 0;
#ifdef BB10_LGLES_OVERRIDE
rasterizer = memnew(RasterizerGLES1(false));
#else
rasterizer = memnew(RasterizerGLES2(false, false));
#endif
visual_server = memnew(VisualServerRaster(rasterizer));
visual_server->init();
visual_server->cursor_set_visible(false, 0);
audio_driver = memnew(AudioDriverBB10);
audio_driver->set_singleton();
audio_driver->init(NULL);
physics_server = memnew(PhysicsServerSW);
physics_server->init();
physics_2d_server = memnew(Physics2DServerSW);
physics_2d_server->init();
input = memnew(InputDefault);
power_manager = memnew(PowerBB10);
#ifdef PAYMENT_SERVICE_ENABLED
payment_service = memnew(PaymentService);
Globals::get_singleton()->add_singleton(Globals::Singleton("InAppStore", payment_service));
#endif
}
void OSBB10::set_main_loop(MainLoop *p_main_loop) {
input->set_main_loop(p_main_loop);
main_loop = p_main_loop;
}
void OSBB10::delete_main_loop() {
memdelete(main_loop);
main_loop = NULL;
}
void OSBB10::finalize() {
if (main_loop)
memdelete(main_loop);
main_loop = NULL;
/*
if (debugger_connection_console) {
memdelete(debugger_connection_console);
}
*/
visual_server->finish();
memdelete(visual_server);
memdelete(rasterizer);
physics_server->finish();
memdelete(physics_server);
physics_2d_server->finish();
memdelete(physics_2d_server);
#ifdef PAYMENT_SERVICE_ENABLED
memdelete(payment_service);
#endif
memdelete(input);
bbutil_terminate();
screen_destroy_context(screen_cxt);
bps_shutdown();
}
void OSBB10::set_mouse_show(bool p_show) {
//android has no mouse...
}
void OSBB10::set_mouse_grab(bool p_grab) {
//it really has no mouse...!
}
bool OSBB10::is_mouse_grab_enabled() const {
//*sigh* technology has evolved so much since i was a kid..
return false;
}
Point2 OSBB10::get_mouse_position() const {
return Point2();
}
int OSBB10::get_mouse_button_state() const {
return 0;
}
void OSBB10::set_window_title(const String &p_title) {
}
//interesting byt not yet
//void set_clipboard(const String& p_text);
//String get_clipboard() const;
void OSBB10::set_video_mode(const VideoMode &p_video_mode, int p_screen) {
default_videomode = p_video_mode;
}
OS::VideoMode OSBB10::get_video_mode(int p_screen) const {
return default_videomode;
}
void OSBB10::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) const {
p_list->push_back(default_videomode);
}
String OSBB10::get_name() {
return "BlackBerry 10";
}
MainLoop *OSBB10::get_main_loop() const {
return main_loop;
}
bool OSBB10::can_draw() const {
return !minimized;
}
void OSBB10::set_cursor_shape(CursorShape p_shape) {
//android really really really has no mouse.. how amazing..
}
void OSBB10::handle_screen_event(bps_event_t *event) {
screen_event_t screen_event = screen_event_get_event(event);
int screen_val;
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TYPE, &screen_val);
int pos[2];
switch (screen_val) {
case SCREEN_EVENT_MTOUCH_TOUCH:
case SCREEN_EVENT_MTOUCH_RELEASE: {
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos);
InputEvent ievent;
ievent.type = InputEvent::SCREEN_TOUCH;
ievent.device = 0;
ievent.screen_touch.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH);
ievent.screen_touch.x = pos[0];
ievent.screen_touch.y = pos[1];
Point2 mpos(ievent.screen_touch.x, ievent.screen_touch.y);
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]);
ievent.screen_touch.index = pos[0];
last_touch_x[pos[0]] = ievent.screen_touch.x;
last_touch_y[pos[0]] = ievent.screen_touch.y;
input->parse_input_event(ievent);
if (ievent.screen_touch.index == 0) {
InputEvent ievent;
ievent.type = InputEvent::MOUSE_BUTTON;
ievent.device = 0;
ievent.mouse_button.pressed = (screen_val == SCREEN_EVENT_MTOUCH_TOUCH);
ievent.mouse_button.button_index = BUTTON_LEFT;
ievent.mouse_button.doubleclick = 0;
ievent.mouse_button.x = ievent.mouse_button.global_x = mpos.x;
ievent.mouse_button.y = ievent.mouse_button.global_y = mpos.y;
input->parse_input_event(ievent);
};
} break;
case SCREEN_EVENT_MTOUCH_MOVE: {
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_POSITION, pos);
InputEvent ievent;
ievent.type = InputEvent::SCREEN_DRAG;
ievent.device = 0;
ievent.screen_drag.x = pos[0];
ievent.screen_drag.y = pos[1];
/*
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_SOURCE_POSITION, pos);
ievent.screen_drag.relative_x = ievent.screen_drag.x - pos[0];
ievent.screen_drag.relative_y = ievent.screen_drag.y - pos[1];
*/
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_TOUCH_ID, &pos[0]);
ievent.screen_drag.index = pos[0];
ievent.screen_drag.relative_x = ievent.screen_drag.x - last_touch_x[ievent.screen_drag.index];
ievent.screen_drag.relative_y = ievent.screen_drag.y - last_touch_y[ievent.screen_drag.index];
last_touch_x[ievent.screen_drag.index] = ievent.screen_drag.x;
last_touch_y[ievent.screen_drag.index] = ievent.screen_drag.y;
Point2 mpos(ievent.screen_drag.x, ievent.screen_drag.y);
Point2 mrel(ievent.screen_drag.relative_x, ievent.screen_drag.relative_y);
input->parse_input_event(ievent);
if (ievent.screen_touch.index == 0) {
InputEvent ievent;
ievent.type = InputEvent::MOUSE_MOTION;
ievent.device = 0;
ievent.mouse_motion.x = ievent.mouse_motion.global_x = mpos.x;
ievent.mouse_motion.y = ievent.mouse_motion.global_y = mpos.y;
input->set_mouse_position(Point2(ievent.mouse_motion.x, ievent.mouse_motion.y));
ievent.mouse_motion.speed_x = input->get_last_mouse_speed().x;
ievent.mouse_motion.speed_y = input->get_last_mouse_speed().y;
ievent.mouse_motion.relative_x = mrel.x;
ievent.mouse_motion.relative_y = mrel.y;
ievent.mouse_motion.button_mask = 1; // pressed
input->parse_input_event(ievent);
};
} break;
case SCREEN_EVENT_KEYBOARD: {
InputEvent ievent;
ievent.type = InputEvent::KEY;
ievent.device = 0;
int val = 0;
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SCAN, &val);
ievent.key.scancode = val;
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_SYM, &val);
ievent.key.unicode = val;
if (val == 61448) {
ievent.key.scancode = KEY_BACKSPACE;
ievent.key.unicode = KEY_BACKSPACE;
};
if (val == 61453) {
ievent.key.scancode = KEY_ENTER;
ievent.key.unicode = KEY_ENTER;
};
int flags;
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_FLAGS, &flags);
ievent.key.pressed = flags & 1; // bit 1 is pressed apparently
int mod;
screen_get_event_property_iv(screen_event, SCREEN_PROPERTY_KEY_MODIFIERS, &mod);
input->parse_input_event(ievent);
} break;
default:
break;
}
};
void OSBB10::handle_accelerometer() {
if (!accel_supported)
return;
if (!fullscreen)
return;
double force_x, force_y, force_z;
accelerometer_read_forces(&force_x, &force_y, &force_z);
Vector3 accel = Vector3(force_x, flip_accelerometer ? force_y : -force_y, force_z);
input->set_accelerometer(accel);
// rotate 90 degrees
//input->set_accelerometer(Vector3(force_y, flip_accelerometer?force_x:(-force_x), force_z));
};
void OSBB10::_resize(bps_event_t *event) {
int angle = navigator_event_get_orientation_angle(event);
bbutil_rotate_screen_surface(angle);
EGLint surface_width, surface_height;
eglQuerySurface(egl_disp, egl_surf, EGL_WIDTH, &surface_width);
eglQuerySurface(egl_disp, egl_surf, EGL_HEIGHT, &surface_height);
VideoMode mode;
mode.width = surface_width;
mode.height = surface_height;
mode.fullscreen = true;
mode.resizable = false;
set_video_mode(mode);
};
void OSBB10::process_events() {
handle_accelerometer();
bps_event_t *event = NULL;
do {
int rc = bps_get_event(&event, 0);
assert(rc == BPS_SUCCESS);
if (!event) break;
#ifdef BB10_SCORELOOP_ENABLED
ScoreloopBB10 *sc = Globals::get_singleton()->get_singleton_object("Scoreloop")->cast_to<ScoreloopBB10>();
if (sc->handle_event(event))
continue;
#endif
#ifdef PAYMENT_SERVICE_ENABLED
if (payment_service->handle_event(event))
continue;
#endif
int domain = bps_event_get_domain(event);
if (domain == screen_get_domain()) {
handle_screen_event(event);
} else if (domain == navigator_get_domain()) {
if (NAVIGATOR_EXIT == bps_event_get_code(event)) {
if (main_loop)
main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
bps_event_destroy(event);
exit(0);
return;
/*
} else if (bps_event_get_code(event) == NAVIGATOR_ORIENTATION_CHECK) {
int angle = navigator_event_get_orientation_angle(event);
navigator_orientation_check_response(event, false);
} else if (bps_event_get_code(event) == NAVIGATOR_ORIENTATION) {
_resize(event);
*/
} else if (bps_event_get_code(event) == NAVIGATOR_WINDOW_STATE) {
int state = navigator_event_get_window_state(event);
bool was_fullscreen = fullscreen;
minimized = state == NAVIGATOR_WINDOW_INVISIBLE;
fullscreen = state == NAVIGATOR_WINDOW_FULLSCREEN;
set_low_processor_usage_mode(!fullscreen);
if (fullscreen != was_fullscreen) {
if (fullscreen) {
audio_server->set_fx_global_volume_scale(fullscreen_mixer_volume);
audio_server->set_stream_global_volume_scale(fullscreen_stream_volume);
} else {
fullscreen_mixer_volume = audio_server->get_fx_global_volume_scale();
fullscreen_stream_volume = audio_server->get_stream_global_volume_scale();
audio_server->set_fx_global_volume_scale(0);
audio_server->set_stream_global_volume_scale(0);
};
};
};
} else if (domain == audiodevice_get_domain()) {
const char *audiodevice_path = audiodevice_event_get_path(event);
printf("************* got audiodevice event, path %s\n", audiodevice_path);
audio_driver->finish();
audio_driver->init(audiodevice_path);
audio_driver->start();
};
//bps_event_destroy(event);
} while (event);
};
bool OSBB10::has_virtual_keyboard() const {
return true;
};
void OSBB10::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) {
virtualkeyboard_show();
};
void OSBB10::hide_virtual_keyboard() {
virtualkeyboard_hide();
};
void OSBB10::run() {
if (!main_loop)
return;
main_loop->init();
int flip = bbutil_is_flipped();
int rot = bbutil_get_rotation();
flip_accelerometer = rot == 90;
printf("**************** rot is %i, flip %i\n", rot, (int)flip_accelerometer);
/*
orientation_direction_t orientation;
int angle;
orientation_get(&orientation, &angle);
printf("******************** orientation %i, %i, %i\n", orientation, ORIENTATION_BOTTOM_UP, ORIENTATION_TOP_UP);
if (orientation == ORIENTATION_BOTTOM_UP) {
flip_accelerometer = true;
};
*/
while (true) {
process_events(); // get rid of pending events
if (Main::iteration() == true)
break;
bbutil_swap();
//#ifdef DEBUG_ENABLED
fflush(stdout);
//#endif
};
main_loop->finish();
};
bool OSBB10::has_touchscreen_ui_hint() const {
return true;
}
Error OSBB10::shell_open(String p_uri) {
char *msg = NULL;
int ret = navigator_invoke(p_uri.utf8().get_data(), &msg);
return ret == BPS_SUCCESS ? OK : FAILED;
};
String OSBB10::get_data_dir() const {
return data_dir;
};
Size2 OSBB10::get_window_size() const {
return Vector2(default_videomode.width, default_videomode.height);
}
PowerState OSBB10::get_power_state() {
return power_manager->get_power_state();
}
int OSBB10::get_power_seconds_left() {
return power_manager->get_power_seconds_left();
}
int OSBB10::get_power_percent_left() {
return power_manager->get_power_percent_left();
}
OSBB10::OSBB10() {
main_loop = NULL;
minimized = false;
fullscreen = true;
flip_accelerometer = true;
fullscreen_mixer_volume = 1;
fullscreen_stream_volume = 1;
printf("godot bb10!\n");
getcwd(launch_dir, sizeof(launch_dir));
printf("launch dir %s\n", launch_dir);
chdir("app/native");
launch_dir_ptr = launch_dir;
}
OSBB10::~OSBB10() {
}

View file

@ -1,153 +0,0 @@
/*************************************************************************/
/* os_bb10.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#ifndef OS_BB10_H
#define OS_BB10_H
#include "audio_driver_bb10.h"
#include "drivers/unix/os_unix.h"
#include "main/input_default.h"
#include "os/input.h"
#include "os/main_loop.h"
#include "payment_service.h"
#include "power_bb10.h"
#include "servers/audio_server.h"
#include "servers/physics/physics_server_sw.h"
#include "servers/physics_2d/physics_2d_server_sw.h"
#include "servers/visual/rasterizer.h"
#include <bps/event.h>
#include <screen/screen.h>
#include <stdint.h>
#include <sys/platform.h>
class OSBB10 : public OS_Unix {
screen_context_t screen_cxt;
float fullscreen_mixer_volume;
float fullscreen_stream_volume;
Rasterizer *rasterizer;
VisualServer *visual_server;
PhysicsServer *physics_server;
Physics2DServer *physics_2d_server;
AudioDriverBB10 *audio_driver;
PowerBB10 *power_manager;
#ifdef PAYMENT_SERVICE_ENABLED
PaymentService *payment_service;
#endif
VideoMode default_videomode;
MainLoop *main_loop;
void process_events();
void _resize(bps_event_t *event);
void handle_screen_event(bps_event_t *event);
void handle_accelerometer();
int last_touch_x[16];
int last_touch_y[16];
bool accel_supported;
float pitch;
float roll;
bool minimized;
bool fullscreen;
bool flip_accelerometer;
String data_dir;
InputDefault *input;
public:
// functions used by main to initialize/deintialize the OS
virtual int get_video_driver_count() const;
virtual const char *get_video_driver_name(int p_driver) const;
virtual VideoMode get_default_video_mode() const;
virtual String get_data_dir() const;
virtual int get_audio_driver_count() const;
virtual const char *get_audio_driver_name(int p_driver) const;
virtual void initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver);
virtual void set_main_loop(MainLoop *p_main_loop);
virtual void delete_main_loop();
virtual void finalize();
typedef int64_t ProcessID;
static OS *get_singleton();
virtual void set_mouse_show(bool p_show);
virtual void set_mouse_grab(bool p_grab);
virtual bool is_mouse_grab_enabled() const;
virtual Point2 get_mouse_position() const;
virtual int get_mouse_button_state() const;
virtual void set_window_title(const String &p_title);
//virtual void set_clipboard(const String& p_text);
//virtual String get_clipboard() const;
virtual bool has_virtual_keyboard() const;
virtual void show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect);
virtual void hide_virtual_keyboard();
virtual void set_video_mode(const VideoMode &p_video_mode, int p_screen = 0);
virtual VideoMode get_video_mode(int p_screen = 0) const;
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen = 0) const;
virtual Size2 get_window_size() const;
virtual String get_name();
virtual MainLoop *get_main_loop() const;
virtual bool can_draw() const;
virtual void set_cursor_shape(CursorShape p_shape);
virtual bool has_touchscreen_ui_hint() const;
virtual Error shell_open(String p_uri);
void run();
virtual PowerState get_power_state();
virtual int get_power_seconds_left();
virtual int get_power_percent_left();
OSBB10();
~OSBB10();
};
#endif

View file

@ -1,149 +0,0 @@
/*************************************************************************/
/* payment_service.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#ifdef PAYMENT_SERVICE_ENABLED
#include "payment_service.h"
#include "bbutil.h"
#include <errno.h>
#include <string.h>
#include <unistd.h>
extern char *launch_dir_ptr;
void PaymentService::_bind_methods() {
ClassDB::bind_method(D_METHOD("request_product_info"), &PaymentService::request_product_info);
ClassDB::bind_method(D_METHOD("purchase"), &PaymentService::purchase);
ClassDB::bind_method(D_METHOD("get_pending_event_count"), &PaymentService::get_pending_event_count);
ClassDB::bind_method(D_METHOD("pop_pending_event"), &PaymentService::pop_pending_event);
};
Error PaymentService::request_product_info(Variant p_params) {
return ERR_UNAVAILABLE;
};
Error PaymentService::purchase(Variant p_params) {
Dictionary params = p_params;
ERR_FAIL_COND_V((!params.has("product_id")) && (!params.has("product_sku")), ERR_INVALID_PARAMETER);
char *id = NULL;
char *sku = NULL;
CharString p_id = params.has("product_id") ? String(params["product_id"]).ascii() : CharString();
CharString p_sku = params.has("product_sku") ? String(params["product_sku"]).ascii() : CharString();
unsigned int request_id;
chdir(launch_dir_ptr);
int ret = paymentservice_purchase_request(params.has("product_sku") ? NULL : p_id.get_data(),
params.has("product_sku") ? p_sku.get_data() : NULL,
NULL, NULL, NULL, NULL, get_window_group_id(), &request_id);
chdir("app/native");
if (ret != BPS_SUCCESS) {
int eret = errno;
printf("purchase error %i, %x, %i, %x\n", ret, ret, eret, eret);
ERR_FAIL_V((Error)eret);
return (Error)eret;
};
return OK;
};
bool PaymentService::handle_event(bps_event_t *p_event) {
if (bps_event_get_domain(p_event) != paymentservice_get_domain()) {
return false;
};
Dictionary dict;
int res = paymentservice_event_get_response_code(p_event);
if (res == SUCCESS_RESPONSE) {
dict["result"] = "ok";
res = bps_event_get_code(p_event);
if (res == PURCHASE_RESPONSE) {
dict["type"] = "purchase";
const char *pid = paymentservice_event_get_digital_good_id(p_event, 0);
dict["product_id"] = String(pid ? pid : "");
};
} else {
const char *desc = paymentservice_event_get_error_text(p_event);
if (strcmp(desc, "alreadyPurchased") == 0) {
dict["result"] = "ok";
} else {
dict["result"] = "error";
dict["error_description"] = paymentservice_event_get_error_text(p_event);
dict["error_code"] = paymentservice_event_get_error_id(p_event);
printf("error code is %i\n", paymentservice_event_get_error_id(p_event));
printf("error description is %s\n", paymentservice_event_get_error_text(p_event));
};
dict["product_id"] = "";
};
res = bps_event_get_code(p_event);
if (res == PURCHASE_RESPONSE) {
dict["type"] = "purchase";
};
printf("********** adding event with result %ls\n", String(dict["result"]).c_str());
pending_events.push_back(dict);
return true;
};
int PaymentService::get_pending_event_count() {
return pending_events.size();
};
Variant PaymentService::pop_pending_event() {
Variant front = pending_events.front()->get();
pending_events.pop_front();
return front;
};
PaymentService::PaymentService() {
paymentservice_request_events(0);
#ifdef DEBUG_ENABLED
paymentservice_set_connection_mode(true);
#else
paymentservice_set_connection_mode(false);
#endif
};
PaymentService::~PaymentService(){
};
#endif

View file

@ -1,64 +0,0 @@
/*************************************************************************/
/* payment_service.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#ifdef PAYMENT_SERVICE_ENABLED
#ifndef PAYMENT_SERVICE_H
#define PAYMENT_SERVICE_H
#include <bps/bps.h>
#include <bps/event.h>
#include <bps/paymentservice.h>
#include "core/object.h"
class PaymentService : public Object {
GDCLASS(PaymentService, Object);
static void _bind_methods();
List<Variant> pending_events;
public:
Error request_product_info(Variant p_params);
Error purchase(Variant p_params);
int get_pending_event_count();
Variant pop_pending_event();
bool handle_event(bps_event_t *p_event);
PaymentService();
~PaymentService();
};
#endif
#endif

View file

@ -1,30 +0,0 @@
/*************************************************************************/
/* platform_config.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include <alloca.h>

View file

@ -1,72 +0,0 @@
/*************************************************************************/
/* power_bb10.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "power_bb10.h"
#include "core/error_macros.h"
bool PowerBB10::UpdatePowerInfo() {
return false;
}
PowerState PowerBB10::get_power_state() {
if (UpdatePowerInfo()) {
return power_state;
} else {
WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN");
return POWERSTATE_UNKNOWN;
}
}
int PowerBB10::get_power_seconds_left() {
if (UpdatePowerInfo()) {
return nsecs_left;
} else {
WARN_PRINT("Power management is not implemented on this platform, defaulting to -1");
return -1;
}
}
int PowerBB10::get_power_percent_left() {
if (UpdatePowerInfo()) {
return percent_left;
} else {
WARN_PRINT("Power management is not implemented on this platform, defaulting to -1");
return -1;
}
}
PowerBB10::PowerBB10()
: nsecs_left(-1), percent_left(-1), power_state(POWERSTATE_UNKNOWN) {
}
PowerBB10::~PowerBB10() {
}

View file

@ -1,51 +0,0 @@
/*************************************************************************/
/* power_bb10.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#ifndef PLATFORM_BB10_POWER_BB10_H_
#define PLATFORM_BB10_POWER_BB10_H_
class PowerBB10 {
private:
int nsecs_left;
int percent_left;
PowerState power_state;
bool UpdatePowerInfo();
public:
PowerBB10();
virtual ~PowerBB10();
PowerState get_power_state();
int get_power_seconds_left();
int get_power_percent_left();
};
#endif /* PLATFORM_BB10_POWER_BB10_H_ */