바코드 리더 관련 정보는 정말 눈 씻고 뒤져봐도 안나온다.
이유는 간단하다.

바코드 리더 = 특화된 키보드

메뉴얼을 읽어 보면
prefix / suffix가 존재하고, 이에 따라서 처리방법이 조금씩 달라지지만,
PS/2 방식의 바코드 리더의 경우에는 실질적으로 키보드와 다를바가 전혀없다.
그렇게 때문에, 바코드 리더 프로그래밍이란 것은 실질적으로 존재하지 않는 것이다.


prefix - 접두어(잘 쓰이는지는 모르겠지만, STX 가 있는것 봐서는 RS-232 시리얼 통신 표준을 맞추는데 사용하는 것 같다)
suffix - 접미어 (예를 들어 엔터 몇번이냐, 엔터를 어떤걸로 - CR/LF - 처리하냐 정도의 차이)


[링크 : http://www.iepos.com/support/symbol/ls1004userprogrammermanual.pdf]

'모종의 음모 > 바코드 리더' 카테고리의 다른 글

MFC 에서 바코드리더 메시지, 버츄얼 키  (0) 2009.06.17
바코드 폰트 (code 39)  (0) 2009.06.15
barcode reader - PS/2 type  (2) 2009.06.12
Posted by 구차니
키보드로 입력할 때에는
메시지는 WM_KEYDOWN / WM_KEYUP 와 버츄얼 키는 VK_RETURN이 입력된다.

하지만 바코드로 입력할 때에는
메시지는 WM_CHAR / 버츄얼 키는 VK_RETURN 이 입력된다.


어떤 차이로 인해서 이렇게 다르게 인식을 하는지는 모르겠다...

[참고 : http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx]
[참고 : http://web.lge.cn:8000/system/api/1241/page/3]

'모종의 음모 > 바코드 리더' 카테고리의 다른 글

바코드 리더 관련 프로그래밍 힌트  (0) 2009.06.22
바코드 폰트 (code 39)  (0) 2009.06.15
barcode reader - PS/2 type  (2) 2009.06.12
Posted by 구차니
Download the Code 39 truetype font package.
다운로드는 위에 링크를 클릭해주세요

Tips for Using the Barcode Font

  • Be sure to add an asterisk * character before and after your text. Example *YOURTEXTHERE*
  • Microsoft Word may adjust the character spacing and make the barcode unreadable. You may have more luck with Wordpad, found in the Windows Start Menu under Programs > Accessories.


폰트를 다운로드 받으면 두개가 나오는데, Free 3 of 9 Extended알파벳까지 적용된 폰트이다.
위에 빨간색 했듯이, 반드시 문자열 앞뒤로 *를 쳐주어야 한다.

개인적으로 16 사이즈로 출력해서 사용중
(작아 보인다고 32 포인트 했더니 스캐너가 인식 못하는 불상사가 -ㅁ-!)

[링크 : http://www.barcodesinc.com/free-barcode-font/]
Posted by 구차니
Posted by 구차니
LS1004-I100 이라는 모델의 PS/2 타입 바코드 핸드 스캐너를 사용할 일이 생겨서 데이터 시트를 찾는데..
영 안나온다.. OTL(요즘 따라 왜케 안나오는 일만 하는거지 .. OTL)

일단 데이터 포맷을 알아야 하기에 찾아봐도 안나오고
그냥 무책임하게 키보드 처럼 읽으면 되요~ 라고 하는 센스 ㄱ-

아무튼! 메모장과 frhed를 동원해서 캡쳐를 해보니

시리얼 넘버+ 엔터 + 엔터 이런식으로 날아 온다.
0x0D 0x0A 가 CR/LF 로 엔터 부분이고(DOS 타입인가..)


CR/LF 가 두번 있으니, 메모장 상에서는 엔터 두번 친것 처럼 한번 띄워진다.
(엔터 한번에 다음줄, 또 한번에 다음줄 이니 실질적으로 한줄의 공백이 생긴다.)


문제는, 일부 프로그램에서 Ctrl-A, Ctrl-M 단축키가 지정되어 있을 경우
전부 선택후 엔터, 전부 선택후 엔터로 인식을 하므로 아무런 문장도 입력되지 않을 수 있다.
(네이트온의 경우 Ctrl-M으로 인해 미니대화/일반대화 오가면서 데이터 소실)

0.01mg 정도의 도움을 준 문서
[PDF] Built-in Laser Barcode Scanner PROGRAMMING MANUAL
Klaser Series에 대한 메뉴얼이다. 바코드만 잔뜩 -ㅁ-! (아마 설정 바꾸는데 사용하는 것 같다.)

1088kb...pdf LS1004 User-Programmer Manual
[링크 : http://www.iepos.com/support/symbol-manuals.htm]


Posted by 구차니
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

의 내용을 enumrate 하면 된다는데..
아무튼 아래 링크의 프로젝트는 .net에서 생성된 c++ 기반 프로그램인 듯 하다.

[링크 : http://www.naughter.com/enumser.html]
[링크 : http://forum.sysinternals.com/forum_posts.asp?TID=4544]




다른 방법
그냥 for문으로 뱅글뱅글 open하고 open 되면 close 하고
open 안되면 패스하면 되고~ 생각대로 하면되고~ 응?
단, 일부 시리얼(USB)의 경우에는 10번대 까지 점프하니
넉넉하게 포트는 20번 정도 까지 해주는 센스?



2010.02.03 추가


Posted by 구차니
모종의 음모/Notepad22009. 5. 8. 13:22


간만에 백신을 돌려보았더니
notepad2를 실행하는 부분의 레지스트리가 바이러스로 검출이 되도록 패턴이 수정되었다.


...
어떻게 피해가야 하나 -ㅁ-?
Posted by 구차니
알파벳과 유사한것들이 있기에 VFD의 CGRAM을 이용하여 제한된 문자열 내에서
여러나라말을 지원해야 할 경우가 생겨 잠시 노가다를...

일단 A B E K H O ... 이러한 것들은 알파벳과 유사하게 생겼고,
제한된 크기인 5x7 에서 표시 할 수 없으므로(혹은 식별이 힘든 문자들이므로)
알파벳과 동일하게 사용한다면 상당히 문자의 갯수를 줄일 수 있다.

목표치는 총 64개에 러시아어를 출력할 수 있도록 맵핑을 해야 하므로
96개중 32개(대소문자 포함한다면 각 문자별 16개)의 문자를 제외하면 된다.

А В Е К М Н О Р С Т У Х Ѕ І Ј
а в е к м н о р с т у х ѕ і ј

총 30개의 알파벳과 유사하게 생긴 러시아어이다.
테이블의 총 92개의 문자중에 30개 제외 되므로 64보다 작은 62개가 된다.


iso8859 cyrillic used character
1 А 0x0410
33 а 0x0430
 


 

2 Б 0x0411
34 б 0x0431
65 Ё 0x0401
79 ё 0x0451
3 В 0x0412
35 в 0x0432
66 Ђ 0x0402
80 ђ 0x0452
4 Г 0x0413
36 г 0x0433
67 Ѓ 0x0403
81 ѓ 0x0453
5 Д 0x0414
37 д 0x0434
68 Є 0x0404
82 є 0x0454
6 Е 0x0415
38 е 0x0435
69 Ѕ 0x0405
83 ѕ 0x0455
7 Ж 0x0416
39 ж 0x0436
70 І 0x0406
84 і 0x0456
8 З 0x0417
40 з 0x0437
71 Ї 0x0407
85 ї 0x0457
9 И 0x0418
41 и 0x0438
72 Ј 0x0408
86 ј 0x0458
10 Й 0x0419
42 й 0x0439
73 Љ 0x0409
87 љ 0x0459
11 К 0x041A
43 к 0x043A
74 Њ 0x040A
88 њ 0x045A
12 Л 0x041B
44 л 0x043B
75 Ћ 0x040B
89 ћ 0x045B
13 М 0x041C
45 м 0x043C
76 Ќ 0x040C
90 ќ 0x045C
14 Н 0x041D
46 н 0x043D
 


 

15 О 0x041E
47 о 0x043E
77 Ў 0x040E
91 ў 0x045E
16 П 0x041F
48 п 0x043F
78 Џ 0x040F
92 џ 0x045F
17 Р 0x0420
49 р 0x0440







18 С 0x0421
50 с 0x0441







19 Т 0x0422
51 т 0x0442







20 У 0x0423
52 у 0x0443







21 Ф 0x0424
53 ф 0x0444







22 Х 0x0425
54 х 0x0445







23 Ц 0x0426
55 ц 0x0446







24 Ч 0x0427
56 ч 0x0447







25 Ш 0x0428
57 ш 0x0448







26 Щ 0x0429
58 щ 0x0449







27 Ъ 0x042A
59 ъ 0x044A







28 Ы 0x042B
60 ы 0x044B







29 Ь 0x042C
61 ь 0x044C







30 Э 0x042D
62 э 0x044D







31 Ю 0x042E
63 ю 0x044E







32 Я 0x042F
64 я 0x044F










Posted by 구차니
typedef struct 
{
	WORD wFormatTag;
	WORD  nChannels;
	DWORD nSamplesPerSec;
	DWORD nAvgBytesPerSec;
	WORD  nBlockAlign;
	WORD  wBitsPerSample;
	WORD  cbSize;
} WAVEFORMATEX;

wFormatTag

Waveform-audio format type. Format tags are registered with Microsoft Corporation for many compression algorithms. A complete list of format tags can be found in the Mmreg.h header file. For one- or two-channel PCM data, this value should be WAVE_FORMAT_PCM. When this structure is included in a WAVEFORMATEXTENSIBLE structure, this value must be WAVE_FORMAT_EXTENSIBLE.


nChannels

Number of channels in the waveform-audio data. Monaural data uses one channel and stereo data uses two channels.


nSamplesPerSec

Sample rate, in samples per second (hertz). If wFormatTag is WAVE_FORMAT_PCM, then common values for nSamplesPerSec are 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz. For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.


nAvgBytesPerSec

Required average data-transfer rate, in bytes per second, for the format tag. If wFormatTag is WAVE_FORMAT_PCM, nAvgBytesPerSec should be equal to the product of nSamplesPerSec and nBlockAlign. For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.


nBlockAlign

Block alignment, in bytes. The block alignment is the minimum atomic unit of data for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM or WAVE_FORMAT_EXTENSIBLE, nBlockAlign must be equal to the product of nChannels and wBitsPerSample divided by 8 (bits per byte). For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.

Software must process a multiple of nBlockAlign bytes of data at a time. Data written to and read from a device must always start at the beginning of a block. For example, it is illegal to start playback of PCM data in the middle of a sample (that is, on a non-block-aligned boundary).


wBitsPerSample

Bits per sample for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8 or 16. For non-PCM formats, this member must be set according to the manufacturer's specification of the format tag. If wFormatTag is WAVE_FORMAT_EXTENSIBLE, this value can be any integer multiple of 8 and represents the container size, not necessarily the sample size; for example, a 20-bit sample size is in a 24-bit container. Some compression schemes cannot define a value for wBitsPerSample, so this member can be 0.


cbSize

Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure. This information can be used by non-PCM formats to store extra attributes for the wFormatTag. If no extra information is required by the wFormatTag, this member must be set to 0. For WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is ignored. When this structure is included in a WAVEFORMATEXTENSIBLE structure, this value must be at least 22.


Remarks

An example of a format that uses extra information is the Microsoft Adaptive Delta Pulse Code Modulation (MS-ADPCM) format. The wFormatTag for MS-ADPCM is WAVE_FORMAT_ADPCM. The cbSize member will typically be set to 32. The extra information stored for WAVE_FORMAT_ADPCM is coefficient pairs required for encoding and decoding the waveform-audio data.



[링크 : http://msdn.microsoft.com/en-us/library/ms713497(VS.85).aspx]

'모종의 음모 > noise cancelling' 카테고리의 다른 글

WAVE format  (0) 2009.08.12
Active Noise Control - ANC  (0) 2009.08.12
음속  (0) 2009.03.30
waveInOpen() waveOutOpen()  (0) 2009.03.26
sampling rate 관련 의문  (2) 2009.03.26
Posted by 구차니
소리의 속도로 항상 고정된 값이 아닌 매질의 영향을 받는다.
1기압, 0도 에서 331.5m/s 이고 1도당 0.6m/s 증가


[링크  : http://enc.daum.net/dic100/contents.do?query1=b17a2486a]




뜬금없이 이녀석이 왜 있냐면은~!
sampling시에는 샘플링이 완료 된 후 데이터가 넘겨지기 때문에,
과거 시점의 파장이 녹음되어 있게 된다. 그렇기에 빛의 속도에 근접하게 전송되는 전기신호에 의해서
처리속도, sampling 속도 등을 감안해서 어느정도 거리에서 출력을 해주는 약간의 보정이 필요 하지 않을까? 라는
생각이 들어서 찾아 본것이다. (머 그렇다고 -ㅁ-)


44050Hz(=44kHz)에서 샘플링시 1회 샘플링 할 동안 소리가 진행하는 거리

1/44050*331.5(m) = 0.0075255391600454029511918274687855m
7.5255391600454029511918274687855mm >= 7.52mm

만약
플레이시에 딜레이가 없고,
반대파장을 만들어 내는데 시간이 걸리지 않는다고 가정하고,
전기가 흐르는 속도가 무한대라서 전파속도가 0라고 가정하고,
순수하게 녹음에 대한 딜레이만 존재한다고 할 때 스피커와 마이크는 대략 1cm 정도의 간격이 필요 하다
(다르게 말하면, 변환에 필요한 시간, 신호전달 시간을 감안하면 1cm 이상의 거리를 벌려놔야지
반대파장으로 소리가 중화될 수 있을 것으로 보인다)

'모종의 음모 > noise cancelling' 카테고리의 다른 글

Active Noise Control - ANC  (0) 2009.08.12
WAVEFORMATEX structure  (0) 2009.04.01
waveInOpen() waveOutOpen()  (0) 2009.03.26
sampling rate 관련 의문  (2) 2009.03.26
wav format 관련 문서  (0) 2009.03.26
Posted by 구차니