2010년 10월 14일 목요일

specification of my machine

* slide switch

- http://www.syswitch.com/zboard.php?id=product&page=1&sn1=&divpage=1&category=6&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=26

- http://www.djswitch.co.kr/product/k_product_slide_detail.asp?c3_code=130208

- 코원 D2에 쓰인 슬라이드 버튼이다. 원래 기존의 슬라이드 버튼에 스프링이 달려 있어서 장력이 발생한다. 사용하기 무지하게 편하고 개발자가 고려해야할 버튼 상태에 제약을 주어서 개발에 용이하다. 전원과 홀드 스위치에 고려해 볼만하다.

* joystick nevigator

- Thumb joystick http://www.sparkfun.com/commerce/product_info.php?products_id=9032

- 두가지 종류의 조이스틱이 판매되고 있는데 다른것들은 다 동일하고 가운에 누름 버튼이 추가된것과 아닌것이 존재한다. mp3의 경우 L:이전, R:다음, U:크게, D:작게, 동작(멈춤)으로 구성하면 딱인거 같다.

* trackballer

- http://www.sparkfun.com/commerce/product_info.php?products_id=9320

- 이건 그냥 관련이 없지만 사용해 보고 싶어서 넣어 두었다. 그냥 허영이다. 엔지니어의 허영....

2010년 10월 13일 수요일

[작업중] Tesseract 3.0 해석

1. TesseractRect(const unsigned char *imagedata, int byte_per_pixel, int bytes_per_line, int left, int top, int width, int height);

1.1. 유의 사항

- 단독으로 사용가능하고, 24bits, 8bits, 32bits, 1 bit를 갖는 화소에 모두 적용 가능하지만, pallete를 참조하는 방식의 8bits 화소에 대해서는 적용이 불가능함.

- 1bit 화소에 대해서 첫번째 바이트의 MSB가 첫번째 화소값이 되도록 즉 littel endian으로 되어 있음. (이거 전면 수정해야 할것 같음. 아니면 옵션을 주던가.) imagedata가 바이트 단위로 padding되어 있어야 함( 내 것은 4byte 단위로 padding 되어 있다). 그리고 bytes_per_pixel = 0 으로 되어 있어야 함.

- 좀더 세세한 사항은 SetImage, SetRectangle, Recognize, 와 Get*Text라는 함수를 좀더 들여다 보자.

1.2. 기능

- 영상에서 네모 영역을 인식하고 문자열을 되돌려 준다.

2. SetImage(const unsigned char *imagedata, int width, int height, int bytes_per_pixel, int bytes_per_line)

2.1. 주의 사항

- Tesseract가 Recoginize을 하기 위한 이미지 버퍼를 복사하지 않고 참조하기 위한 설정을 한다.

- imagedata는 Recognize를 수행한 후 메모리 반환될 것이다.

2010년 10월 10일 일요일

new scheme

* Helix's mp3-decoder in Thumb2 mode
* LPC1768 breakout board
- Kicad's library
- design footprint
* Purchase LPC1768 from ICBANK.COM
* DAC board


2010년 10월 4일 월요일

arm inline assembly using gcc

__arm__ __volatile__ ( asms : output : input : clubber );
__arm__ __volatile__ ( asms : output : input );
__arm__ __volatile__ ( asms : output : : clubber );

* asms내의 모든 명령어는 " "사이에 있어야 한다.
* asms내의 명령어 간의 구분은 ;이나 \n으로 구분한다.
* output에서 시작해 input으로 오퍼랜드가 %0, %1, ...등등으로 매겨진다.
* ouput, input 변수들은 constraints와 변수명이 쉼표로 구분되어 있다.
- "=" : 오퍼랜드가 쓰기 전용
- "r" : 일반 레지스터 사용 오퍼랜드
- "&" : earlyclobber 오퍼랜드를 나타내고 input오퍼랜드를 사용하는 명령이 끝나기 전에 변경된다는 것을 의미한다. 그래서 input오퍼랜드나 메모리 어드레스의 일부를 나타내는 레지스터엔 못쓴다. gcc는 input변수가 다 사용되고 나면 output에 사용된다고 가정하기 때문에 input에 사용된 변수가 output과 같게 되고 또 output이 input보다 먼저 사용되는 경우가 발생할 수 있다. 이런 경우를 막기 위해 output에 사용된 변수가 input이 모두 사용되기 전에 변경될 수도 있다고 알려줘야만 input과 output이 같아져 생기는 에러를 막을 수 있다.

필요한 일들

* mp3 decoder를 arm모드에서 thumb2모드로 변경하는 작업
* tesseract를 잘게 쪼개서 덩치를 줄이는 작업
- leptonica라고 하는 예전에 이미지 회전을 구현할때 참고했던 라이브러리의 바탕을 전부 차용하고 있다.
- 가장 큰 그림을 그릴 수 있게 해주는 파일은 api 디렉토리 밑에 있다. baseapi.cpp 와 tesseractmain.cpp을 분석하면 모든게 해결 될것 같다. 아마도...
- tesseract 라이브러리를 개략적으로 분석한 paper도 존재한다. 읽어 보도록 하자. http://tesseract-ocr.repairfaq.org/downloads/tesseract_overview.pdf
- http://tesseract-ocr.repairfaq.org/ 참고하자. v0.04 기반의 c/c++의 코드 분석에 관한 내용
- http://ieeexplore.ieee.org/iel5/4376968/4376969/04376991.pdf?tp=&isnumber=4376969
&arnumber=4376991 관련 논문

2010년 10월 3일 일요일

change a boot logo in linux kernel

* Drawing a new boot logo by image tool such a GIMP.
* Install "ppmquant" by
# sudo apt-get install netpbm
* Make the image with the depth of colors is below 224
# ppmquant 224 "logofile" > "newlogofile"
* Make the image with plain text
# pnmnoraw "newlogofile" > logo_linux_clut224.ppm
* copy logo_linux_clut224.ppm to "drivers/video/logo"