⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ledcontrol.cpp

📁 是一个键盘测试程序
💻 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 + -