FIX: update bambu source api
Change-Id: I1689733af6cd8778f017a732dd36ad91bff80ea8 (cherry picked from commit 40bc2c251e00d6d95289fdd9def11f9e1bd9202f)
This commit is contained in:
parent
00284f52b8
commit
66c5d39e28
|
@ -1,28 +1,35 @@
|
||||||
#pragma once
|
#ifndef _BAMBU__TUNNEL_H_
|
||||||
|
#define _BAMBU__TUNNEL_H_
|
||||||
|
|
||||||
#ifdef BAMBU_DYNAMIC
|
#ifdef BAMBU_DYNAMIC
|
||||||
# define BAMBU_EXPORT
|
# define BAMBU_EXPORT
|
||||||
# define BAMBU_FUNC(x) (*x)
|
# define BAMBU_FUNC(x) (*x)
|
||||||
#else
|
#else
|
||||||
# ifdef __WIN32__
|
# ifdef _WIN32
|
||||||
# define BAMBU_EXPORT __declspec(dllexport)
|
# ifdef BAMBU_EXPORTS
|
||||||
|
# define BAMBU_EXPORT __declspec(dllexport)
|
||||||
|
# else
|
||||||
|
# define BAMBU_EXPORT __declspec(dllimport)
|
||||||
|
# endif // BAMBU_EXPORTS
|
||||||
# else
|
# else
|
||||||
# define BAMBU_EXPORT
|
# define BAMBU_EXPORT
|
||||||
# endif // __WIN32__
|
# endif // __WIN32__
|
||||||
# define BAMBU_FUNC(x) x
|
# define BAMBU_FUNC(x) x
|
||||||
#endif
|
#endif // BAMBU_DYNAMIC
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
struct Bambu_Session;
|
#ifdef _WIN32
|
||||||
#ifdef __WIN32__
|
typedef wchar_t tchar;
|
||||||
typedef wchar_t Bambu_Message;
|
|
||||||
#else
|
#else
|
||||||
typedef char Bambu_Message;
|
typedef char tchar;
|
||||||
#endif
|
#endif
|
||||||
typedef void (*Logger)(Bambu_Session * session, int level, Bambu_Message const * msg);
|
|
||||||
|
typedef void* Bambu_Tunnel;
|
||||||
|
|
||||||
|
typedef void (*Logger)(void * context, int level, tchar const* msg);
|
||||||
|
|
||||||
enum Bambu_StreamType
|
enum Bambu_StreamType
|
||||||
{
|
{
|
||||||
|
@ -89,48 +96,39 @@ enum Bambu_Error
|
||||||
{
|
{
|
||||||
Bambu_success,
|
Bambu_success,
|
||||||
Bambu_stream_end,
|
Bambu_stream_end,
|
||||||
Bambu_would_block
|
Bambu_would_block,
|
||||||
};
|
Bambu_buffer_limit
|
||||||
|
|
||||||
struct Bambu_Session
|
|
||||||
{
|
|
||||||
int gSID = -1;
|
|
||||||
int avIndex = -1;
|
|
||||||
int block = 0;
|
|
||||||
int block_next = 0;
|
|
||||||
Logger logger = nullptr;
|
|
||||||
void * buffer = nullptr;
|
|
||||||
int buffer_size = 0;
|
|
||||||
void * extra = 0;
|
|
||||||
void * dump_file1 = nullptr;
|
|
||||||
void * dump_file2 = nullptr;
|
|
||||||
|
|
||||||
void Log(int unused, int level, wchar_t const * format, ...);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef BAMBU_DYNAMIC
|
#ifdef BAMBU_DYNAMIC
|
||||||
struct BambuLib {
|
struct BambuLib {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Open)(Bambu_Session* session, char const* uid);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Create)(Bambu_Tunnel* tunnel, char const* path);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStream)(Bambu_Session* session);
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_SetLogger)(Bambu_Tunnel tunnel, Logger logger, void * context);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamCount)(Bambu_Session* session);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Open)(Bambu_Tunnel tunnel);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamInfo)(Bambu_Session* session, int index, Bambu_StreamInfo* info);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStream)(Bambu_Tunnel tunnel, bool video);
|
||||||
|
|
||||||
BAMBU_EXPORT unsigned long BAMBU_FUNC(Bambu_GetDuration)(Bambu_Session* session);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamCount)(Bambu_Tunnel tunnel);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Seek)(Bambu_Session* session, unsigned long time);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamInfo)(Bambu_Tunnel tunnel, int index, Bambu_StreamInfo* info);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_ReadSample)(Bambu_Session* session, Bambu_Sample* sample);
|
BAMBU_EXPORT unsigned long BAMBU_FUNC(Bambu_GetDuration)(Bambu_Tunnel tunnel);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_SendMessage)(Bambu_Session* session, int ctrl, char const* data, int len);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Seek)(Bambu_Tunnel tunnel, unsigned long time);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_RecvMessage)(Bambu_Session* session, int* ctrl, char* data, int* len);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_ReadSample)(Bambu_Tunnel tunnel, Bambu_Sample* sample);
|
||||||
|
|
||||||
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Close)(Bambu_Session* session);
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_SendMessage)(Bambu_Tunnel tunnel, int ctrl, char const* data, int len);
|
||||||
|
|
||||||
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_RecvMessage)(Bambu_Tunnel tunnel, int* ctrl, char* data, int* len);
|
||||||
|
|
||||||
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Close)(Bambu_Tunnel tunnel);
|
||||||
|
|
||||||
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Destroy)(Bambu_Tunnel tunnel);
|
||||||
|
|
||||||
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Init)();
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Init)();
|
||||||
|
|
||||||
|
@ -138,7 +136,7 @@ BAMBU_EXPORT void BAMBU_FUNC(Bambu_Deinit)();
|
||||||
|
|
||||||
BAMBU_EXPORT char const* BAMBU_FUNC(Bambu_GetLastErrorMsg)();
|
BAMBU_EXPORT char const* BAMBU_FUNC(Bambu_GetLastErrorMsg)();
|
||||||
|
|
||||||
BAMBU_EXPORT void BAMBU_FUNC(Bambu_FreeLogMsg)(Bambu_Message const* msg);
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_FreeLogMsg)(tchar const* msg);
|
||||||
|
|
||||||
#ifdef BAMBU_DYNAMIC
|
#ifdef BAMBU_DYNAMIC
|
||||||
};
|
};
|
||||||
|
@ -147,3 +145,5 @@ BAMBU_EXPORT void BAMBU_FUNC(Bambu_FreeLogMsg)(Bambu_Message const* msg);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif // _BAMBU__TUNNEL_H_
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
//#define PRINTER_FILE_SYSTEM_TEST
|
||||||
|
|
||||||
wxDEFINE_EVENT(EVT_STATUS_CHANGED, wxCommandEvent);
|
wxDEFINE_EVENT(EVT_STATUS_CHANGED, wxCommandEvent);
|
||||||
wxDEFINE_EVENT(EVT_MODE_CHANGED, wxCommandEvent);
|
wxDEFINE_EVENT(EVT_MODE_CHANGED, wxCommandEvent);
|
||||||
wxDEFINE_EVENT(EVT_FILE_CHANGED, wxCommandEvent);
|
wxDEFINE_EVENT(EVT_FILE_CHANGED, wxCommandEvent);
|
||||||
|
@ -22,7 +24,7 @@ static wxBitmap default_thumbnail;
|
||||||
|
|
||||||
struct StaticBambuLib : BambuLib {
|
struct StaticBambuLib : BambuLib {
|
||||||
static StaticBambuLib & get();
|
static StaticBambuLib & get();
|
||||||
static int Fake_Bambu_Open(Bambu_Session * session, char const* uid) { return -2; }
|
static int Fake_Bambu_Create(Bambu_Tunnel*, char const*) { return -2; }
|
||||||
};
|
};
|
||||||
|
|
||||||
PrinterFileSystem::PrinterFileSystem()
|
PrinterFileSystem::PrinterFileSystem()
|
||||||
|
@ -31,12 +33,16 @@ PrinterFileSystem::PrinterFileSystem()
|
||||||
if (!default_thumbnail.IsOk())
|
if (!default_thumbnail.IsOk())
|
||||||
default_thumbnail = wxImage(Slic3r::encode_path(Slic3r::var("live_stream_default.png").c_str()));
|
default_thumbnail = wxImage(Slic3r::encode_path(Slic3r::var("live_stream_default.png").c_str()));
|
||||||
m_session.owner = this;
|
m_session.owner = this;
|
||||||
//auto time = wxDateTime::Now();
|
#ifdef PRINTER_FILE_SYSTEM_TEST
|
||||||
//for (int i = 0; i < 240; ++i) {
|
auto time = wxDateTime::Now();
|
||||||
// m_file_list.push_back({"", time.GetTicks(), 0, default_thumbnail, FF_DOWNLOAD, i - 130});
|
for (int i = 0; i < 800; ++i) {
|
||||||
// time.Add(wxDateSpan::Days(-1));
|
auto name = wxString::Format(L"img-%03d.jpg", i + 1);
|
||||||
//}
|
wxImage im(L"D:\\work\\pic\\" + name);
|
||||||
//BuildGroups();
|
m_file_list.push_back({name.ToUTF8().data(), time.GetTicks(), 0, im, i < 20 ? FF_DOWNLOAD : 0, i * 10 - 40});
|
||||||
|
time.Add(wxDateSpan::Days(-1));
|
||||||
|
}
|
||||||
|
BuildGroups();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PrinterFileSystem::~PrinterFileSystem()
|
PrinterFileSystem::~PrinterFileSystem()
|
||||||
|
@ -234,7 +240,7 @@ int PrinterFileSystem::RecvData(std::function<int(Bambu_Sample& sample)> const &
|
||||||
int result = 0;
|
int result = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
Bambu_Sample sample;
|
Bambu_Sample sample;
|
||||||
result = Bambu_ReadSample(&m_session, &sample);
|
result = Bambu_ReadSample(m_session.tunnel, &sample);
|
||||||
if (result == Bambu_success) {
|
if (result == Bambu_success) {
|
||||||
result = callback(sample);
|
result = callback(sample);
|
||||||
if (result == 1)
|
if (result == 1)
|
||||||
|
@ -556,15 +562,15 @@ void PrinterFileSystem::SendChangedEvent(wxEventType type, size_t index, std::st
|
||||||
wxPostEvent(this, event);
|
wxPostEvent(this, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrinterFileSystem::DumpLog(Bambu_Session *session, int level, Bambu_Message const *msg)
|
void PrinterFileSystem::DumpLog(void * thiz, int, tchar const *msg)
|
||||||
{
|
{
|
||||||
BOOST_LOG_TRIVIAL(info) << "PrinterFileSystem: " << msg;
|
BOOST_LOG_TRIVIAL(info) << "PrinterFileSystem: " << msg;
|
||||||
StaticBambuLib::get().Bambu_FreeLogMsg(msg);
|
static_cast<PrinterFileSystem*>(thiz)->Bambu_FreeLogMsg(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::uint32_t PrinterFileSystem::SendRequest(int type, json const &req, callback_t2 const &callback)
|
boost::uint32_t PrinterFileSystem::SendRequest(int type, json const &req, callback_t2 const &callback)
|
||||||
{
|
{
|
||||||
if (m_session.gSID < 0) {
|
if (m_session.tunnel == nullptr) {
|
||||||
boost::unique_lock l(m_mutex);
|
boost::unique_lock l(m_mutex);
|
||||||
m_cond.notify_all();
|
m_cond.notify_all();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -640,7 +646,7 @@ void PrinterFileSystem::RecvMessageThread()
|
||||||
if (!m_messages.empty()) {
|
if (!m_messages.empty()) {
|
||||||
auto & msg = m_messages.front();
|
auto & msg = m_messages.front();
|
||||||
l.unlock();
|
l.unlock();
|
||||||
int n = Bambu_SendMessage(&m_session, CTRL_TYPE, msg.c_str(), msg.length());
|
int n = Bambu_SendMessage(m_session.tunnel, CTRL_TYPE, msg.c_str(), msg.length());
|
||||||
l.lock();
|
l.lock();
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
m_messages.pop_front();
|
m_messages.pop_front();
|
||||||
|
@ -650,7 +656,7 @@ void PrinterFileSystem::RecvMessageThread()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
l.unlock();
|
l.unlock();
|
||||||
int n = Bambu_ReadSample(&m_session, &sample);
|
int n = Bambu_ReadSample(m_session.tunnel, &sample);
|
||||||
l.lock();
|
l.lock();
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
HandleResponse(l, sample);
|
HandleResponse(l, sample);
|
||||||
|
@ -726,9 +732,12 @@ void PrinterFileSystem::HandleResponse(boost::unique_lock<boost::mutex> &l, Bamb
|
||||||
|
|
||||||
void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &l, int result)
|
void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &l, int result)
|
||||||
{
|
{
|
||||||
if (m_session.gSID >= 0) {
|
if (m_session.tunnel) {
|
||||||
|
auto tunnel = m_session.tunnel;
|
||||||
|
m_session.tunnel = nullptr;
|
||||||
l.unlock();
|
l.unlock();
|
||||||
Bambu_Close(&m_session);
|
Bambu_Close(tunnel);
|
||||||
|
Bambu_Destroy(tunnel);
|
||||||
l.lock();
|
l.lock();
|
||||||
}
|
}
|
||||||
if (m_session.owner == nullptr)
|
if (m_session.owner == nullptr)
|
||||||
|
@ -761,11 +770,16 @@ void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &l, int resul
|
||||||
l.unlock();
|
l.unlock();
|
||||||
m_status = Status::Connecting;
|
m_status = Status::Connecting;
|
||||||
SendChangedEvent(EVT_STATUS_CHANGED, m_status);
|
SendChangedEvent(EVT_STATUS_CHANGED, m_status);
|
||||||
m_session.logger = &PrinterFileSystem::DumpLog;
|
Bambu_Tunnel tunnel = nullptr;
|
||||||
int ret = Bambu_Open(&m_session, url.c_str() + 9); // skip bambu:/// sync
|
int ret = Bambu_Create(&tunnel, url.c_str());
|
||||||
|
if (ret == 0) {
|
||||||
|
Bambu_SetLogger(tunnel, DumpLog, this);
|
||||||
|
ret = Bambu_Open(tunnel);
|
||||||
|
}
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
ret = Bambu_StartStream(&m_session);
|
ret = Bambu_StartStream(tunnel, false);
|
||||||
l.lock();
|
l.lock();
|
||||||
|
m_session.tunnel = tunnel;
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
break;
|
break;
|
||||||
m_last_error = ret;
|
m_last_error = ret;
|
||||||
|
@ -776,7 +790,9 @@ void PrinterFileSystem::Reconnect(boost::unique_lock<boost::mutex> &l, int resul
|
||||||
}
|
}
|
||||||
m_status = Status::ListSyncing;
|
m_status = Status::ListSyncing;
|
||||||
SendChangedEvent(EVT_STATUS_CHANGED, m_status);
|
SendChangedEvent(EVT_STATUS_CHANGED, m_status);
|
||||||
|
#ifndef PRINTER_FILE_SYSTEM_TEST
|
||||||
PostCallback([this] { ListAllFiles(); });
|
PostCallback([this] { ListAllFiles(); });
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -818,6 +834,9 @@ StaticBambuLib &StaticBambuLib::get()
|
||||||
{
|
{
|
||||||
static StaticBambuLib lib;
|
static StaticBambuLib lib;
|
||||||
// first load the library
|
// first load the library
|
||||||
|
|
||||||
|
if (lib.Bambu_Open)
|
||||||
|
return lib;
|
||||||
|
|
||||||
if (!module) {
|
if (!module) {
|
||||||
module = Slic3r::NetworkAgent::get_bambu_source_entry();
|
module = Slic3r::NetworkAgent::get_bambu_source_entry();
|
||||||
|
@ -827,14 +846,17 @@ StaticBambuLib &StaticBambuLib::get()
|
||||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", can not Load Library";
|
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", can not Load Library";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GET_FUNC(Bambu_Create);
|
||||||
GET_FUNC(Bambu_Open);
|
GET_FUNC(Bambu_Open);
|
||||||
GET_FUNC(Bambu_StartStream);
|
GET_FUNC(Bambu_StartStream);
|
||||||
GET_FUNC(Bambu_SendMessage);
|
GET_FUNC(Bambu_SendMessage);
|
||||||
GET_FUNC(Bambu_ReadSample);
|
GET_FUNC(Bambu_ReadSample);
|
||||||
GET_FUNC(Bambu_Close);
|
GET_FUNC(Bambu_Close);
|
||||||
|
GET_FUNC(Bambu_Destroy);
|
||||||
|
GET_FUNC(Bambu_SetLogger);
|
||||||
GET_FUNC(Bambu_FreeLogMsg);
|
GET_FUNC(Bambu_FreeLogMsg);
|
||||||
|
|
||||||
if (!lib.Bambu_Open)
|
if (!lib.Bambu_Open)
|
||||||
lib.Bambu_Open = Fake_Bambu_Open;
|
lib.Bambu_Create = Fake_Bambu_Create;
|
||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,7 +174,7 @@ private:
|
||||||
|
|
||||||
void SendChangedEvent(wxEventType type, size_t index = (size_t)-1, std::string const &str = {}, long extra = 0);
|
void SendChangedEvent(wxEventType type, size_t index = (size_t)-1, std::string const &str = {}, long extra = 0);
|
||||||
|
|
||||||
static void DumpLog(Bambu_Session *session, int level, Bambu_Message const *msg);
|
static void DumpLog(void* context, int level, tchar const *msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template<typename T> using Translator = std::function<int(json const &, T &, unsigned char const *)>;
|
template<typename T> using Translator = std::function<int(json const &, T &, unsigned char const *)>;
|
||||||
|
@ -265,8 +265,9 @@ private:
|
||||||
int m_task_flags = 0;
|
int m_task_flags = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Session : Bambu_Session
|
struct Session
|
||||||
{
|
{
|
||||||
|
Bambu_Tunnel tunnel = nullptr;
|
||||||
PrinterFileSystem * owner;
|
PrinterFileSystem * owner;
|
||||||
};
|
};
|
||||||
Session m_session;
|
Session m_session;
|
||||||
|
|
Loading…
Reference in New Issue