ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2018年3月12日 星期一

2017年11月12日 星期日

又買了-- gogastone smartbox a4


因為已經便宜到280元了,借測發現速度快很多。充電也提供正常的micro 接頭。

要注意有專屬的app。

另外的線是為了湊免運的,結果比a4還貴,390...

2016年9月2日 星期五

又買四片

看印刷感覺假假的 ,不會一下就壞了吧⋯⋯


2016年8月12日 星期五

到850了

6500。
老闆說是彈性鏡框。

2016年5月27日 星期五

xperia z1

這次的比較糟,
鏡頭鍍膜刮痕很多,到不能用的程度,沒提。
說漏光其實是螢幕變形。


2016年4月8日 星期五

又是 sd


一片340,他說有終身保固。是exfat 格式。

2015年12月31日 星期四

system service feature enable/disable in android 5

ethernet service:
./services/java/com/android/server/SystemServer.java:674:                if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET)) {


    private void startOtherServices() {
        ...
        ...
                if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET)) {
                    mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS);
                }
茶一下 FEATURE_ETHERNET...
./core/java/android/content/pm/PackageManager.java:1570:    public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
這個: android.hardware.ethernet 是在:
frameworks/native/data/etc/android.hardware.ethernet.xml:

<permissions>
    <feature name="android.hardware.ethernet" />
</permissions>


這個 file 是被copy ...
device/fsl/imx6/sabreauto_6q.mk:

PRODUCT_COPY_FILES += \
        frameworks/native/data/etc/android.hardware.audio.output.xml:system/etc/permissions/android.hardware.audio.output.xml \
        frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
        ....
        ...
        frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \
把這行刪掉以後,ethernet service 就不會起來了。

2015年12月30日 星期三

Nexus 9. Battery Low LED

原來Nexus 9 下面也有一棵白色 Led,
在完全沒電的時候,插上 usb 充電,他就會閃三下。
告訴你他還沒死。
這種情況持續充電 30min 後,出現白色電池符號,就可以長按power button 開機。
-- 電池顯示 4%

2015年11月21日 星期六

6s


這個突出來還真的討厭。

但是 4g速度好像有比較快


2015年11月16日 星期一

又壞了 buffalo

WCR HP GN

真的很容易壞

2015年10月5日 星期一

ipv6 test

ipv6 有 128 bit.(16x8)
address 的寫法改用 :

然後用 16 進制。
例如:fe80::204:9fff:fe03:5011

因為 byte 太多,所以其中有可能有很多 word是0。
為方便起見,連續的0 就用 :: 來取代。
但是為了避免混淆,只能取代一次。

kernel 有 support ipv6 的話,/proc/net/ 下,會有.. if_inet6 這個 file

然後就可以用 ip 這個 command 操作..

顯示目前 ipv6 的 address:
ip -6 addr show

1|root@sabreauto_6q:/ # ip -6 addr show
1: lo:  mtu 65536 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
3: eth0:  mtu 1500 qlen 1000
    inet6 fe80::204:9fff:fe03:5123/64 scope link 
       valid_lft forever preferred_lft forever

看 ipv6 的 routing..
ip -6 route show

root@sabreauto_6q:/ # ip -6 route show
fe80::/64 dev eth0  metric 1024 
這是說, fe80::/64 的 subnet,都從 eth0進出


雙方都設好routing.. 就可以用 ping 了,ipv6 的 ping 叫 ping6

有時候,ping6 會出現 "connect: Invalid argument
..要加上 " -I eth0 "
還有... lollipop 的 ping6 好像有問題(還是 argument 不一樣?), 所以用 busybox ping6 比較 OK..
1|root@sabreauto_6q:/ # busybox ping6 -I eth0 fe80::ba27:ebff:feff:b123        
PING fe80::ba27:ebff:feff:b123 (fe80::ba27:ebff:feff:b123): 56 data bytes
64 bytes from fe80::ba27:ebff:feff:b123: seq=0 ttl=64 time=2.527 ms
64 bytes from fe80::ba27:ebff:feff:b123: seq=1 ttl=64 time=0.719 ms
64 bytes from fe80::ba27:ebff:feff:b123: seq=2 ttl=64 time=0.777 ms
^C
--- fe80::ba27:ebff:feff:b123 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.719/1.341/2.527 ms

Nexus 9


比 ipad air 小一些 ,但是比 mini 大。
解析度不錯 ,  當電子書ok 了。
看美漫也不會太小不清楚。

缺點是後面凸出來的鏡頭。要擺在桌上很麻煩 ,怕被磨到。

充電好慢。電池好像也不夠。應該沒辦法連續播放8小時。
拍照就標準 htc 那樣,軟體感,加上 google原生的對焦慢。

重量還好,但是加上附送的 磁性 cover 就太重了。
聲音應該算不錯吧,很大聲,以平板來說。




玩一下 game, 右上背面就會有點熱熱的。
更新到 6.0 以後,Launcher 常常會 freeze 住。

配合google books 來看電子書很 OK, 即使 pdf 也不錯,
新的 google books 好像會自動把文字區域放大對其中央,
配上這麼高的解析度,看起來很 OK

影片..當然是沒話說,可席看電子書 OK 的 4:3 在看電影就會多兩條黑線。
一堆撥放器的字幕黨都不 OK, 最後還是 MX player 正常波放。
hardware decode 也 OK
看影片的時候,果然,機器不會熱,耗電也號不多。

--------------
用了一個月,升級到6.0,機器常常自動重開,然後在這個畫面卡很久
用恢復原廠設定竟然卡住 ,所以只好開進 hboot, 用factory reset 清除 data cache

這裡花了10min... 還以為死掉了。


2015年9月22日 星期二

古老的...

如果不對 structure 內 field 操作。
就不需要知道 structure 的內部宣告。

所以像 tinyalsa 中 struct control
雖然 control_open 的傳回值是 struct control*
但是alsa stub 只會把 得到的 control struct*交給 tinyalsa 的 function 來操作。
所以 alsa stub 只需要宣告:
struct control;
就可以。

struct control {
    int fd;
    struct snd_ctl_card_info *card_info;
    struct ctl_pcm_info      *pcm_info_p;
    unsigned int              count_p;
    struct ctl_pcm_info      *pcm_info_c;
    unsigned int              count_c;
};

count_p 的 p 是 playback
coubt_c 是 capture

count 是數量,也就是 play, capture 的數量。

2015年9月18日 星期五

NuPlayer.cpp 的
void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
..
..
        case kWhatStart:
        {
         ..
         ..
            mOffloadAudio =
                canOffloadStream(audioMeta, (videoFormat != NULL),
                                 true /* is_streaming */, streamType);
            if (mOffloadAudio) {
                flags |= Renderer::FLAG_OFFLOAD_AUDIO;
            }


這個 kWhatStart 是由:
void NuPlayer::start() {
    (new AMessage(kWhatStart, id()))->post();
}
送出。

這邊的 caller:
android::NuPlayerDriver::start()
android::MediaPlayerService::decode(..)
..Binder..
mediaserver

typedef int snd_pcm_hw_param_t;
#define SNDRV_PCM_HW_PARAM_ACCESS       0       /* Access type */
#define SNDRV_PCM_HW_PARAM_FORMAT       1       /* Format */
#define SNDRV_PCM_HW_PARAM_SUBFORMAT    2       /* Subformat */
#define SNDRV_PCM_HW_PARAM_FIRST_MASK   SNDRV_PCM_HW_PARAM_ACCESS
#define SNDRV_PCM_HW_PARAM_LAST_MASK    SNDRV_PCM_HW_PARAM_SUBFORMAT

#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS  8       /* Bits per sample */
#define SNDRV_PCM_HW_PARAM_FRAME_BITS   9       /* Bits per frame */
#define SNDRV_PCM_HW_PARAM_CHANNELS     10      /* Channels */
#define SNDRV_PCM_HW_PARAM_RATE         11      /* Approx rate */
#define SNDRV_PCM_HW_PARAM_PERIOD_TIME  12      /* Approx distance between
                                                 * interrupts in us
                                                 */
#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE  13      /* Approx frames between
                                                 * interrupts
                                                 */
#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14      /* Approx bytes between
                                                 * interrupts
                                                 */
#define SNDRV_PCM_HW_PARAM_PERIODS      15      /* Approx interrupts per
                                                 * buffer
                                                 */
#define SNDRV_PCM_HW_PARAM_BUFFER_TIME  16      /* Approx duration of buffer
                                                 * in us
                                                 */
#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE  17      /* Size of buffer in frames */
#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18      /* Size of buffer in bytes */
#define SNDRV_PCM_HW_PARAM_TICK_TIME    19      /* Approx tick duration in us */

把有範圍的歸在一起,再用:
#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL       SNDRV_PCM_HW_PARAM_SAMPLE_BITS
#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL        SNDRV_PCM_HW_PARAM_TICK_TIME
然後就可以用這個function :
static inline int param_is_interval(int p)
{
    return (p >= SNDRV_PCM_HW_PARAM_FIRST_INTERVAL) &&
        (p <= SNDRV_PCM_HW_PARAM_LAST_INTERVAL);
}
決定該參數是有範圍的 (upper, lower) 還是就一個值。

然後 structure:
struct snd_pcm_hw_params {
        unsigned int flags;
        struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
                               SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
        struct snd_mask mres[5];        /* reserved masks */
        struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
                                        SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
        struct snd_interval ires[9];    /* reserved intervals */
        unsigned int rmask;             /* W: requested masks */
        unsigned int cmask;             /* R: changed masks */
        unsigned int info;              /* R: Info flags for returned setup */
        unsigned int msbits;            /* R: used most significant bits */
        unsigned int rate_num;          /* R: rate numerator */
        unsigned int rate_den;          /* R: rate denominator */
        snd_pcm_uframes_t fifo_size;    /* R: chip FIFO size in frames */
        unsigned char reserved[64];     /* reserved for future */
};
也可以直接用 array ..
---- 所以適當安排 IOCTL code 還是有幫助的

2015年9月17日 星期四

Audio Input:

支援7 種 ananlog/digital source

analog input 提供 3 pairs of 2 inputs
Pair 可以規劃成:
stereo input with ground
single ended stereo input
differential stereo input
2 mono

提供 5 組 asynchronous digital I2S format input
每組可以有自己的 sample rate , clock phase
每組asynchronous I2S input 有自己的 bit clock, word select. 都是 input pin (slave)
I2S1 有 3 個 data line 可用做多 channel input
其他的 I2S 都只有 1 個 data line

Host I2S input 與 I2S output 共用 bit clock, word select
5 組 host input 區分為兩組:Host A, Host B
兩個 Host 各有自己的 bit clock, word select

Host A:
2 data input : IIS_SD_IN4, IIS_SD_IN5
bit clock, word select: IIS_SCK_IN45, IIS_WS_IN45

Host B:
3 data inputL IIS_SD_IN6, IIS_SD_IN7, IIS_SD_IN8
bit clock, word select: IIS_SCK_IN678, IIS_WS_IN678

上面兩組 Host 的 clk, ws pin: IIS_SCK_IN45, IIS_WS_IN45, IIS_SCK_IN678, IIS_WS_IN678 都可以做 input (slave) 或 output (master) 使用。

Host B 的 pin 可以configure 成 I2S mode 或是 TDM Mode



Audio Output:

3 stereo DACs.
4 synchronous Digital Port. (I2S and TDM)
另外,可藉由 I2C command, 將 5 組 asynchronous I2S input 設定變更為 asynchronous I2S output
Software Support asynchronous I2S output : IIS_SD_OUT3
每個 asynchronous I2S output 可以有不同的 sample rate 和 clock phase

asynchronous I2S output 的 bit clock, word select 都是 input (slave mode)
serial data pin 是 output

synchronous I2S output 使用 host I2S input 的 bit clock 和 word select
有 Host A, Host B 可以選

做 Most Mode 時, TDM output 使用 TDM_FSYNC_OUT, TDM_SCK_OUT 作為 frame sync和 bit clock
做 Slave Mode 時,改用 TDM_SYNC_IN, TDM_SCK_IN 作為 frame sync 和 bit clock

PIN 90.91 可設定為 S/PDIF output.

表列各 pin 的 三種功能。與所屬 groupe.
function 的變更以 groupe 為單位。


好像新版的 kernel 都已經 support uml (user-mode-linux) 了。
所以只要..
export ARCH=um
make defconfig
make all
就可以 build 出 uml

要注意的是, menuconfig 中的 UML Character Devices 裡面,最好全部都勾選。
這樣才有辦法在 xterm 中啟動。
否則會出現 channel error

2015年9月15日 星期二

5.1.1 - Z 的最後版本


有支援 exfat 喔。
-- 好像很久以前就支援了...

Kingmax 32G Pro 掛點


放在 Xperia Z 上用,還用不到半年說....

2015年9月11日 星期五

在 include/linux/kernel.h:
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
就是 n/d 無條件進位。

標籤

網誌存檔