2015년 12월 30일 수요일

ghostscript, postscript, pdf printer

1. 포스트 스크립트

미국 어도비 시스템스사에서 개발한 페이지 기술 언어(PDL). 매끄럽고 섬세한 고품질 폰트와 도형의 이미지를 인쇄기에 인쇄하거나 화면에 표시할 수 있게 한다. 1984년에 이 언어의 명세가 공표되고, 1985년에 이 언어의 인터프리터를 내장한 레이저 인쇄기애플 컴퓨터 회사에서 발매되어 큰 호평을 받았으며, 그 후에 많은 인쇄기에 탑재되어 포스트스크립트는 업계 표준이 되었다. 한글이나 일본어 등의 텍스트도 기술할 수 있도록 언어 명세의 확장이 이루어졌다. 포스트스크립트의 특징은 출력 장치해상도에 의존하지 않고 영어와 비슷한 명령어를 사용하여 페이지의 배열을 제어하고, 아우트라인 폰트를 불러내어 그 크기를 조절할 수 있다는 점이다. 당초에는 페이지 인쇄기용으로 개발되었으나 인쇄기와 모니터 양쪽에서 사용할 수 있도록 기능이 확장된 디스플레이 포스트스크립트(Display PostScript)도 발매되었다. 또 MS-DOS매킨토시 등의 환경에서 가동하는 응용 소프트웨어 간의 파일 전송 형식으로서 밀봉형 포스트스크립트(ESP)가 널리 이용되고 있다.
[네이버 지식백과] 포스트스크립트 [PostScript] (IT용어사전, 한국정보통신기술협회)

>> PDF는 포스트 스크립트로 되어 있는 것으로 보임.. 포스트 스크립트 인터프리터가 탑재된 프린터가 보편화된 것으로 봐서, PDF파일을 포스트 스크립트로 변환하면 될것으로 예상된다.

2. PDF를 포스트 스크립트 언어로 변환하기?
>> 인쇄기에서 지원하는 언어?는 RTF/PCL/Postscript가 있는 걸로 되어있다.

3. PCL은 뭐지?
PCL 이란 Printer Command Language의 약자로, 휴렛 패커드사가 주축이 된
프린터 기술의 일종으로 PCL은 휴렛 팩커드사가 1984년 레이저 프린터와 PC
본체간 통신을 제어하기 위한 특수언어로 개발한 것이 시초입니다. 1996년
확정된 PCL6는 객체지향형 프로그래밍 기법을 적용, 모듈식 아키텍쳐 설
계와 글꼴 합성기술 등이 추가되어 복잡한 그래픽을 신속하게 인쇄하며 네
트워크 성능을 향상시킨 것이 특징입니다.

4. GhostScript ( http://pages.cs.wisc.edu/~ghost/doc/intro.htm )
Ghostscript is an interpreter for the PostScript (TM) language. A PostScript interpreter usually takes as input a set of graphics commands. The output is usually a page bitmap which is then sent to an output device such as a printer or display. PostScript is embedded in many printers.
Ghostscript has several main uses:
  1. Display a PostScript file (avoid killing trees).
  2. Display a PostScript file to decide if you really need to print it (reduce the number of trees killed).
  3. Print a PostScript file to a non-PostScript printer (kill more trees).
An example of a very simple PostScript file is:


 

2015년 12월 16일 수요일

[Android] 네트워크 상태 가져오기.


네트워크 상태를 가져오려면, broadcastreceiver를 사용하는 것이 좋다.
네트워크 연결/ 연결 아닌 상태를 감지해서 자동으로 상태변경이 필요하다.
* 코드에서 registerreceiver를 등록하는 경우, Manifest에 등록할 필요는 없다.

Broadcast ACTION : ConnectivityManager.CONNECTIVITY_ACTION


  // 레지스터 등록.
  private void registerReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        getApplicationContext().registerReceiver(mSystemSettingsChangeReceiver, filter);
  }
   private BroadcastReceiver mSystemSettingsChangeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
                updateConnectionInformation();
            }
        }
    };

 // UI Update
 private void updateConnectionInformation() {
 }


2015년 12월 8일 화요일

[Android] 언어 설정 변경하기.

안드로이드 언어 설정을 변경하기 위한 방법


1. system 권한이 있는 경우.


https://gist.github.com/xalexchen/4274535

private void updateLanguage(Locale locale) {
  Log.d("ANDROID_LAB", locale.toString());
try {
Object objIActMag, objActMagNative;
Class clzIActMag = Class.forName("android.app.IActivityManager");
Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
Method getDefault = clzActMagNative.getDeclaredMethod("getDefault");
// IActivityManager iActMag = ActivityManagerNative.getDefault();
objIActMag = getDefault.invoke(clzActMagNative);
// Configuration config = iActMag.getConfiguration();
Method getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
Configuration config = (Configuration) getConfiguration.invoke(objIActMag);
config.locale = locale;
Class[] clzParams = { Configuration.class };
Method updateConfiguration = clzIActMag.getDeclaredMethod(
"updateConfiguration", clzParams);
updateConfiguration.invoke(objIActMag, config);
} catch (Exception e) {
e.printStackTrace();
}
}

android.app.IActivityManager와 android.app.ActivityManagerNative를 사용하는 방법으로,
앱에서 세팅설정 자체를 변경할 수 있다.


2. system 권한이 없는 경우.


시스템 권한이 없는 경우에는 설정의 언어설정과 별도의 설정으로 구성할 수 있는데
Acitivty가 생성될 때마다 언어설정을 해주면 해당 언어의 XML로 UI 가 구성된다.

http://stackoverflow.com/questions/10751571/android-setting-language-in-app


String languageToLoad = "en"; 
  Locale locale = new Locale(languageToLoad); 
  Locale.setDefault(locale); 
  Configuration config = new Configuration(); 
  config.locale = locale; 
  getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 




2015년 10월 22일 목요일

[Android] SystemBar Disappeard


http://masashi-k.blogspot.kr/2013/09/hide-show-system-bar-of-android.html

시스템바를 없앨 수 있다.

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   
    RootTools.debugMode = true; // debug mode
   
    hideSystemBar();
  }
  private void showSystemBar() {
    String commandStr = "am startservice -n com.android.systemui/.SystemUIService";
    runAsRoot(commandStr);
  }
 
  private void hideSystemBar() {
    try {
      //REQUIRES ROOT
      Build.VERSION_CODES vc = new Build.VERSION_CODES();
      Build.VERSION vr = new Build.VERSION();
      String ProcID = "79"; //HONEYCOMB AND OLDER

      //v.RELEASE //4.0.3
      if (vr.SDK_INT >= vc.ICE_CREAM_SANDWICH) {
          ProcID = "42"; //ICS AND NEWER
      }
     
      String commandStr = "service call activity " + ProcID + " s16 com.android.systemui";
      runAsRoot(commandStr);
    } catch (Exception e) {
      // something went wrong, deal with it here
    }
  }
 

  private void runAsRoot(String commandStr) {
    try {
      CommandCapture command = new CommandCapture(0, commandStr);
      RootTools.getShell(true).add(command).waitForFinish();
    } catch (Exception e) {
      // something went wrong, deal with it here
    }
  }

}

2015년 10월 15일 목요일

Platform Key를 이용해서 App Signing

System App을 개발하기 위해서는, 권한이 필요하다.
AndroidManifest.xml에 다음과 같이 sharedUserId를 설정해주면 된다.
android:sharedUserId="android.uid.system"

이렇게 설정된 시스템앱은 해당 플래폼의 key로 Signing되어야 하는데,
이러한 과정을 적어보려고 한다.



1. Framework에서 키 생성하기.

안드로이드 프레임웍의 /build/target/product/security 디렉토리를 보면 다음과 같은 파일이 확인된다.


2. 명령어

$ openssl pkcs8 -inform DER -nocrypt  -in testkey.pk8 -out testkey.pem
$ openssl pkcs12 -export -in testkey.x509.pem -inkey testkey.pem -out testkey.p12 -password pass:android -name androiddebugkey
$ keytool -importkeystore -deststorepass android -destkeystore testkey.jks -srckeystore testkey.p12 -srcstoretype PKCS12 -srcstorepass android


3. SignKey for Emulator

http://www.xinotes.net/notes/note/1267/

Private key:
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCceAWSrA1dOBze
qmXsyKYAbjZIDG1yB7EgEb5Qhjqr4rVdAJrfcUbW8iAigMfNTXvbJiQ7ioBsJrNL
E3UjpJJoIkkE3AFJPnwKzxoFyHT2mwN7YDCdkHTSQoDha60qhzQ2GVHq9ypILQmy
BLGHXhKsmMGqdz1oALnq/eVtWL7Y6NoW+aNgCZw3qDSm3+23trRKBJ4Homn8zyxU
lvLPNtZN+Qo7jY80o7qrTPUzcasncZs7pYdUrQxT/BTh20XVHiNPu+k8m6Tt+c5U
JhNQ7FNWB79pov9KoH219+ogDQmmwbSeIUAvie0RkIk6q1qRgPFS6C+FpFdTz1/B
kHHF7sgnAgEDAoIBAGhQA7cdXj4laJRxmUiFxABJeYVdnkwFIMAL1DWu0cfseOir
EepLhI9MFWxV2ojeUpIZbX0HAEgZzNy3o20YYZrBhgM9VjDUUrHfZq6Fo08SAlJA
IGkK+IwsVeudHhxaIs67i/H6HDAeBnaty6+UDHMQgRxPfkVV0UdT7kjl1JCaMTTc
hXxr+oGsH5d5EHCPBfEU4v8BqOBSEgkUFJ1Y6Y5AQqbSe2nSZ6bKZpE8YY27Ipvq
BrZEN0j7SKcHKuJDm81DGfLrh3vOmW6U0ZWy7o9qv7INYXNDvtKUMQigXYYANKUp
KvveUSgKJ+ixfFP8Ye92j8mp+d/+16i4Wa7Wu5sCgYEAyCd3wu4wsRAu/8q1abL1
4/V8M95+dlfhJBl3H9VwUbsH+CP2VRQ9KYkaYdPwOb8hz1h8gqr74ASbEvz+ixMH
zI6zel07VDCew+6OUZOBiOxGc8p7SpZuCeDsL+GEZxkOMQ7PXUpDI/p8nx84eEJU
ZrHc2kv1VcpdAXLhtrpiicUCgYEAyCA3GDc282T3BXj061vqR2rpFaqhdlRy7S2B
tA3BJj2Qrh1bgQGq9agC+YWm3xO3F/lJ+phK2WHoFOpR+m6w7Q0jx/L/BYOlJD+4
h1zeZJKhLBQToodM1ZktcLGYFkSzNJeUImt5T1sErj5op9Ex97nZfYswCrl0GtGa
NIVKJPsCgYEAhW+lLJ7LILV0qocjm8yj7U5SzT7++Y/rbWZPao5K4SdapW1O42LT
cQYRlo1K0SoWijr9rHH9QAMSDKipsgyv3bR3pujSOCBp1/Re4Q0BBfLZoob83GRJ
W+tIH+utmhC0ILSKPjGCF/xTFL96+tbi7yE95t1OOTGTVkyWedGXBoMCgYEAhWrP
ZXokokNPWPtN8j1G2kdGDnHA+Y2h83OrzV6AxCkLHr49AKvHTnAB+65vP2J6D/uG
pxAx5kFFY0bhUZ8gngjChUyqA60YwtUlr5M+7bcWHWK3wa+IjmYeSyEQDth3eGUN
bEemNOdYdCmbGot2pSaQ/lzKsdD4EeEReFjcGKcCgYA+JeOt5WFENpv4LT+7P+j1
k3xvOZ9sJGuXRXk9HXzsJvRCnc5oScwqku6i5HjzG8gyNVZg1sQGbVbWWmcNtaS8
I3XalYAHYQyb8SGxlQP4ctKAN4j2Hbk1OHAMW84dfAQYQwFcBdaJTtMXQlbbX5Rh
x90wE4qFuIapx6IKOmDxRw==
-----END PRIVATE KEY-----

2.Certificate:
-----BEGIN CERTIFICATE-----
MIIEqDCCA5CgAwIBAgIJALOZgIbQVs/6MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYD
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4g
VmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UE
AxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe
Fw0wODA0MTUyMjQwNTBaFw0zNTA5MDEyMjQwNTBaMIGUMQswCQYDVQQGEwJVUzET
MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4G
A1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9p
ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI
hvcNAQEBBQADggENADCCAQgCggEBAJx4BZKsDV04HN6qZezIpgBuNkgMbXIHsSAR
vlCGOqvitV0Amt9xRtbyICKAx81Ne9smJDuKgGwms0sTdSOkkmgiSQTcAUk+fArP
GgXIdPabA3tgMJ2QdNJCgOFrrSqHNDYZUer3KkgtCbIEsYdeEqyYwap3PWgAuer9
5W1Yvtjo2hb5o2AJnDeoNKbf7be2tEoEngeiafzPLFSW8s821k35CjuNjzSjuqtM
9TNxqydxmzulh1StDFP8FOHbRdUeI0+76TybpO35zlQmE1DsU1YHv2mi/0qgfbX3
6iANCabBtJ4hQC+J7RGQiTqrWpGA8VLoL4WkV1PPX8GQccXuyCcCAQOjgfwwgfkw
HQYDVR0OBBYEFE/koLPdnLop9x1yh8Tnw48ghsKZMIHJBgNVHSMEgcEwgb6AFE/k
oLPdnLop9x1yh8Tnw48ghsKZoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UE
CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMH
QW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAG
CSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJALOZgIbQVs/6MAwGA1Ud
EwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBAFclUbjZOh9z3g9tRp+G2tZwFAAp
PIigzXzXeLc9r8wZf6t25iEuVsHHYc/EL9cz3lLFCuCIFM78CjtaGkNGBU2Cnx2C
tCsgSL+ItdFJKe+F9g7dEtctVWV+IuPoXQTIMdYT0Zk4u4mCJH+jISVroS0dao+S
6h2xw3Mxe6DAN/DRr/ZFrvIkl5+6bnoUvAJccbmBOM7z3fwFlhfPJIRc97QNY4L3
J17XOElatuWTG5QhdlxJG3L7aOCA29tYwgKdNHyLMozkPvaosVUz7fvpib1qSN1L
IC7alMarjdW4OZID2q4u1EYjLk/pvZYTlMYwDlE448/Shebk5INTjLixs1c=
-----END CERTIFICATE-----
> Privatekey를 platform.pem, Certificate 를 platform.x509.pem 파일로 만든다.
    두개의 파일을 이용해서 jks를 만들었더니 에뮬레이터에서도 잘 동작함.


4. VirtualBox AndroidX86 에서 사용하기

>> AndroidX86 Platform키는 왜 안되는 걸까..
>> http://sourceforge.net/p/android-x86/build/ci/marshmallow-x86/tree/


5. apk 의 KeySign 바꾸기
http://itmir.tistory.com/39

2015년 10월 1일 목요일

VirtualBox 해상도 설정하기


VirtualBox에서 Custom한 해상도로 실행해야할 경우 다음과 같이 실행하면, 부팅시 해상도를 설정할 수 있다.

> 24비트로 설정하는 경우에는, 화면이 안나왔음.
> VboxManage는 VirtualBox 디렉토리에 있으며 Path설정을해서 사용하면 편할듯.


C:\Users>VboxManage setextradata "Android4.4" "CustomVideoMode1" "1280x800x16"

2015년 9월 21일 월요일

코딩 교육 이젠 교육이다.

코딩 교육에 대해서 관심이 생겼다.

3년내로 초중 교육과정에 코딩 교육이 추가될 예정이고
그에 따라 사교육 수요도 늘어날 전망.


교육업계는 노후가 보장되는 제2인생의 흐름이 아닌지?

2015년 9월 3일 목요일

[기타] DIY NAS 만들기




1. Win32DiskImager (부팅USB를 만드는데 필요한 프로그램입니다.)
2. Xpenology Boot Image (XPEnoboot - IMG or ISO file / XPEnoboot와 Nanoboot 두 가지 버전입니다. 저는 XPEnoboot를 사용했습니다.)
3. DSM file (PAT파일 입니다. 2번에 Boot Image와 같은 버전으로 받으시면 됩니다.)
4. SynologyAssistant (네트워크에서 NAS를 찾아 DSM을 설치하기 위해 필요한 프로그램입니다,)
5. VirtualBox (무료), VMware (유료), Hyper-V (Windows에 포함)

2015년 9월 2일 수요일

[JAVA] String 변환, Hexa String to Array 등

1. Hexa코드를 변환하는 방법들.

int IntegerNumber = 1f1f;
String strHex = Integer.toHexString( IntegerNumber );

byte[] -> String


Arrays.

[Android] apk에 so를 포함시키기. JNI 사용하기.

1. JNI 컴파일 관련.

JNI를 컴파일 하면, so가 생성될텐데, 이 so 를 apk에 포함하려면 어떻게 해야 할까?

Android Studio에서는 gradle의 설정을 이용하면 되는데

app/build.gradle에서 다음과 같이 설정해주자.
buildTypes {
    debug{
        signingConfig   signingConfigs.debug
    }
    release {
        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }
}
sourceSets.main {
    jniLibs.srcDir 'src/main/libs'    jni.srcDirs = []
}
 
 


>> 포인트는 sourceSets.main부분이다.
생성된 so를 src/main/libs 에 집어넣는다.,, --> ndk-build 하면 자동으로 들어가도록 만든다.
일반적으로 /src/main/jni 디렉토리에서 컴파일을 하면 그렇게 된다.

>> android studio에서 실행을 하면 자동적으로 알맞은 so가 /data/data/패키지명/lib 에 들어가게 된다.

2. 기타 알면 좋은 팁

앱을 실행하면 자동적으로 libapp.so가 생성되는 경우가 있다.
1번의 과정을 거쳤다면 사용자의 so가 복사 되었을 테지만, libapp.so 도 중복생성되는 경우
jni.srcDirs = [] 를 해주면 생기지 않는다.

[Android] Android Studio에서 배포판 생성하기.


1. Signkey
 Sign된 키를 준비한다.  debug.jks와 같은 키를 준비해야됨.
 jks파일은 android studio에서 만든 파일이다.

2.  Android Studio SystemApp만들기
 
키를 준비한 다음, build-> Generated signed APK를 하면 apk가 생성된다.
생성된 APK 를 /system/app 아래에 복사한다.
공유라이브러리를 사용하는 경우 /system/lib 에 복사한다. 
재부팅하면 앱이 실행된다. 

3. Build 설정
3.1 build.gradle 설정
 
 
  signingConfigs {
        debug{
            storeFile file("signature/debug.jks")
        }
        android {
            keyAlias 'androidebugkey'
            keyPassword 'android'
            storeFile file('signature/debug.jks')
            storePassword 'android'
        }
    }
hifu_compact/app/signature/debug.jks
키를 사용한다.
buildTypes {
    debug{
        signingConfig   signingConfigs.debug
    }
    release {
        minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }
}
 
 

2015년 8월 15일 토요일

RK3188 관련



개발환경 설정하기
http://linux-rockchip.info/mw/index.php?title=Building_Kernel_for_Linux_Distribution

Android에서 Serial 통신하기



  1. 준비물



Teraterm
Virtual Serial Port : Com2Com, VSPE
Seiral API  : android_serial_api

기타 : android studio, ndk

2. 에뮬레이터 사용하기



Emulator @AVDNAME -qemu -serial COM1


Tip:  Windows8 인 경우에는 "드라이버 서명 적용 사용 안 함"을 반드시 해줘야한다.
>  Solution : http://codesystem.co.kr/ttboard/data/FILES/Windows%208%20OR%208_1%20VirtualSerial.pdf
> Very Important!!

3. 시리얼 드라이버 확인


/proc/tty/drivers
> 에뮬레이터에서, 포트 정보가 없는 경우에는, VirtualBox를 사용한다.
> /dev/ttyS1 을 보통 사용하는데, 권한이 666으로 되어 있어야 한다.  root권한이 있는 경우에는 강제로 chmod 666 /dev/ttyS1 을 해서, 접근한다.


4. 시리얼 포트 설정

SerialPort.c 에서 포트 설정을 할 수 있다.
포트 설정은 반드시 해주는 것이 좋을 것으로 보임.

termios cfg; // 설정하기
 

참고 URL : http://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html

> 다음과 같이 3개의 구조체를 설정할 수 있다.
cc_t
Used for terminal special characters.  ( 특수 문자, 제어문자 )
speed_t
Used for terminal baud rates.  ( 보드레이트, 속도  )
tcflag_t
Used for terminal modes.  ( 터미널 모드 )

> 사용한 설정
cfg.c_cflag |=CS8|CREAD|CLOCAL;
cfg.c_lflag &= ~ICANON;
cfg.c_cflag &= ~CRTSCTS; // disable CTS/RTScfg.c_cflag &= ~CSTOPB; // Stop bit 1 bitcfg.c_cflag &= ~PARENB; //No parity
 
> CANONICAL 모드로 사용하는 경우에 제어문자를 초기화할 필요가 있다.
cfg.c_cc[VEOF]     = 0;     /* Ctrl-d */
cfg.c_cc[VEOL] = 0; ///* '\0' */
/      
cfg.c_cc[VINTR] = 0; /* Ctrl-c */// 
cfg.c_cc[VQUIT] = 0; /* Ctrl-\ */// 
cfg.c_cc[VERASE] = 0; /* del */// 
cfg.c_cc[VKILL] = 0; /* @ */ 
cfg.c_cc[VSWTC] = 0; /* '\0' */// 
cfg.c_cc[VSTART] = 0; /* Ctrl-q */// 
cfg.c_cc[VSTOP] = 0; /* Ctrl-s */// 
cfg.c_cc[VSUSP] = 0; /* Ctrl-z */ 
cfg.c_cc[VREPRINT] = 0; /* Ctrl-r */// 
cfg.c_cc[VDISCARD] = 0; /* Ctrl-u */// 
cfg.c_cc[VWERASE] = 0; /* Ctrl-w */ 
cfg.c_cc[VLNEXT] = 0; /* Ctrl-v */
cfg.c_cc[VEOL2] = 0; /* '\0' */
 
 


Subscript Usage
 
Canonical Mode
Non-canonical Mode
Description
VEOF
 
EOF character
VEOL
 
EOL character
VERASE
 
ERASE character
VINTR
VINTR
INTR character
VKILL
 
KILL character
 
VMIN
MIN value
VQUIT
VQUIT
QUIT character
VSTART
VSTART
START character
VSTOP
VSTOP
STOP character
VSUSP
VSUSP
SUSP character

VTIME
TIME value
 
Canonical 모드를 사용하면, 0x0a와 같은 문자가 줄바꿈 처리되기 때문에 별도의 처리가 필요할 것으로 예상된다.
 
> 입력 버퍼의 사이즈를 설정하는 경우, 해당 사이즈만큼 버퍼가 찰때까지 기다린다.
cfg.c_cc[VMIN]     = 45;
 
 
> 속도 설정
 speed_t speed = B115200;
cfsetispeed(&cfg, speed);
cfsetospeed(&cfg, speed);
 

 
 



2015년 2월 4일 수요일

리스트에 관해서 : CCTableView

cocos2d-x 2.2.2 기준.

CCTableView는 실제 리스트 기능을 하는 CCScrollView와 스크롤 이벤트 인터페이스
와 CCScrollViewDelegate로 구성된다.

class CCTableView : public CCScrollView, public CCScrollViewDelegate


# 생성하기
CCTableView* CCTableView::create(CCTableViewDataSource* dataSource, CCSize size)
{
    return CCTableView::create(dataSource, size, NULL);
}
CCTableView* CCTableView::create(CCTableViewDataSource* dataSource, CCSize size, CCNode *container)
{
    CCTableView *table = new CCTableView();
    table->initWithViewSize(size, container);
    table->autorelease();
    table->setDataSource(dataSource);
    table->_updateCellPositions();
    table->_updateContentSize();
    return table;
}

뒷부분에 CCNode *container 를 추가하면, 별도의 레이어를 생성한 후에, addChild하도록 되어있음.

bool CCScrollView::initWithViewSize(CCSize size, CCNode *container/* = NULL*/)
{
    if (CCLayer::init())
    {
        m_pContainer = container;
       
        if (!this->m_pContainer)
        {
            m_pContainer = CCLayer::create();
            this->m_pContainer->ignoreAnchorPointForPosition(false);
            this->m_pContainer->setAnchorPoint(ccp(0.0f, 0.0f));
        }
        this->setViewSize(size);
        setTouchEnabled(true);
        m_pTouches = new CCArray();
        m_pDelegate = NULL;
        m_bBounceable = true;
        m_bClippingToBounds = true;
        //m_pContainer->setContentSize(CCSizeZero);
        m_eDirection  = kCCScrollViewDirectionBoth;
        m_pContainer->setPosition(ccp(0.0f, 0.0f));
        m_fTouchLength = 0.0f;
       
        this->addChild(m_pContainer);
        m_fMinScale = m_fMaxScale = 1.0f;
        m_mapScriptHandler.clear();
        return true;
    }
    return false;
}

동영상 스트리밍 관련 링크



오픈소스 기반의 동영상 스트리밍서버 구축
http://kldp.org/node/53236
초간단 스트리밍 서버구축

웹캠을 이용하여 스트리밍 서버 구축하기 (ffmpeg, ffserver)
리눅스 환경하에서 스트리밍 서버 구축하기

RED5 + FFMPEG + FFserver 스트리밍 서버 구축하기