第一张走纸命令须等待升降台到位事件

This commit is contained in:
gb 2024-01-09 15:32:03 +08:00
parent e3a746c49f
commit d02a40e6dd
2 changed files with 23 additions and 5 deletions

View File

@ -17,9 +17,11 @@ static std::string device_opt_json[] = {
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// scanner_hw
scanner_hw::scanner_hw()
scanner_hw::scanner_hw() : mb_events_("motorboard-event")
{
set_where("hardware");
mb_events_.enable_wait_log(false);
init();
}
scanner_hw::~scanner_hw()
@ -302,6 +304,8 @@ void scanner_hw::thread_image_capture(void)
PACKIMAGE img;
safe_fifo<int> avail_mem("v4l2-mem");
int used_v4l2_mem = 0, times = 0;
std::pair<int, int> mbev;
auto put_v4l2_mem = [&](BEFORE_DESTROY_PARAM) -> BEFORE_DESTROY_RET
{
int ind = (int)(long)param;
@ -314,8 +318,10 @@ void scanner_hw::thread_image_capture(void)
memset(&img, 0, sizeof(img));
motor_->clear_error();
camera_->start();
img_controller_->capture();
motor_->start();
while(scanning_) // auto scan cycle ...
mb_events_.take(mbev, true);
while(scanning_ && mbev.first == MOTOR_BORD_EVENT_LIFTER_READY) // auto scan cycle ...
{
motor_->pick_paper();
@ -324,9 +330,14 @@ void scanner_hw::thread_image_capture(void)
{
size_t size = 0;
int ind = -1;
void* frame = camera_->read_frame(1000, size, ind);
dyn_mem_shared_ptr mem = new dyn_mem_shared(frame, size, put_v4l2_mem, (void*)ind);
void* frame = camera_->read_frame(10 * 1000, size, ind);
dyn_mem_shared_ptr mem = nullptr;
if(!frame)
{
break;
}
mem = new dyn_mem_shared(frame, size, put_v4l2_mem, (void*)ind);
used_v4l2_mem++;
img.pos.paper_ind++;
img.pos.status = IMG_STATUS_OK;
@ -490,7 +501,12 @@ int scanner_hw::open(std::function<IMAGE_HANDLER_PROTO> image_handler)
camera_.reset(new GVideoISP1());
camera_->open(cis_length_, 1000);
motor_.reset(new MotorBoard(nullptr));
auto cb = [this](int ev, unsigned int data) -> void
{
mb_events_.save(std::make_pair(ev, data), true);
};
mb_events_.clear();
motor_.reset(new MotorBoard(cb));
motor_->set_double_inpect(double_chk_);
motor_->set_staple_inpect(staple_chk_);
motor_->set_screw_inpect(screw_chk_);

View File

@ -10,6 +10,7 @@
#include <base/data.h>
#include <memory>
#include <map>
#include <utility>
// image handler callback proto
//
@ -33,6 +34,7 @@ class scanner_hw : public sane_opt_provider
std::unique_ptr<GVideoISP1> camera_;
std::unique_ptr<MotorBoard> motor_;
std::unique_ptr<std::thread> scan_thread_;
safe_fifo<std::pair<int, int>> mb_events_;
enum
{