调整扫描流程
This commit is contained in:
parent
6c2ba5166c
commit
a040422b7b
|
@ -365,22 +365,15 @@ void scanner_hw::thread_image_capture(bool paper_ready)
|
||||||
{
|
{
|
||||||
PACKIMAGE img(img_base_);
|
PACKIMAGE img(img_base_);
|
||||||
safe_fifo<int> avail_mem("v4l2-mem");
|
safe_fifo<int> avail_mem("v4l2-mem");
|
||||||
int used_v4l2_mem = 0, times = 0, minh = 210 * dpi_ / 25.4,
|
int used_v4l2_mem = 0, times = 0,
|
||||||
err = SCANNER_ERR_OK;
|
err = SCANNER_ERR_OK, over_msg_id = 0;;
|
||||||
devui::SCANSTREAM scanstream;
|
devui::SCANSTREAM scanstream;
|
||||||
chronograph watch;
|
chronograph watch;
|
||||||
std::pair<int, int> mbev;
|
std::pair<int, int> mbev;
|
||||||
std::function<IMAGE_HANDLER_PROTO> img_callback(img_handler_);
|
std::function<IMAGE_HANDLER_PROTO> img_callback(img_handler_);
|
||||||
|
|
||||||
auto put_v4l2_mem = [&](BEFORE_DESTROY_PARAM) -> BEFORE_DESTROY_RET
|
|
||||||
{
|
|
||||||
int ind = (int)(long)param;
|
|
||||||
|
|
||||||
mem->detach(nullptr);
|
|
||||||
avail_mem.save(ind);
|
|
||||||
};
|
|
||||||
|
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "scanning thread working ...\n");
|
utils::to_log(LOG_LEVEL_DEBUG, "scanning thread working ...\n");
|
||||||
|
avail_mem.enable_wait_log(false);
|
||||||
motor_->clear_error();
|
motor_->clear_error();
|
||||||
if(paper_ready)
|
if(paper_ready)
|
||||||
motor_->start();
|
motor_->start();
|
||||||
|
@ -390,124 +383,18 @@ void scanner_hw::thread_image_capture(bool paper_ready)
|
||||||
devui::send_message(devui::UI_STATUS_SCANNING, (uint8_t*)&scanstream, sizeof(scanstream));
|
devui::send_message(devui::UI_STATUS_SCANNING, (uint8_t*)&scanstream, sizeof(scanstream));
|
||||||
while(scanning_) // auto scan cycle ...
|
while(scanning_) // auto scan cycle ...
|
||||||
{
|
{
|
||||||
int attempt = 0;
|
err = start_and_wait_lifter(to_lifter_, &over_msg_id);
|
||||||
while(paper_ready && scanning_ && attempt++ < 5)
|
if(err)
|
||||||
{
|
|
||||||
mbev.first = -1;
|
|
||||||
mbev.second = 0;
|
|
||||||
if(mb_events_.take(mbev, true, to_lifter_)
|
|
||||||
&& mbev.first == MOTOR_BORD_EVENT_LIFTER_READY)
|
|
||||||
{
|
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "take first motorboard event: %d - 0x%08x\n", mbev.first, mbev.second);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
utils::to_log(LOG_LEVEL_FATAL, "Wait Lifter event before scanning failed, get event(%d - 0x%08x).\n", mbev.first, mbev.second);
|
|
||||||
motor_->start();
|
|
||||||
}
|
|
||||||
if(mbev.first == MOTOR_BORD_EVENT_LIFTER_READY)
|
|
||||||
{
|
|
||||||
times++;
|
|
||||||
watch.reset();
|
|
||||||
motor_->pick_paper();
|
|
||||||
|
|
||||||
// scanning ONE turn ...
|
// scanning ONE turn ...
|
||||||
while(scanning_ && motor_->wait_paper_out(to_paper_out_))
|
if(paper_ready) // auto_scan_ ignore no paper
|
||||||
{
|
{
|
||||||
uint32_t pass = watch.elapse_ms();
|
|
||||||
|
|
||||||
mbev.first = -1;
|
|
||||||
mbev.second = 0;
|
|
||||||
if(mb_events_.take(mbev, true, 10) && mbev.first == MOTOR_BORD_EVENT_ERROR)
|
|
||||||
{
|
|
||||||
auto notify_paper = [&](int error) -> void
|
|
||||||
{
|
|
||||||
if(error == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
|
||||||
devui::send_message(devui::UI_STATUS_PAPER_CNT, (uint8_t*)&pass, sizeof(pass));
|
|
||||||
};
|
|
||||||
err = trans_motorboard_err_2_hg_error(mbev.second, true, notify_paper);
|
|
||||||
if(err != SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if(mbev.first == MOTOR_BORD_EVENT_SCAN_DONE)
|
|
||||||
{
|
|
||||||
printf("-->scan done event received from motorboard.\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
devui::send_message(devui::UI_STATUS_PAPER_CNT, (uint8_t*)&pass, sizeof(pass));
|
|
||||||
err = SCANNER_ERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.pos.paper_ind++;
|
|
||||||
|
|
||||||
if(!count_mode_)
|
|
||||||
{
|
|
||||||
img.height = get_image_real_height(minh);
|
|
||||||
|
|
||||||
size_t size = 0;
|
|
||||||
int ind = -1;
|
|
||||||
void* frame = camera_->read_frame(to_stream_, size, ind);
|
|
||||||
dyn_mem_shared_ptr mem = nullptr;
|
|
||||||
|
|
||||||
if(!frame)
|
|
||||||
{
|
|
||||||
if(err == SCANNER_ERR_OK)
|
|
||||||
err = SCANNER_ERR_DEVICE_CIS_STREAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
img.prc_time = watch.elapse_ms();
|
|
||||||
|
|
||||||
mem = new dyn_mem_shared(frame, size, put_v4l2_mem, (void*)ind);
|
|
||||||
used_v4l2_mem++;
|
|
||||||
img.pos.status = hg_err_2_image_status(err);
|
|
||||||
img_handler_(mem, true, &img);
|
|
||||||
mem->release();
|
|
||||||
|
|
||||||
if((!scan_cntless_ && img.pos.paper_ind == scan_count_) || is_scan_fatal())
|
|
||||||
break;
|
|
||||||
|
|
||||||
// retrieve V4L2 memory ...
|
|
||||||
retrieve_v4l2_mem(&avail_mem, &used_v4l2_mem);
|
|
||||||
if(used_v4l2_mem >= camera_->get_mem_count())
|
|
||||||
{
|
|
||||||
err = SCANNER_ERR_DEVICE_CIS_OUT_OF_MEM;
|
|
||||||
stop_scan();
|
|
||||||
utils::to_log(LOG_LEVEL_FATAL, "Scanning stopped for that V4L2 is out of memory!\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(res_(TASK_CAPTURER, true, 3000) && scanning_)
|
|
||||||
{
|
|
||||||
watch.reset();
|
|
||||||
motor_->pick_paper();
|
motor_->pick_paper();
|
||||||
}
|
err = scan_one_turn(&img, &avail_mem, &used_v4l2_mem, &over_msg_id);
|
||||||
else
|
if(err || !auto_scan_ || !scanning_)
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
printf("Scan turn finished with event(%d - 0x%08x).\n", mbev.first, mbev.second);
|
|
||||||
|
|
||||||
// retrieve v4l2-mem ...
|
|
||||||
int ind = -1;
|
|
||||||
while(avail_mem.take(ind, false))
|
|
||||||
{
|
|
||||||
used_v4l2_mem--;
|
|
||||||
camera_->add_v4l2_memory(ind);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
scanstream.err = err;
|
|
||||||
scanstream.mode = devui::SCAN_PAUSED;
|
|
||||||
devui::send_message(devui::UI_STATUS_SCANNING, (uint8_t*)&scanstream, sizeof(scanstream));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!auto_scan_ || !scanning_)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// wait paper ...
|
// wait paper ...
|
||||||
while(auto_scan_)
|
while(auto_scan_)
|
||||||
|
@ -526,12 +413,16 @@ void scanner_hw::thread_image_capture(bool paper_ready)
|
||||||
printf("\tmotor-board event is %d\n", mbev.first);
|
printf("\tmotor-board event is %d\n", mbev.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!scanning_)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// retrieve v4l2-mem ...
|
||||||
|
retrieve_v4l2_mem(&avail_mem, &used_v4l2_mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(scanning_ && mbev.first != MOTOR_BORD_EVENT_LIFTER_READY && times == 0)
|
motor_->set_auto_paper(false, false);
|
||||||
err = SCANNER_ERR_DEVICE_FEEDER_POS;
|
motor_->stop();
|
||||||
|
|
||||||
stop_scan();
|
|
||||||
while(used_v4l2_mem)
|
while(used_v4l2_mem)
|
||||||
{
|
{
|
||||||
if(times++ == 0)
|
if(times++ == 0)
|
||||||
|
@ -547,7 +438,7 @@ void scanner_hw::thread_image_capture(bool paper_ready)
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "scanning thread exited with error: %d.\n", err);
|
utils::to_log(LOG_LEVEL_DEBUG, "scanning thread exited with error: %d.\n", err);
|
||||||
|
|
||||||
{
|
{
|
||||||
scanstream.err = err;
|
scanstream.err = over_msg_id;
|
||||||
scanstream.mode = devui::SCAN_STOPPED;
|
scanstream.mode = devui::SCAN_STOPPED;
|
||||||
devui::send_message(devui::UI_STATUS_SCANNING, (uint8_t*)&scanstream, sizeof(scanstream));
|
devui::send_message(devui::UI_STATUS_SCANNING, (uint8_t*)&scanstream, sizeof(scanstream));
|
||||||
}
|
}
|
||||||
|
@ -555,6 +446,161 @@ void scanner_hw::thread_image_capture(bool paper_ready)
|
||||||
scanning_ = false;
|
scanning_ = false;
|
||||||
img_handler_((dyn_mem_ptr)WORKER_STATUS_IDLE, false, (LPPACKIMAGE)err);
|
img_handler_((dyn_mem_ptr)WORKER_STATUS_IDLE, false, (LPPACKIMAGE)err);
|
||||||
}
|
}
|
||||||
|
int scanner_hw::start_and_wait_lifter(int to_ms, int* ui_words_id)
|
||||||
|
{
|
||||||
|
int ret = SCANNER_ERR_DEVICE_FEEDER_POS,
|
||||||
|
words = ID_WORDS_STATUS_DEVICE_HD_001;
|
||||||
|
chronograph watch;
|
||||||
|
|
||||||
|
while(scanning_ && watch.elapse_ms() < to_ms)
|
||||||
|
{
|
||||||
|
std::pair<int, int> mbev;
|
||||||
|
if(mb_events_.take(mbev, true, 3))
|
||||||
|
{
|
||||||
|
if(mbev.first == MOTOR_BORD_EVENT_LIFTER_READY)
|
||||||
|
{
|
||||||
|
ret = words = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int err = trans_motorboard_err_2_hg_error(mbev.first, &words);
|
||||||
|
if(err)
|
||||||
|
{
|
||||||
|
ret = err;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!scanning_) // user cancelled
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_USER_CANCELED;
|
||||||
|
words = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ui_words_id)
|
||||||
|
*ui_words_id = words;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
int scanner_hw::scan_one_turn(LPPACKIMAGE img, safe_fifo<int>* cism, int* cism_cnt, int* ui_words)
|
||||||
|
{
|
||||||
|
int ret = SCANNER_ERR_OK, minh = 210 * dpi_ / 25.4,
|
||||||
|
words = 0;
|
||||||
|
uint32_t pass = 0;
|
||||||
|
chronograph watch;
|
||||||
|
std::pair<int, int> mbev;
|
||||||
|
|
||||||
|
auto put_v4l2_mem = [&](BEFORE_DESTROY_PARAM) -> BEFORE_DESTROY_RET
|
||||||
|
{
|
||||||
|
int ind = (int)(long)mem->get_param(1);
|
||||||
|
safe_fifo<int>* que = (safe_fifo<int>*)mem->get_param(0);
|
||||||
|
|
||||||
|
mem->detach(nullptr);
|
||||||
|
que->save(ind);
|
||||||
|
};
|
||||||
|
|
||||||
|
while(scanning_)
|
||||||
|
{
|
||||||
|
if(!motor_->wait_paper_out(to_paper_out_))
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_DEVICE_HD_002;
|
||||||
|
words = ID_WORDS_STATUS_DEVICE_HD_002;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pass = watch.elapse_ms();
|
||||||
|
mbev.first = -1;
|
||||||
|
mbev.second = 0;
|
||||||
|
if(mb_events_.take(mbev, true, 10) && mbev.first == MOTOR_BORD_EVENT_ERROR)
|
||||||
|
{
|
||||||
|
ret = trans_motorboard_err_2_hg_error(mbev.second, &words);
|
||||||
|
if(ret != SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(mbev.first == MOTOR_BORD_EVENT_SCAN_DONE)
|
||||||
|
{
|
||||||
|
printf("-->scan done event received from motorboard.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_OK;
|
||||||
|
words = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img->pos.paper_ind++;
|
||||||
|
|
||||||
|
if(count_mode_)
|
||||||
|
{
|
||||||
|
devui::send_message(devui::UI_STATUS_PAPER_CNT, (uint8_t*)&pass, sizeof(pass));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
img->height = get_image_real_height(minh);
|
||||||
|
|
||||||
|
size_t size = 0;
|
||||||
|
int ind = -1;
|
||||||
|
void* frame = camera_->read_frame(to_stream_, size, ind);
|
||||||
|
dyn_mem_shared_ptr mem = nullptr;
|
||||||
|
|
||||||
|
if(!frame)
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_DEVICE_CIS_STREAM;
|
||||||
|
words = ID_WORDS_STATUS_CAPTURE_FAILED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
devui::send_message(devui::UI_STATUS_PAPER_CNT, (uint8_t*)&pass, sizeof(pass));
|
||||||
|
|
||||||
|
img->prc_time = watch.elapse_ms();
|
||||||
|
mem = new dyn_mem_shared(frame, size, put_v4l2_mem);
|
||||||
|
mem->set_param(cism, 0);
|
||||||
|
mem->set_param((void*)(long)ind, 1);
|
||||||
|
cism_cnt[0]++;
|
||||||
|
img->pos.status = hg_err_2_image_status(ret);
|
||||||
|
img_handler_(mem, true, img);
|
||||||
|
mem->release();
|
||||||
|
|
||||||
|
if(!scan_cntless_ && img->pos.paper_ind == scan_count_)
|
||||||
|
{
|
||||||
|
utils::to_log(LOG_LEVEL_ALL, "Scanning finished for given count %d!\n", scan_count_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// retrieve V4L2 memory ...
|
||||||
|
retrieve_v4l2_mem(cism, cism_cnt);
|
||||||
|
if(cism_cnt[0] >= camera_->get_mem_count())
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_DEVICE_CIS_OUT_OF_MEM;
|
||||||
|
words = ID_WORDS_STATUS_CIS_OUT_OF_MEM;
|
||||||
|
utils::to_log(LOG_LEVEL_FATAL, "Scanning stopped for that V4L2 is out of memory!\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// resource checking ...
|
||||||
|
if(res_(TASK_CAPTURER, true, 3000) && scanning_)
|
||||||
|
{
|
||||||
|
// should check paper ready ?
|
||||||
|
watch.reset();
|
||||||
|
motor_->pick_paper();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = SCANNER_ERR_DEVICE_HD_003;
|
||||||
|
words = ID_WORDS_STATUS_DEVICE_HD_003;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ui_words)
|
||||||
|
*ui_words = words;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
int scanner_hw::get_image_real_height(int minh)
|
int scanner_hw::get_image_real_height(int minh)
|
||||||
{
|
{
|
||||||
chronograph watch;
|
chronograph watch;
|
||||||
|
@ -569,10 +615,6 @@ int scanner_hw::get_image_real_height(int minh)
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
bool scanner_hw::is_scan_fatal(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
void scanner_hw::retrieve_v4l2_mem(safe_fifo<int>* mem, int* used)
|
void scanner_hw::retrieve_v4l2_mem(safe_fifo<int>* mem, int* used)
|
||||||
{
|
{
|
||||||
int u = *used,
|
int u = *used,
|
||||||
|
@ -1005,7 +1047,7 @@ int scanner_hw::close(bool from_worker)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int scanner_hw::trans_motorboard_err_2_hg_error(int mberr, bool to_ui, std::function<void(int)> bef_ui)
|
int scanner_hw::trans_motorboard_err_2_hg_error(int mberr, int *ui_msg)
|
||||||
{
|
{
|
||||||
unsigned int val = mberr;
|
unsigned int val = mberr;
|
||||||
SMBSTATUS *s = (SMBSTATUS*)&val;
|
SMBSTATUS *s = (SMBSTATUS*)&val;
|
||||||
|
@ -1037,14 +1079,8 @@ int scanner_hw::trans_motorboard_err_2_hg_error(int mberr, bool to_ui, std::func
|
||||||
msg = ID_WORDS_STATUS_ASKEW;
|
msg = ID_WORDS_STATUS_ASKEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(to_ui && msg)
|
if(ui_msg)
|
||||||
{
|
*ui_msg = msg;
|
||||||
printf("status message: %s\n", words_from_id(msg));
|
|
||||||
if(bef_ui)
|
|
||||||
bef_ui(mberr);
|
|
||||||
|
|
||||||
devui::send_status_message(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mberr;
|
return mberr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,8 +102,9 @@ class scanner_hw : public sane_opt_provider
|
||||||
void init_version(std::string& text);
|
void init_version(std::string& text);
|
||||||
void load_correct_data(std::string& text);
|
void load_correct_data(std::string& text);
|
||||||
void thread_image_capture(bool paper_ready);
|
void thread_image_capture(bool paper_ready);
|
||||||
|
int start_and_wait_lifter(int to_ms, int* ui_words_id = nullptr);
|
||||||
|
int scan_one_turn(LPPACKIMAGE img, safe_fifo<int>* cism, int* cism_cnt, int* ui_words);
|
||||||
int get_image_real_height(int minh);
|
int get_image_real_height(int minh);
|
||||||
bool is_scan_fatal(void);
|
|
||||||
void retrieve_v4l2_mem(safe_fifo<int>* mem, int* used);
|
void retrieve_v4l2_mem(safe_fifo<int>* mem, int* used);
|
||||||
void set_gain_value(bool front, bool gain, int sector, int val);
|
void set_gain_value(bool front, bool gain, int sector, int val);
|
||||||
|
|
||||||
|
@ -125,7 +126,7 @@ public:
|
||||||
int start_scan(void);
|
int start_scan(void);
|
||||||
int stop_scan(bool from_ui = false);
|
int stop_scan(bool from_ui = false);
|
||||||
int close(bool from_worker = false);
|
int close(bool from_worker = false);
|
||||||
int trans_motorboard_err_2_hg_error(int mberr, bool to_ui = false, std::function<void(int)> bef_ui = std::function<void(int)>());
|
int trans_motorboard_err_2_hg_error(int mberr, int *ui_msg = nullptr);
|
||||||
int hg_err_2_image_status(int hgerr);
|
int hg_err_2_image_status(int hgerr);
|
||||||
bool is_scanning(void);
|
bool is_scanning(void);
|
||||||
void clean_paper_passway(void);
|
void clean_paper_passway(void);
|
||||||
|
|
|
@ -98,7 +98,7 @@ void rebuild::do_rebuild(LPPACKIMAGE info, uint8_t* stream, std::vector<PROCIMGI
|
||||||
|
|
||||||
o.info.width = out[0].info.width;
|
o.info.width = out[0].info.width;
|
||||||
o.info.channels = out[0].info.channels;
|
o.info.channels = out[0].info.channels;
|
||||||
printf("rebuild (%d * %d * 8) to (%d * %d * 24), front = %p, back = %p, size = %u ...\n", info->width, info->height
|
printf("rebuild %03d - (%d * %d * 8) to (%d * %d * 24), front = %p, back = %p, size = %u ...\n", info->pos.paper_ind, info->width, info->height
|
||||||
, o.info.width, o.info.height, dstf, dstb, size);
|
, o.info.width, o.info.height, dstf, dstb, size);
|
||||||
for(int h = 0; h < info->height; ++h)
|
for(int h = 0; h < info->height; ++h)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,7 @@ imgproc_mgr::imgproc_mgr(std::function<void(data_source_ptr)> sender
|
||||||
: img_sender_(sender), opts_(devopts), prc_que_("prcimg")
|
: img_sender_(sender), opts_(devopts), prc_que_("prcimg")
|
||||||
, res_(res)
|
, res_(res)
|
||||||
{
|
{
|
||||||
|
prc_que_.enable_wait_log(false);
|
||||||
ADD_THIS_JSON();
|
ADD_THIS_JSON();
|
||||||
|
|
||||||
if(!res_)
|
if(!res_)
|
||||||
|
|
|
@ -184,6 +184,8 @@ async_scanner::async_scanner() : usb_(nullptr), cfg_mgr_(nullptr), scan_id_(0)
|
||||||
|
|
||||||
usb_ = new async_usb_gadget(bulk_handle, on_connect);
|
usb_ = new async_usb_gadget(bulk_handle, on_connect);
|
||||||
last_err_ = usb_->last_error();
|
last_err_ = usb_->last_error();
|
||||||
|
|
||||||
|
devui::send_status_message(ID_WORDS_STATUS_SCANNER_CONN + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
async_scanner::~async_scanner()
|
async_scanner::~async_scanner()
|
||||||
|
|
|
@ -543,13 +543,36 @@ int dyn_mem::fetch_data(void* buf, uint32_t* size)
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
dyn_mem_shared::dyn_mem_shared(void* buf, size_t size, BEFORE_DESTROY_FUNC destroy, void* param)
|
dyn_mem_shared::dyn_mem_shared(void* buf, size_t size, BEFORE_DESTROY_FUNC destroy)
|
||||||
: dyn_mem(buf, size), destroy_(destroy), param_(param)
|
: dyn_mem(buf, size), destroy_(destroy)
|
||||||
{}
|
{
|
||||||
|
memset(param_, 0, sizeof(param_));
|
||||||
|
}
|
||||||
dyn_mem_shared::~dyn_mem_shared()
|
dyn_mem_shared::~dyn_mem_shared()
|
||||||
{
|
{
|
||||||
if(destroy_)
|
if(destroy_)
|
||||||
destroy_(this, param_);
|
destroy_(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dyn_mem_shared::set_param(void* param, int index)
|
||||||
|
{
|
||||||
|
if(index >= 0 && index < _countof(param_))
|
||||||
|
{
|
||||||
|
param_[index] = param;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void* dyn_mem_shared::get_param(int index)
|
||||||
|
{
|
||||||
|
if(index >= 0 && index < _countof(param_))
|
||||||
|
return param_[index];
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -213,7 +213,7 @@ public:
|
||||||
|
|
||||||
// #define STAT_MEM
|
// #define STAT_MEM
|
||||||
#define BEFORE_DESTROY_RET void
|
#define BEFORE_DESTROY_RET void
|
||||||
#define BEFORE_DESTROY_PARAM dyn_mem* mem, void* param
|
#define BEFORE_DESTROY_PARAM dyn_mem_shared* mem
|
||||||
#define BEFORE_DESTROY_FUNC std::function<BEFORE_DESTROY_RET(BEFORE_DESTROY_PARAM)>
|
#define BEFORE_DESTROY_FUNC std::function<BEFORE_DESTROY_RET(BEFORE_DESTROY_PARAM)>
|
||||||
|
|
||||||
class dyn_mem : public data_source
|
class dyn_mem : public data_source
|
||||||
|
@ -263,13 +263,17 @@ public:
|
||||||
class dyn_mem_shared : public dyn_mem
|
class dyn_mem_shared : public dyn_mem
|
||||||
{
|
{
|
||||||
BEFORE_DESTROY_FUNC destroy_ = BEFORE_DESTROY_FUNC();
|
BEFORE_DESTROY_FUNC destroy_ = BEFORE_DESTROY_FUNC();
|
||||||
void* param_ = nullptr;
|
void* param_[4];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
dyn_mem_shared(void* buf, size_t size, BEFORE_DESTROY_FUNC destroy = BEFORE_DESTROY_FUNC(), void* param = nullptr);
|
dyn_mem_shared(void* buf, size_t size, BEFORE_DESTROY_FUNC destroy = BEFORE_DESTROY_FUNC());
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~dyn_mem_shared();
|
~dyn_mem_shared();
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool set_param(void* param, int index = 0);
|
||||||
|
void* get_param(int index = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
class file_reader : public data_source
|
class file_reader : public data_source
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#define PIPE_PROTO_VER MAKEWORD(0, 1)
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// ipc class
|
// ipc class
|
||||||
namespace devui
|
namespace devui
|
||||||
|
@ -189,18 +191,12 @@ namespace devui
|
||||||
int mode[] = {O_RDONLY, O_WRONLY};
|
int mode[] = {O_RDONLY, O_WRONLY};
|
||||||
int *fd[] = {&fdi_, &fdo_};
|
int *fd[] = {&fdi_, &fdo_};
|
||||||
|
|
||||||
if(ui_)
|
|
||||||
{
|
|
||||||
mkfifo(fifo[!ui_], 0777);
|
mkfifo(fifo[!ui_], 0777);
|
||||||
mkfifo(fifo[ui_], 0777);
|
mkfifo(fifo[ui_], 0777);
|
||||||
fdo_ = open(fifo[1], mode[1]);
|
*fd[ui_] = open(fifo[1], mode[ui_]);
|
||||||
fdi_ = open(fifo[0], mode[0]);
|
utils::to_log(LOG_LEVEL_ALL, "open pipe(%s) = %d\n", fifo[1], *fd[ui_]);
|
||||||
}
|
*fd[!ui_] = open(fifo[0], mode[!ui_]);
|
||||||
else
|
utils::to_log(LOG_LEVEL_ALL, "open pipe(%s) = %d\n", fifo[0], *fd[!ui_]);
|
||||||
{
|
|
||||||
fdi_ = open(fifo[1], mode[0]);
|
|
||||||
fdo_ = open(fifo[0], mode[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fdo_ == -1 || fdi_ == -1)
|
if(fdo_ == -1 || fdi_ == -1)
|
||||||
{
|
{
|
||||||
|
@ -254,6 +250,12 @@ namespace devui
|
||||||
// peer closed, wait 10ms ...
|
// peer closed, wait 10ms ...
|
||||||
if(watch.elapse_ms() > 10)
|
if(watch.elapse_ms() > 10)
|
||||||
{
|
{
|
||||||
|
MSGSTREAM ms;
|
||||||
|
memset(&ms, 0, sizeof(ms));
|
||||||
|
ms.ver = PIPE_PROTO_VER;
|
||||||
|
ms.msg = UI_STATUS_PEER_CLOSED;
|
||||||
|
cb_(&ms);
|
||||||
|
|
||||||
printf("PIPE: peer closed(read ZERO byte and error = %d).\n", errno);
|
printf("PIPE: peer closed(read ZERO byte and error = %d).\n", errno);
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "PIPE: peer closed(read ZERO byte and error = %d).\n", errno);
|
utils::to_log(LOG_LEVEL_DEBUG, "PIPE: peer closed(read ZERO byte and error = %d).\n", errno);
|
||||||
}
|
}
|
||||||
|
@ -369,7 +371,7 @@ namespace devui
|
||||||
size_t fix = sizeof(pack.data);
|
size_t fix = sizeof(pack.data);
|
||||||
|
|
||||||
memset(&pack, 0, sizeof(pack));
|
memset(&pack, 0, sizeof(pack));
|
||||||
pack.ver = 1;
|
pack.ver = PIPE_PROTO_VER;
|
||||||
pack.msg = msgid;
|
pack.msg = msgid;
|
||||||
pack.size = size;
|
pack.size = size;
|
||||||
if(size > fix)
|
if(size > fix)
|
||||||
|
|
|
@ -28,6 +28,8 @@ namespace devui
|
||||||
UI_STATUS_SCANNING = 0x1000, // begin scanning. data: (LPSCANSTREAM)
|
UI_STATUS_SCANNING = 0x1000, // begin scanning. data: (LPSCANSTREAM)
|
||||||
UI_STATUS_PAPER_CNT, // ONE paper has pass through. data: (uint32_t*)milliseconds for paper pass through
|
UI_STATUS_PAPER_CNT, // ONE paper has pass through. data: (uint32_t*)milliseconds for paper pass through
|
||||||
UI_STATUS_MESSAGE, // status message, hold screen. data: LPSTATMSG
|
UI_STATUS_MESSAGE, // status message, hold screen. data: LPSTATMSG
|
||||||
|
|
||||||
|
UI_STATUS_PEER_CLOSED = 0x8000, // peer closed.
|
||||||
};
|
};
|
||||||
enum align_component
|
enum align_component
|
||||||
{
|
{
|
||||||
|
@ -48,7 +50,7 @@ namespace devui
|
||||||
{
|
{
|
||||||
uint16_t ver;
|
uint16_t ver;
|
||||||
uint16_t size; // bytes of data
|
uint16_t size; // bytes of data
|
||||||
uint32_t msg;
|
uint32_t msg; // uicmd
|
||||||
uint8_t data[4];
|
uint8_t data[4];
|
||||||
|
|
||||||
uint32_t whole_size(void)
|
uint32_t whole_size(void)
|
||||||
|
@ -63,7 +65,7 @@ namespace devui
|
||||||
{
|
{
|
||||||
uint32_t mode : 5; // see enum scan
|
uint32_t mode : 5; // see enum scan
|
||||||
uint32_t speed : 27;
|
uint32_t speed : 27;
|
||||||
uint32_t err;
|
uint32_t err; // err message word ID, 0 is normal
|
||||||
}SCANSTREAM, *LPSCANSTREAM;
|
}SCANSTREAM, *LPSCANSTREAM;
|
||||||
typedef struct _status_msg
|
typedef struct _status_msg
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,6 +73,13 @@ WORDS_AND_ID_IMPL(WORDS_STATUS_STAPLE, "\346\243\200\346\265\213\345
|
||||||
WORDS_AND_ID_IMPL(WORDS_STATUS_ASKEW, "\347\272\270\345\274\240\346\255\252\346\226\234");
|
WORDS_AND_ID_IMPL(WORDS_STATUS_ASKEW, "\347\272\270\345\274\240\346\255\252\346\226\234");
|
||||||
WORDS_AND_ID_IMPL(WORDS_STATUS_CIS_TIMEOUT, "\345\217\226\345\233\276\350\266\205\346\227\266");
|
WORDS_AND_ID_IMPL(WORDS_STATUS_CIS_TIMEOUT, "\345\217\226\345\233\276\350\266\205\346\227\266");
|
||||||
WORDS_AND_ID_IMPL(WORDS_STATUS_JAMMED, "\345\215\241\347\272\270");
|
WORDS_AND_ID_IMPL(WORDS_STATUS_JAMMED, "\345\215\241\347\272\270");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_CAPTURE_FAILED, "\351\207\207\345\233\276\345\244\261\350\264\245");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_CIS_OUT_OF_MEM, "\347\274\223\345\206\262\345\214\272\350\200\227\345\260\275");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_DEVICE_HD_001, "\347\241\254\344\273\266\351\224\231\350\257\257001");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_DEVICE_HD_002, "\347\241\254\344\273\266\351\224\231\350\257\257002");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_DEVICE_HD_003, "\347\241\254\344\273\266\351\224\231\350\257\257003");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_SCANNER_CONN, "\346\211\253\346\217\217\347\250\213\345\272\217\345\267\262\351\200\200\345\207\272");
|
||||||
|
WORDS_AND_ID_IMPL(WORDS_STATUS_SCANNER_CONN_1, "\346\211\253\346\217\217\347\250\213\345\272\217\345\267\262\350\277\220\350\241\214");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -139,6 +146,12 @@ const char* words_from_id(int id)
|
||||||
RETURN_ID_STR(id, WORDS_STATUS_ASKEW);
|
RETURN_ID_STR(id, WORDS_STATUS_ASKEW);
|
||||||
RETURN_ID_STR(id, WORDS_STATUS_CIS_TIMEOUT);
|
RETURN_ID_STR(id, WORDS_STATUS_CIS_TIMEOUT);
|
||||||
RETURN_ID_STR(id, WORDS_STATUS_JAMMED);
|
RETURN_ID_STR(id, WORDS_STATUS_JAMMED);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_CAPTURE_FAILED);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_CIS_OUT_OF_MEM);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_DEVICE_HD_001);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_DEVICE_HD_002);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_DEVICE_HD_003);
|
||||||
|
RETURN_ID_STR(id, WORDS_STATUS_SCANNER_CONN);
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,3 +86,9 @@ WORDS_AND_ID_DECL(WORDS_STATUS_STAPLE);
|
||||||
WORDS_AND_ID_DECL(WORDS_STATUS_ASKEW);
|
WORDS_AND_ID_DECL(WORDS_STATUS_ASKEW);
|
||||||
WORDS_AND_ID_DECL(WORDS_STATUS_CIS_TIMEOUT);
|
WORDS_AND_ID_DECL(WORDS_STATUS_CIS_TIMEOUT);
|
||||||
WORDS_AND_ID_DECL(WORDS_STATUS_JAMMED);
|
WORDS_AND_ID_DECL(WORDS_STATUS_JAMMED);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_CAPTURE_FAILED);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_CIS_OUT_OF_MEM);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_DEVICE_HD_001);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_DEVICE_HD_002);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_DEVICE_HD_003);
|
||||||
|
WORDS_AND_ID_DECL(WORDS_STATUS_SCANNER_CONN);
|
|
@ -85,9 +85,9 @@ enum scanner_err
|
||||||
SCANNER_ERR_DEVICE_FEEDER_POS, // 送纸器到位信号未触发
|
SCANNER_ERR_DEVICE_FEEDER_POS, // 送纸器到位信号未触发
|
||||||
SCANNER_ERR_DEVICE_CIS_OUT_OF_MEM, // CIS缓冲区被耗尽
|
SCANNER_ERR_DEVICE_CIS_OUT_OF_MEM, // CIS缓冲区被耗尽
|
||||||
SCANNER_ERR_DEVICE_CIS_STREAM, // 获取CIS图像数据失败
|
SCANNER_ERR_DEVICE_CIS_STREAM, // 获取CIS图像数据失败
|
||||||
SCANNER_ERR_DEVICE_HD_001, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_001, // 设备硬件访问错误 - 扫描前升降台未到位
|
||||||
SCANNER_ERR_DEVICE_HD_002, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_002, // 设备硬件访问错误 - 纸张出口信号未触发
|
||||||
SCANNER_ERR_DEVICE_HD_003, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_003, // 设备硬件访问错误 - 资源不足
|
||||||
SCANNER_ERR_DEVICE_HD_004, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_004, // 设备硬件访问错误
|
||||||
SCANNER_ERR_DEVICE_HD_005, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_005, // 设备硬件访问错误
|
||||||
SCANNER_ERR_DEVICE_HD_006, // 设备硬件访问错误
|
SCANNER_ERR_DEVICE_HD_006, // 设备硬件访问错误
|
||||||
|
|
|
@ -439,7 +439,7 @@ ui_mgr::ui_mgr() : disp_data_("lcd-msg")
|
||||||
lcd_->Lcd_Initial_Lcd(false);
|
lcd_->Lcd_Initial_Lcd(false);
|
||||||
lcd_->clear();
|
lcd_->clear();
|
||||||
|
|
||||||
ready_.cnt = custom_font::get_string_font(WORDS_STATUS_READY, ready_.ptr);
|
ready_.cnt = custom_font::get_string_font(WORDS_STATUS_READY, ready_.ptr, custom_font::FONT_SIZE_32);
|
||||||
ready_.x = (Lcd::LCD_WIDTH - ready_.ptr[0][0] * ready_.cnt - 8) / 2;
|
ready_.x = (Lcd::LCD_WIDTH - ready_.ptr[0][0] * ready_.cnt - 8) / 2;
|
||||||
ready_.y = (Lcd::LCD_HEIGHT - ready_.ptr[0][1]) / 2;
|
ready_.y = (Lcd::LCD_HEIGHT - ready_.ptr[0][1]) / 2;
|
||||||
ready_.mask = 0;
|
ready_.mask = 0;
|
||||||
|
@ -497,6 +497,16 @@ ui_mgr::ui_mgr() : disp_data_("lcd-msg")
|
||||||
if(scan->mode == devui::SCAN_PAUSED)
|
if(scan->mode == devui::SCAN_PAUSED)
|
||||||
{
|
{
|
||||||
perm_data_->save();
|
perm_data_->save();
|
||||||
|
if(scan->err)
|
||||||
|
{
|
||||||
|
devui::STATMSG msg;
|
||||||
|
msg.align_h = msg.align_v = devui::ALIGN_COMPONENT_MID;
|
||||||
|
msg.clear = devui::CLEAR_ALL;
|
||||||
|
msg.font = 16;
|
||||||
|
msg.msg_words_id = scan->err;
|
||||||
|
msg.reserved = 0;
|
||||||
|
display_status(&msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -509,6 +519,17 @@ ui_mgr::ui_mgr() : disp_data_("lcd-msg")
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perm_data_->save();
|
perm_data_->save();
|
||||||
|
if(scan->err)
|
||||||
|
{
|
||||||
|
devui::STATMSG msg;
|
||||||
|
msg.align_h = msg.align_v = devui::ALIGN_COMPONENT_MID;
|
||||||
|
msg.clear = devui::CLEAR_ALL;
|
||||||
|
msg.font = 16;
|
||||||
|
msg.msg_words_id = scan->err;
|
||||||
|
msg.reserved = 0;
|
||||||
|
if(!display_status(&msg))
|
||||||
|
set_ready_status_enabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(pack->msg == devui::UI_STATUS_PAPER_CNT)
|
else if(pack->msg == devui::UI_STATUS_PAPER_CNT)
|
||||||
|
@ -543,6 +564,23 @@ ui_mgr::ui_mgr() : disp_data_("lcd-msg")
|
||||||
{
|
{
|
||||||
int_by_status_ = true;
|
int_by_status_ = true;
|
||||||
display_status(pack->data);
|
display_status(pack->data);
|
||||||
|
peer_connected_ = true;
|
||||||
|
if(((devui::LPSTATMSG)pack->data)->msg_words_id == ID_WORDS_STATUS_SCANNER_CONN + 1)
|
||||||
|
set_ready_status_enabled(true);
|
||||||
|
}
|
||||||
|
else if(pack->msg == devui::UI_STATUS_PEER_CLOSED)
|
||||||
|
{
|
||||||
|
peer_connected_ = *(bool*)pack->data;
|
||||||
|
set_ready_status_enabled(peer_connected_);
|
||||||
|
|
||||||
|
devui::STATMSG msg;
|
||||||
|
msg.align_h = msg.align_v = devui::ALIGN_COMPONENT_MID;
|
||||||
|
msg.clear = devui::CLEAR_ALL;
|
||||||
|
msg.font = 16;
|
||||||
|
msg.msg_words_id = ID_WORDS_STATUS_SCANNER_CONN + peer_connected_;
|
||||||
|
msg.reserved = 0;
|
||||||
|
if(!display_status(&msg))
|
||||||
|
set_ready_status_enabled(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
devui::init_ui(statu, true);
|
devui::init_ui(statu, true);
|
||||||
|
@ -1154,7 +1192,7 @@ void ui_mgr::display_ready(bool time_only)
|
||||||
lcd_->write_line(dd.ptr, dd.cnt, dd.x, dd.y, dd.mask);
|
lcd_->write_line(dd.ptr, dd.cnt, dd.x, dd.y, dd.mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ui_mgr::display_status(void* data)
|
bool ui_mgr::display_status(void* data)
|
||||||
{
|
{
|
||||||
devui::LPSTATMSG lpstatus = (devui::LPSTATMSG)data;
|
devui::LPSTATMSG lpstatus = (devui::LPSTATMSG)data;
|
||||||
const char* text = words_from_id(lpstatus->msg_words_id);
|
const char* text = words_from_id(lpstatus->msg_words_id);
|
||||||
|
@ -1164,7 +1202,7 @@ void ui_mgr::display_status(void* data)
|
||||||
if(!text || !text[0])
|
if(!text || !text[0])
|
||||||
{
|
{
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "Error, No message text for ID %u.\n", lpstatus->msg_words_id);
|
utils::to_log(LOG_LEVEL_DEBUG, "Error, No message text for ID %u.\n", lpstatus->msg_words_id);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lpstatus->font < 8)
|
if(lpstatus->font < 8)
|
||||||
|
@ -1185,7 +1223,7 @@ void ui_mgr::display_status(void* data)
|
||||||
if(dd.cnt == 0)
|
if(dd.cnt == 0)
|
||||||
{
|
{
|
||||||
utils::to_log(LOG_LEVEL_DEBUG, "No font size %u for status message '%s'.\n", lpstatus->font, text);
|
utils::to_log(LOG_LEVEL_DEBUG, "No font size %u for status message '%s'.\n", lpstatus->font, text);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lpstatus->align_h != devui::ALIGN_COMPONENT_HEAD)
|
if(lpstatus->align_h != devui::ALIGN_COMPONENT_HEAD)
|
||||||
|
@ -1224,6 +1262,8 @@ void ui_mgr::display_status(void* data)
|
||||||
dd.mask = 0;
|
dd.mask = 0;
|
||||||
cnt = disp_data_.save(dd, true);
|
cnt = disp_data_.save(dd, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
void ui_mgr::set_ready_status_enabled(bool enable)
|
void ui_mgr::set_ready_status_enabled(bool enable)
|
||||||
{
|
{
|
||||||
|
|
|
@ -103,6 +103,7 @@ class ui_mgr : public refer
|
||||||
bool scanning_ = false;
|
bool scanning_ = false;
|
||||||
bool stopped_by_ui_ = false; // enable ready message when error occurs in auto-scan
|
bool stopped_by_ui_ = false; // enable ready message when error occurs in auto-scan
|
||||||
bool int_by_status_ = false;
|
bool int_by_status_ = false;
|
||||||
|
bool peer_connected_ = false;
|
||||||
int scan_mode_ = 0;
|
int scan_mode_ = 0;
|
||||||
int paper_total_ = 0;
|
int paper_total_ = 0;
|
||||||
int paper_cnt_ = 0;
|
int paper_cnt_ = 0;
|
||||||
|
@ -316,7 +317,7 @@ class ui_mgr : public refer
|
||||||
void thread_display(void);
|
void thread_display(void);
|
||||||
void display_scan_title(void);
|
void display_scan_title(void);
|
||||||
void display_ready(bool time_only);
|
void display_ready(bool time_only);
|
||||||
void display_status(void* data);
|
bool display_status(void* data);
|
||||||
void set_ready_status_enabled(bool enable); // disable ready message, the last message will display until keyboard event triggered
|
void set_ready_status_enabled(bool enable); // disable ready message, the last message will display until keyboard event triggered
|
||||||
void reset_ready_watch(void);
|
void reset_ready_watch(void);
|
||||||
int get_ready_watch_ms(void);
|
int get_ready_watch_ms(void);
|
||||||
|
|
191
ui/font.cpp
191
ui/font.cpp
|
@ -17,10 +17,20 @@ namespace custom_font
|
||||||
, 0x00, 0x0C, 0xE4, 0x24, 0x3C, 0x00, 0x00, 0x00
|
, 0x00, 0x0C, 0xE4, 0x24, 0x3C, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static uint8_t question32x32[] = {22, 32
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x40, 0x60, 0x20, 0x20, 0x20, 0x60, 0xC0, 0xC0
|
||||||
|
, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0F, 0x0E, 0x04, 0x00
|
||||||
|
, 0x00, 0x00, 0xC0, 0xE0, 0x79, 0x7F, 0x1F, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x3F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, 0x0E
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
class font_init
|
class font_init
|
||||||
{
|
{
|
||||||
std::map<std::string, uint8_t*> font_map_;
|
std::map<std::string, uint8_t*> font_map_;
|
||||||
std::map<std::string, uint8_t*> font_map8x8_;
|
std::map<std::string, uint8_t*> font_map8x8_;
|
||||||
|
std::map<std::string, uint8_t*> font_map32x32_;
|
||||||
|
|
||||||
void init_8x8(void)
|
void init_8x8(void)
|
||||||
{
|
{
|
||||||
|
@ -90,11 +100,39 @@ namespace custom_font
|
||||||
font_map8x8_["\071\000\000"] = num9;
|
font_map8x8_["\071\000\000"] = num9;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
void init_32x32(void)
|
||||||
|
{
|
||||||
|
static uint8_t jiu[] = {32, 32
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0xF8, 0xF8, 0xF0, 0xF0
|
||||||
|
, 0xE0, 0x80, 0x00, 0x00, 0x60, 0xB0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x0C, 0x1C, 0x1C, 0x1E, 0xCE, 0xF6, 0xEF, 0x77, 0x77, 0xBF, 0xFB, 0xFB, 0xFB
|
||||||
|
, 0xF1, 0xB1, 0xC1, 0xE0, 0xF8, 0xFF, 0xFF, 0x77, 0x7C, 0x38, 0x18, 0x1A, 0x07, 0x07, 0x07, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE1, 0xC7, 0x4F, 0x0F, 0xFF, 0xFF, 0x3F, 0x63, 0xE3
|
||||||
|
, 0xE1, 0xFD, 0x3F, 0x0F, 0xE3, 0xFD, 0x3F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x06, 0x1F, 0x1F, 0x00, 0x00, 0x03
|
||||||
|
, 0x03, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x0E, 0x0F, 0x0F, 0x06
|
||||||
|
};
|
||||||
|
font_map32x32_["\345\260\261"] = jiu;
|
||||||
|
|
||||||
|
static uint8_t xu[] = {32, 32
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF8, 0xF8, 0xF0, 0xE0, 0x80
|
||||||
|
, 0x00, 0x00, 0x01, 0x83, 0xFF, 0xFF, 0xFF, 0xCC, 0xC0, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x18, 0x7C, 0x7E, 0x3E, 0xDF, 0xFF, 0xFF, 0xFF, 0xF3, 0x81, 0x81, 0x83
|
||||||
|
, 0xC7, 0xCF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF7, 0x7B, 0x7F, 0x7F, 0x7F, 0x77, 0x73, 0x70, 0x40, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0xCF, 0xFF, 0xFF, 0x3F, 0x07, 0x87, 0xE3, 0x73
|
||||||
|
, 0x79, 0xFD, 0xFE, 0xFF, 0xDF, 0xFF, 0xCE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1F, 0x1F, 0x07, 0x02, 0x01, 0x01, 0x00, 0x00
|
||||||
|
, 0x00, 0x07, 0x0F, 0x0F, 0x0E, 0x06, 0x1E, 0x7C, 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map32x32_["\347\273\252"] = xu;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
font_init()
|
font_init()
|
||||||
{
|
{
|
||||||
init_8x8();
|
init_8x8();
|
||||||
|
init_32x32();
|
||||||
|
|
||||||
static uint8_t huan[] = {16, 16
|
static uint8_t huan[] = {16, 16
|
||||||
, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0xE0, 0xC0, 0xC4, 0xFE, 0xFC, 0xE8, 0xE0, 0xE0, 0x00, 0x00
|
, 0x00, 0x00, 0x00, 0x40, 0xE0, 0xE0, 0xE0, 0xC0, 0xC4, 0xFE, 0xFC, 0xE8, 0xE0, 0xE0, 0x00, 0x00
|
||||||
|
@ -108,30 +146,6 @@ namespace custom_font
|
||||||
};
|
};
|
||||||
font_map_["\350\277\216"] = ying;
|
font_map_["\350\277\216"] = ying;
|
||||||
|
|
||||||
static uint8_t jiu[] = {32, 32
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0xF8, 0xF8, 0xF0, 0xF0
|
|
||||||
, 0xE0, 0x80, 0x00, 0x00, 0x60, 0xB0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x0C, 0x1C, 0x1C, 0x1E, 0xCE, 0xF6, 0xEF, 0x77, 0x77, 0xBF, 0xFB, 0xFB, 0xFB
|
|
||||||
, 0xF1, 0xB1, 0xC1, 0xE0, 0xF8, 0xFF, 0xFF, 0x77, 0x7C, 0x38, 0x18, 0x1A, 0x07, 0x07, 0x07, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE1, 0xC7, 0x4F, 0x0F, 0xFF, 0xFF, 0x3F, 0x63, 0xE3
|
|
||||||
, 0xE1, 0xFD, 0x3F, 0x0F, 0xE3, 0xFD, 0x3F, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x06, 0x1F, 0x1F, 0x00, 0x00, 0x03
|
|
||||||
, 0x03, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x0E, 0x0F, 0x0F, 0x06
|
|
||||||
};
|
|
||||||
font_map_["\345\260\261"] = jiu;
|
|
||||||
|
|
||||||
static uint8_t xu[] = {32, 32
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF8, 0xF8, 0xF0, 0xE0, 0x80
|
|
||||||
, 0x00, 0x00, 0x01, 0x83, 0xFF, 0xFF, 0xFF, 0xCC, 0xC0, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x18, 0x7C, 0x7E, 0x3E, 0xDF, 0xFF, 0xFF, 0xFF, 0xF3, 0x81, 0x81, 0x83
|
|
||||||
, 0xC7, 0xCF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF7, 0x7B, 0x7F, 0x7F, 0x7F, 0x77, 0x73, 0x70, 0x40, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0xCF, 0xFF, 0xFF, 0x3F, 0x07, 0x87, 0xE3, 0x73
|
|
||||||
, 0x79, 0xFD, 0xFE, 0xFF, 0xDF, 0xFF, 0xCE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1F, 0x1F, 0x07, 0x02, 0x01, 0x01, 0x00, 0x00
|
|
||||||
, 0x00, 0x07, 0x0F, 0x0F, 0x0E, 0x06, 0x1E, 0x7C, 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
|
||||||
font_map_["\347\273\252"] = xu;
|
|
||||||
|
|
||||||
static uint8_t right[] = {16, 16
|
static uint8_t right[] = {16, 16
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x04, 0x00
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3C, 0x04, 0x00
|
||||||
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x1C, 0x30, 0x78, 0x0F, 0x01, 0x00, 0x00, 0x00
|
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x1C, 0x30, 0x78, 0x0F, 0x01, 0x00, 0x00, 0x00
|
||||||
|
@ -648,6 +662,126 @@ namespace custom_font
|
||||||
};
|
};
|
||||||
font_map_["\351\222\237"] = zhong1;
|
font_map_["\351\222\237"] = zhong1;
|
||||||
|
|
||||||
|
static uint8_t cai3[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0x00, 0x08, 0x70, 0x62, 0x02, 0x02, 0x9A, 0xB2, 0x02, 0x82, 0x62, 0x3B, 0x0F, 0x03
|
||||||
|
, 0x00, 0x00, 0x81, 0x41, 0x61, 0x31, 0x19, 0x0F, 0xFF, 0xFF, 0x03, 0x0D, 0x31, 0x61, 0xC1, 0xC1
|
||||||
|
};
|
||||||
|
font_map_["\351\207\207"] = cai3;
|
||||||
|
|
||||||
|
static uint8_t tu[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x21, 0x19, 0x8F, 0x8F, 0xC9, 0xE9, 0x39, 0x19, 0x01, 0x01, 0xFF
|
||||||
|
, 0x00, 0x00, 0x00, 0xFF, 0x46, 0x42, 0x43, 0x51, 0x53, 0x54, 0x75, 0x61, 0x43, 0x42, 0x42, 0xFF
|
||||||
|
};
|
||||||
|
font_map_["\345\233\276"] = tu;
|
||||||
|
|
||||||
|
static uint8_t shi1[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0x00, 0xC0, 0x3C, 0x1C, 0x10, 0x10, 0xF1, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x80
|
||||||
|
, 0x00, 0x00, 0x01, 0x81, 0x81, 0x41, 0x61, 0x39, 0x0F, 0x03, 0x07, 0x19, 0x31, 0x61, 0xC1, 0x81
|
||||||
|
};
|
||||||
|
font_map_["\345\244\261"] = shi1;
|
||||||
|
|
||||||
|
static uint8_t bai[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0xFE, 0x02, 0xFA, 0xFA, 0x02, 0xFE, 0x80, 0x60, 0xFE, 0x17, 0x10, 0x10, 0xF0, 0x10
|
||||||
|
, 0x00, 0x00, 0xCF, 0x70, 0x1F, 0x0B, 0x18, 0x77, 0x21, 0x80, 0x40, 0x27, 0x38, 0x6F, 0xC1, 0xC0
|
||||||
|
};
|
||||||
|
font_map_["\350\264\245"] = bai;
|
||||||
|
|
||||||
|
static uint8_t ying4[] = {16, 16
|
||||||
|
, 0x04, 0x84, 0xE4, 0x5C, 0x44, 0xC4, 0x00, 0xF2, 0x92, 0x92, 0xFE, 0x92, 0x92, 0xF2, 0x02, 0x00
|
||||||
|
, 0x02, 0x01, 0x7F, 0x10, 0x10, 0x3F, 0x80, 0x8F, 0x54, 0x24, 0x5F, 0x44, 0x84, 0x87, 0x80, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\347\241\254"] = ying4;
|
||||||
|
|
||||||
|
static uint8_t jian4[] = {16, 16
|
||||||
|
, 0x00, 0x80, 0x60, 0xF8, 0x07, 0x80, 0x60, 0x1C, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x00, 0x00
|
||||||
|
, 0x01, 0x00, 0x00, 0xFF, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFF, 0x02, 0x02, 0x02, 0x02, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\344\273\266"] = jian4;
|
||||||
|
|
||||||
|
static uint8_t cuo[] = {16, 16
|
||||||
|
, 0x40, 0x30, 0xEF, 0x24, 0x64, 0x48, 0x48, 0x7F, 0x48, 0x48, 0x48, 0x7F, 0x48, 0x48, 0x40, 0x00
|
||||||
|
, 0x01, 0x01, 0x7F, 0x21, 0x11, 0x00, 0xFF, 0x49, 0x49, 0x49, 0x49, 0x49, 0xFF, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\351\224\231"] = cuo;
|
||||||
|
|
||||||
|
static uint8_t wu4[] = {16, 16
|
||||||
|
, 0x40, 0x42, 0xCC, 0x00, 0x00, 0x80, 0x9E, 0x92, 0x92, 0x92, 0x92, 0x92, 0x9E, 0x80, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x7F, 0x20, 0x94, 0x84, 0x44, 0x24, 0x14, 0x0F, 0x14, 0x24, 0x44, 0x84, 0x84, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\350\257\257"] = wu4;
|
||||||
|
|
||||||
|
static uint8_t huan3[] = {16, 16
|
||||||
|
, 0x20, 0x30, 0xAC, 0x63, 0x30, 0x02, 0x26, 0x2A, 0xE2, 0x26, 0x29, 0x21, 0x29, 0x25, 0x00, 0x00
|
||||||
|
, 0x22, 0x67, 0x22, 0x12, 0x52, 0x21, 0x99, 0x87, 0x4D, 0x55, 0x25, 0x55, 0x4D, 0x81, 0x81, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\347\274\223"] = huan3;
|
||||||
|
|
||||||
|
static uint8_t chong[] = {16, 16
|
||||||
|
, 0x00, 0x02, 0x0C, 0xC0, 0x00, 0xF0, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00
|
||||||
|
, 0x02, 0x02, 0x7F, 0x00, 0x00, 0x0F, 0x04, 0x04, 0x04, 0xFF, 0x04, 0x04, 0x04, 0x0F, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\206\262"] = chong;
|
||||||
|
|
||||||
|
static uint8_t qu1[] = {16, 16
|
||||||
|
, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x12, 0x22, 0x42, 0x82, 0x42, 0x22, 0x1A, 0x02, 0x02, 0x00, 0x00
|
||||||
|
, 0x00, 0x7F, 0x40, 0x40, 0x48, 0x44, 0x42, 0x41, 0x40, 0x41, 0x42, 0x4C, 0x40, 0x40, 0x40, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\214\272"] = qu1;
|
||||||
|
|
||||||
|
static uint8_t hao[] = {16, 16
|
||||||
|
, 0x88, 0xA8, 0xA8, 0xFF, 0xA8, 0xA8, 0x88, 0x00, 0x44, 0x44, 0xFC, 0x22, 0x23, 0x22, 0x00, 0x00
|
||||||
|
, 0x20, 0x18, 0x06, 0xFF, 0x02, 0x0C, 0x00, 0x04, 0x04, 0x04, 0x7F, 0x82, 0x82, 0x82, 0xF2, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\350\200\227"] = hao;
|
||||||
|
|
||||||
|
static uint8_t jin4[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0x00, 0xFE, 0x22, 0x22, 0x22, 0x22, 0x22, 0xE2, 0x22, 0x22, 0x7E, 0x00, 0x00, 0x00
|
||||||
|
, 0x10, 0x08, 0x06, 0x01, 0x10, 0x10, 0x22, 0x22, 0x44, 0x80, 0x01, 0x02, 0x04, 0x08, 0x08, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\260\275"] = jin4;
|
||||||
|
|
||||||
|
static uint8_t cheng[] = {16, 16
|
||||||
|
, 0x24, 0x24, 0xA4, 0xFE, 0x23, 0x22, 0x00, 0x3E, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3E, 0x00, 0x00
|
||||||
|
, 0x08, 0x06, 0x01, 0xFF, 0x01, 0x06, 0x40, 0x49, 0x49, 0x49, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\347\250\213"] = cheng;
|
||||||
|
|
||||||
|
static uint8_t xu4[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x14, 0x15, 0x56, 0x94, 0x54, 0x34, 0x14, 0x04, 0x04, 0x00
|
||||||
|
, 0x40, 0x30, 0x0F, 0x00, 0x01, 0x01, 0x01, 0x41, 0x81, 0x7F, 0x01, 0x01, 0x01, 0x05, 0x03, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\272\217"] = xu4;
|
||||||
|
|
||||||
|
static uint8_t tui[] = {16, 16
|
||||||
|
, 0x40, 0x40, 0x42, 0xCC, 0x00, 0x00, 0xFF, 0x49, 0x49, 0xC9, 0x49, 0x49, 0x7F, 0x80, 0x00, 0x00
|
||||||
|
, 0x00, 0x40, 0x20, 0x1F, 0x20, 0x40, 0x5F, 0x48, 0x44, 0x40, 0x41, 0x42, 0x45, 0x58, 0x40, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\351\200\200"] = tui;
|
||||||
|
|
||||||
|
static uint8_t chu1[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0xFF, 0x40, 0x40, 0x40, 0x40, 0xFC, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x40, 0xFC, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\207\272"] = chu1;
|
||||||
|
|
||||||
|
static uint8_t yi3[] = {16, 16
|
||||||
|
, 0x00, 0x00, 0xE2, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xFE, 0x00, 0x00, 0x00, 0x00
|
||||||
|
, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\345\267\262"] = yi3;
|
||||||
|
|
||||||
|
static uint8_t yun[] = {16, 16
|
||||||
|
, 0x40, 0x40, 0x42, 0xCC, 0x00, 0x20, 0x22, 0x22, 0xA2, 0x62, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00
|
||||||
|
, 0x00, 0x40, 0x20, 0x1F, 0x20, 0x44, 0x4E, 0x45, 0x44, 0x44, 0x44, 0x45, 0x46, 0x4C, 0x40, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\350\277\220"] = yun;
|
||||||
|
|
||||||
|
static uint8_t xing[] = {16, 16
|
||||||
|
, 0x00, 0x10, 0x88, 0xC4, 0x33, 0x00, 0x40, 0x42, 0x42, 0x42, 0xC2, 0x42, 0x42, 0x42, 0x40, 0x00
|
||||||
|
, 0x02, 0x01, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
font_map_["\350\241\214"] = xing;
|
||||||
|
|
||||||
}
|
}
|
||||||
~font_init()
|
~font_init()
|
||||||
{}
|
{}
|
||||||
|
@ -672,6 +806,15 @@ namespace custom_font
|
||||||
|
|
||||||
return custom_font::question;
|
return custom_font::question;
|
||||||
}
|
}
|
||||||
|
else if(fs == FONT_SIZE_32)
|
||||||
|
{
|
||||||
|
if(font_map32x32_.count(str))
|
||||||
|
{
|
||||||
|
return font_map32x32_[str];
|
||||||
|
}
|
||||||
|
|
||||||
|
return custom_font::question32x32;
|
||||||
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue