📄 ledcontrol.cpp
字号:
#include "ledcontrol.hpp"#include <stdio.h>#include <time.h>#include <unistd.h>#include "ledeffect.h"LedCtrl::LedCtrl(const char* devfile, int bps){ buffer = NULL; memset(bufdisp,0,sizeof(bufdisp)); pthread_mutex_init(&mutex,NULL); bRuning = FALSE; drv = ledrv_init(devfile,bps);}LedCtrl::~LedCtrl(){ void * ret; //pthread_join(tid, &thread); pthread_mutex_destroy(&mutex); ledrv_destory(drv);}void *thread_function(void *arg) { LedCtrl* ctrl = (LedCtrl*)arg; { sleep(1); switch(ctrl->m_mode) { case TOP2BOTTOM: from_top2bottom(ctrl->drv,ctrl->bufdisp,ctrl->m_speed); break; case BOTTOM2TOP: from_bottom2top(ctrl->drv,ctrl->bufdisp,ctrl->m_speed); break; case LEFT2RIGHT: from_left2right(ctrl->drv,ctrl->bufdisp,ctrl->m_speed); break; case RIGHT2LEFT: from_right2left(ctrl->drv,ctrl->bufdisp,ctrl->m_speed); break; case STILL: static_draw(ctrl->drv, ctrl->bufdisp); break; case BLINK: flash_draw(ctrl->drv, ctrl->bufdisp,ctrl->m_speed); break; } pthread_mutex_lock(&ctrl->mutex); // printf("Thread says hi!\n"); if(!ctrl->bRuning) { pthread_mutex_unlock(&ctrl->mutex); return NULL; } pthread_mutex_unlock(&ctrl->mutex); sleep(1); } ctrl->bRuning = 0; ctrl->m_infoidx = -1; return NULL;}/* This class needs pthreads -1 buffer not inited; -2 led currently in use. Q:Block the caller's thread? */int LedCtrl::show(int idx,enum modes mode, int speed){ int nRet = TRUE; if(!buffer) return -1; void * data; if(bRuning) { //current thread runing, wait for //pthread_join(thread, &data); return -2; } nRet = buffer->getcontentUCS2_byIndex(idx,bufdisp,512); if(nRet) return -3; bRuning = 1; m_mode = mode; m_speed = speed; m_infoidx = idx; //bRet = buffer->getcontentUCS2_byIndex(idx,bufdisp,512); int ret = pthread_create(&thread,NULL,thread_function,this); if(ret != 0) { printf("%s","create failed "); bRuning = 0; } return 0;}/* original flush, can be impl as breakshow+show; breakshow stop the current display;*/void LedCtrl::breakshow(){ void* data; //stop the display thread; pthread_mutex_lock(&mutex); //bRuning = FALSE; drv->bStop_show = TRUE; pthread_mutex_unlock(&mutex); pthread_join(thread, &data); m_infoidx = -1; return;}void LedCtrl::clear(){ breakshow(); m_infoidx = -1; ledrv_clear(drv); ledrv_flush(drv);}int LedCtrl::getScreenInfo() { return m_infoidx;}LedBuffer* LedCtrl::setBuffer(LedBuffer* newBuf){ LedBuffer* oldbuf = buffer; buffer = newBuf; return oldbuf;}/* @ true */BOOL LedCtrl::flash(int idx,enum speeds){ return TRUE;}BOOL LedCtrl::selftest(){ memset(drv->buffer,1,sizeof(drv->buffer)); ledrv_flush(drv); return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -