디바이스 드라이버 수정 중인데 (segment.c)
ssize_t segment_write(struct file *inode, const char *gdata, size_t length, loff_t *off_what)
{
unsigned char data[6];
unsigned char digit[6]={0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
unsigned int i,j,ret;
unsigned char num[7];
unsigned char x;
unsigned int y,z;
unsigned int display=0;
unsigned int count=0,temp1,temp2;
// 사용자 메모리 gdata를 커널 메모리 num으로 n만큼 복사
ret=copy_from_user(&num,gdata,6);
for(z=0;z<6;z++){
if(num[5-z]=='a'){
y=0xa;
}
else if(num[5-z]=='b'){
y=0xb;
}
else if(num[5-z]=='c'){
y=0xc;
}
else if(num[5-z]=='d'){
y=0xd;}
else if(num[5-z]=='e'){
y=0xe;}
else if(num[5-z]=='f'){
y=0xf;}
data[z]=Getsegmentcode(y);
}
// if(num!=0) { // num이 0이 아닐때
//while(display<300) {
/*data[5]=Getsegmentcode(count/100000);
temp1=count%100000;
data[4]=Getsegmentcode(temp1/10000);
temp2=temp1%10000;
data[3]=Getsegmentcode(temp2/1000);
temp1=temp2%1000;
data[2]=Getsegmentcode(temp1/100);
temp2=temp1%100;
data[1]=Getsegmentcode(temp2/10);
data[0]=Getsegmentcode(temp2%10);*/
// data[5]=Getsegmentcode(y);
// data[4]=Getsegmentcode(0xa);
// data[3]=Getsegmentcode(0xa);
// data[2]=Getsegmentcode(0xb);
// data[1]=Getsegmentcode(0xb);
// data[0]=Getsegmentcode(0xc);
//
for(j=0;j<17;j++) {
for(i=0;i<6;i++) {
*segment_grid = digit[i];
*segment_data = data[i];
mdelay(1);
}
}
// count++
//display++;
//}
//*segment_grid = ~digit[0];
//*segment_data = 0;
return length;
}
이렇게 수정을 했는데
7세그먼트 6개중에 그리드가 가리키고 세그먼트 데이터에 초기화 되어있는 슬롯에만 불이 들어옵니다.
제가 의도하는 바는 슬롯 여러개가 동시에 들어오게 하고 싶은데 어떻게 해야 할까요 ?
예를들어 1 을 입력하면 grid[0]에 1이 들어오고
2를 그상태에서 추가로 입력하면 grid[1]에 1이 들어오고 grid[0]에는 2가 들어오는 식입니다.
어떻게 2개 이상의 세그먼트를 컨트롤 할 수 있을까요
|