佔中外部勢力 – 盐田梓圣若瑟小堂 (建于1879年)

林國璋牧師:教會之門為祈求心靈平安之人而開 – 2014nov01


葉國謙在10月30日的立法會大會中,發言時指有外國勢力透過教會去介入佔領行動,

林­國璋牧師就代表被點名的善樂堂接受本報訪問,否認了有關指控。

就算撇開宗教角度去講,林國璋牧師亦認為人民今次所表現出來的力量,亦超過一般人的想­像。

林國璋牧師續指,每一個人也有一個良心,他認為共產黨將心比己,可能要付錢才能叫­到他人做事,故覺得今次雨傘革命集會人士眾多,就一定是收了很多錢,

但共產黨似乎沒有­想過有意義的事情,沒有錢也有很多人願意去做。

最後林國璋牧師就引用了鹽田仔的一間古舊聖堂外的一句英文

「this door remains open for those who seek for the peace of heart」

(教堂之門是開放給願意尋求心靈平安的人)

去回應葉國謙,林國璋牧師亦­呼籲葉國謙,相信他「在權力追逐和迷思中都好累,又或者很繁忙」,並希望葉國謙他朝又­一日可以放下這些東西,能夠去到任何一間聖堂,安靜祈禱,尋求內心的平安,林國璋牧師­亦會代表善樂堂歡迎他。


佔中外部勢力懶人包 – 陳韜文 / 沈旭暉 – 2014oct30

http://tlfong01.com/2014/10/30/%E4%BD%A0%E5%92%81%E8%AC%9B%E5%B0%B1%E5%94%94%E5%95%B1%E5%96%87%EF%BC%81-%E5%BC%B5%E5%9C%8B%E6%A3%9F/


yim_tin_church_2014nov0101

盐田梓圣若瑟小堂 – 维基百科

http://zh.wikipedia.org/wiki/%E9%B9%BD%E7%94%B0%E6%A2%93%E8%81%96%E8%8B%A5%E7%91%9F%E5%B0%8F%E5%A0%82

http://www.evanlife.org.hk/ev_route/e_history_bk.pdf

圣若瑟小堂位于香港新界西贡区牛尾海一带的离岛盐田仔,现时由西贡圣心堂管理,附属西贡圣心堂区。

圣若瑟小堂初建于1890年以取代原先圣福若瑟居所旁的旧圣堂(建于1879年),其后圣堂先后于1948年及1962年进行大装修,而香港教区亦于1979年开始每两个星期于此圣堂举行弥撒,但由于盐田仔村到了1990年代已被完全空置,圣堂的活动几近停顿。

在教区有人提议停止在盐田仔的瞻礼时引起了居民的反响,因而去信要求教区请求补救。最后在资金的引入下,圣若瑟小堂被再次重修,

并于2004年5月2日庆祝首台弥撒及重开仪式。现时圣若瑟小堂为香港天主教信友的其中一个朝圣点,亦被列为二级历史建筑[1],更在2006年5月7日获联合国教科文组织亚太区文物古迹保护奖‎优异项目奖。

历史

早于1865年 ,柯神父(Gaetano Origo)便抵达西贡盐田仔宣讲天主教教义,而到了1867年,当时仍为神父的宗座代监牧高神父(Timoleon Raimondi,后来在晋升主教后被称为高主教)在书信中亦有提及盐田仔上的圣堂的存在。

盐田仔其后全体居民于1875年受洗,并于圣福若瑟在西贡宣教期间捐出土地给他作居住及作圣堂使用。

居民后来于1890年于岛山的小丘上建立了第二座的圣若瑟小堂,作为村中的宗教活动的中心。期后圣堂先后于1948年及1962年进行大装修,而香港教区亦于1979年开始每两个星期于此圣堂举行弥撒,但由于盐田仔村到了1990年代已被完全空置,圣堂的活动几近停顿。后来,在香港教区出现了要求停止于盐田仔的瞻礼,就此引起了居民的反响,最后教区于2000年引入资金,开展了修葺的工程。最后圣若瑟小堂于2006年5月2日进行弥撒及重开仪式。

内部建筑

圣福若瑟的圣像

圣若瑟小堂全堂长24米,阔9米,应由

米兰外方传教会的神父设计,故教堂的外观设计为意大利罗马式

圣堂内的一端设有弥撒用的祭台,

此祭台是采用第二次梵谛冈大公会议前的规格所建成的

在祭台的中心供放了主保圣若瑟的圣像,而祭台的两旁分别各有一个凹位,一个作为摆放圣爵之用,另一个的底下有一小孔,用来排去洗圣爵的水(那些水不会流入水沟,而是直入泥土)。小堂内部西北方供奉了圣福若瑟的圣像。

在原先的设计中,祭台上的圣像可用透过东墙高处的玫瑰窗以及圣像后方的祭坛壁孔穴的日光作照明之用,

但在教堂重修后已改为使用射灯照明。玫瑰窗则早于2005年之前的重修之前被封密。

祭坛的后方为祭衣房,楼上阁楼则为宿舍,可供神父或朝圣人士使用。

重修工作

圣若瑟小堂内的祭坛

在停止在盐田仔的瞻礼的要求引起了居民的反响后,香港教区引入了来自L&T慈善基金的15万美元去进行包括圣若瑟小堂本身以及邻近建筑如庭院、篮球场及澄波学校总面积共1437平方米的重修工作。

早于1996年后期,香港大学建筑系的学生已前往制作量图,至2000年10月香港教区开始勘察土地并订定工地计划。到了2003年,教区于10月展开重修项目,于11月列出文物保存的要求,并于该年12月开始招标。重修工程于2004年1月29日开始。

由于资金相当有限,重修工程采用了“不加不减”的方针,原则上只求回复几近荒废了的圣堂,在整体上尽少干预和改动,而且所有的改动都是为了最基本的需要,在工程上不使用尖端的文物保存技巧。

修葺顶蓬和内外墙身的工作于2004年2月中开始,现存的波纹式非石棉瓦顶物料虽不能确定是否原有,但由于状况良好,工程决定予以保留而仅在上面涂上Flexcoat W500 防水液膜以作防漏,并选用砖红色以发挥地标的效果。在工程进行时,工人在屋顶的山墙墙角发现了一些红磁顶盖用料,所以教区相信波纹式顶盖可能为后期的物料,并会考虑于将来资金充裕时回复磁顶盖。内部地台的着色英泥沙浆层已因年月而磨损,工程方面在修葺地台后涂上三层还氧漆,并以绿色为地台颜色。圣堂的百年粗石地台在工程中没有被取替,但在上面加添一层铺地石以保行人的安全。

门窗的重修工作于同年3月开始。圣堂在1948年及1962年进行大装修时转用的普通玻璃窗在是次的重修工程中改回使用初建时使用的彩色玻璃,更在外加上了蚊网,一方面防止蚊虫飞入滋扰崇拜人士,另一方面亦防止野战爱好者所使用的塑胶弹可能造成的损坏。在重修前使用的铁门则被改为木门。

圣堂的室外和照明工程于同年5月开始。圣堂周围已损毁的矮挡墙则使用工地附近岸边的石头去修补,为求减低运送物料的成本,同时维持圣堂的乡郊气息。圣堂的外廊受楼梯加设了电灯,祭台上的圣像亦有射灯给了照明。在室外设了两支射灯照亮圣堂上写有“天主堂”三字的西面正墙。

在圣堂附近的澄波学校的两所校舍亦于2004年2月至3月被重修,用作盐田仔本地的民间博物馆,由村民运作。其中靠西面的一所校舍用来展示村内搜集来的工具及加工品,靠东面的校舍则摆放展板介绍村中的文化、宗教历史和生态资料。

重修工程完成后,出身于盐田仔陈家村的香港天主教教区副主教陈志明神父于2004年5月2日进行了首台弥撒,以及进行了重开仪式。

现况

其实早在重修之前,每年的5月,各散东西的陈家村村民都会聚首于圣若瑟小堂庆祝一年一度的圣若瑟节。在2004年5月后,西贡堂区及香港明爱在圣言会及香港教区的协助下每月组织朝圣团及生态游,除令人认识盐田仔的历史文化外,更有助平衡圣若瑟小堂的收支。

现时圣若瑟小堂为香港天主教信友的其中一个朝圣点,亦被香港古物古迹办事处评级为三级历史建筑,更在2006年5月7日获联合国教科文组织颁授亚太区文化遗产优良奖。


Neil Young – Heart Of Gold


“Heart Of Gold”

I want to live,
I want to give
I’ve been a miner for a heart of gold.
It’s these expressions
I never give
That keep me searching for a heart of gold.

And I’m getting old.
Keep me searching for a heart of gold
And I’m getting old.

I’ve been to Hollywood
I’ve been to Redwood
I crossed the ocean for a heart of gold.
I’ve been in my mind,
It’s such a fine line
That keeps me searching for a heart of gold.

And I’m getting old.
Keeps me searching for a heart of gold
And I’m getting old.

Keep me searching for a heart of gold.
You keep me searching and I’m growing old.
Keep me searching for a heart of gold
I’ve been a miner for a heart of gold.

.END

Leave a comment

Filed under Electronics DIY Project

FongMain01 refactoring notes

// *** fongmain2014nov0102.ino ****
// ********************************************************************
// fongmain2014nov0102.ino tlfong01.com 2014oct31hkt1059
// ********************************************************************
#include “Arduino.h”
#include “HardwareSerial.h”
#include “SoftwareSerial.h”
#include <avr/io.h>
#include <avr/interrupt.h>
// #include <PinChangeInt.h>
#include <FongGlobalIsr01.h>
#include <FongLocalIsr01.h>
#include <FongInt01.h>
#include <FongSerial01.h>
#include <FongDebug01.h>
#include <FongBuzzer01.h>
#include <FongDio01.h>
#include <FongAio01.h>
#include <FongText01.h>
#include <FongBlueTooth01.h>
#include <FongTest01.h>
#include <FongGlobalVar01.h>

DECLARE_GLOBAL_VAR()
FongGlobalIsr01 fgisr1(Test0);
DEFINE_LOCAL_ISR(fgisr1)
CREATE_SERIAL_PORTS()
DECLARE_GLOBAL_SERIAL_PORT_POINTER()

void setup()
{
attachLocalIsr(); // Attach local ISRs
}

void loop()
{
CREATE_SERIAL_OBJECT_AND_POINTER()
// FongTest01 ftest1(&fgisr1, &fserial1, Test0, WithDebugPrintStatements);
FongTest01 ftest1(&fgisr1, &fserial1, Test1, WithoutDebugPrintStatements);
}

// *** End ***

Leave a comment

Filed under Electronics DIY Project

美國法學博士膠成咁 – 梁煥松

Frankly my dear, I don’t give a damn


Frankly, my dear, I don’t give a damn – Wikipedia

“Frankly, my dear, I don’t give a damn” is a famous line from the 1939 film Gone with the Wind starring Clark Gable and Vivien Leigh.

The line is spoken by Rhett Butler (Gable), as his last words to Scarlett O’Hara (Leigh), in response to her tearful question:

“Where shall I go? What shall I do?”

Scarlett, however, clings to the hope that she can win him back.

The line is memorable not only because it contains profanity in an era in which this was unusual and shocking in American film, but because it demonstrates that Rhett has finally given up on Scarlett and their tumultuous relationship.

After more than a decade of fruitlessly seeking her love – as covered over nearly four hours of film – he no longer cares what happens to her.

This quotation was voted the number one movie line of all time by the American Film Institute in 2005.


tumultuous – loud, excited, and emotional; involving a lot of violence, confusion, or disorder (Merriam Webster)


梁煥松:膠到震 – 黑衣會 2014年10月31日

梁營的金融發展局主席,仲係留學美國的法學博士,都會膠成咁

另一個活寶貝,是都係留學美國,又用 iPhone 的葉劉淑儀,話社運人用手機 apps 輔助,足以證明有「精密部署」,真係膠到震。

她還表示過有興趣參選下屆特首,問你死未?

以下是我和 Facebook 網友的討論摘錄:

Chris: 中國仲講咩「超英趕美」?連印度/印尼/泰國都趕不過!

T: 人講佢又講。

Chris: 有這樣的金管局主席,精英治港,真係死得

L:其實,有好多官員以至政客,都係政治低能。有時真係唔講好過講,獻醜不如藏拙。奈何當今太多「語不低能誓不休」之人,元秋厲魂乃表表者。

C:香港人有讀中史都知香港是中華民國的,現在是解放了。

S:自從共產了之後,全部人都變了黑奴? 八婆佢係美籍嘅?2014年講呢的嘢,還要把中國人推番去黑奴這個假設的起點,八婆你真好毒。

Y: 不妨聽多啲意見:
任志剛憂佔領危及港中間人地位 陳德霖盼破壞法治早結束 查太籲「袋住先」

F: 叫任金剛匿返去大陸啦, 如果香港變成大陸咁樣仲點做中間人?

S :香港今天確得來不易,所以我珍惜。究竟誰會先破壞香港?暴力警察、指鹿為馬的高官、貪腐特首、為所欲為受照顧的商人、失控的自由行入侵、大陸商人公然洗黑錢、律政司破壞司法……

Yip :我擔心從此永無寧日,無奈!

Chris: 想維持香港的「中間人」地位,就要保持「兩制」,避免香港變成似大陸的樣子。

延伸閱讀: 徐家健: 奴隸制度下的法治?

梁煥松


徐家健 :奴隸制度下的法治? am730 2014年10月31日

http://www.am730.com.hk/column-233948

美國早於1870年給予黑人投票權。(資料圖片)

香港有不少精英分子語不驚人誓不休,最近的例子有:

以1861年美國解放黑奴,大約100年後,1968年黑人才可獲投票權,我唔係話香港都要100年先有民主,但係爭取民主需要時間,2017唔得啫,你點知2022無?點解唔袋住先?阿爺依家話俾你,你都唔要?」

贊成「袋住先」的大有人在,要尊重。說爭取民主需要時間亦不是完全沒有事實根據,可以理解。但引用美國解放黑奴百年後黑人才獲投票權做例子,我只有O嘴再O嘴。

第一個O嘴,是如此三言兩語總結美國最重要的一段歷史,未免過分簡化。當年美國內戰結束不久,其實已在1870年通過憲法修正案第15條給予黑人投票權。只是幾年後南部個別州份還以顏色通過所謂 Jim Crow laws,不但把有色人種隔離,更大大提高他們的投票成本,當中包括投票前先交稅和要識字等。

這些歧視性投票門檻,除了顯著降低南部的黑人投票率,就連其他「經濟貢獻」較低的白人亦被拒諸投票站門外如此依法治州,一依便依了近一個世紀。經歷過五、六十年代的民權運動後,1965年聯邦政府才正式通過《選舉法案》,令實施多年的 Jim Crow laws 不再合法,黑人的投票率隨之大幅上升。

第二個O嘴,美國、黑奴、100年、投票權,究竟是說給誰聽的?支持「袋住先」的人,不用知道外國「黑」勢力爭取了100年的是投票權還是廢除投票門檻,也會繼續支持袋袋平安。

反對「袋住先」的人,聽到黑人冇投票權的比喻,卻要不是聯想起自己同奴隸一樣冇提名權,便是會諗到爭取投票權要靠打足幾年的內戰、廢除投票門檻有賴死人收場的民權運動。

但這樣除了進一步撕裂社會,對香港究竟有甚麼好處?

今天撕裂香港社會的,還有港人對法治的狹義和廣義兩個不同解讀。

說過了,

廣義的法治要符合政治道德,而狹義的則只在乎制度穩定可測

收窄分歧的第一步,是討論時避免雞同鴨講。漠視道德的法治定義其實並無不可,只是要留意這種法治在奴隸制度下一樣可以存在。故此,狹義的法治不會是現代社會追求的唯一目標。

犧牲狹義的法治去換取自由民主,從「亂世佳人」到「我有一個夢想」都曾發生過,值得與否見仁見智。

就如不同人對「袋住先」有不同看法,

隨便找個亂世佳人中代表大地主「功能組別」的南方白人問問,

他會答你 Jim Crow laws 袋足100年也嫌少

作者為克林信大學經濟系副教授/香港科技大學經濟系客座副教授

.END

Leave a comment

Filed under Electronics DIY Project

FongTest01 refactoring notes

Execute fongmain2014nov0101.ino 2014nov01hkt1037, … >
Create global ISRs anf flags, … >
Define local ISRs and attach function, … >
Create serial ports, … >
Attach local ISRs, … >
Create FongSerial01, … >

Create FongTest01, … >>
Execute FongTest01::test(), … >>
Create FongBuzzer01, … >>
Create FongDio01, … >>
Create FongAio01, … >>
Create FongInt01, … >>
Create FongDebug01, … >>
Create FongText01, … >>
Create FongBlueTooth01, … >>

Test01 Menu … >>>
0 = Test Fongserial01.
1 = Test FongBuzzer01.
2 = Test FongDio01.
3 = Test FongAio01.
4 = Test FongInt01.
5 = Test FongText01.
b = Test FongBlueTooth01.
m = Menu
h = Help.
x = Exit.
Selection = ? >>>

.END

Leave a comment

Filed under Electronics DIY Project

我喺香港食花生嘅日子 – 小繪

little_draw_2014novo1o1

用樂譜記錄雨傘運動 – Littledraw 輔仁媒體 2014年11月1日 

http://www.vjmedia.com.hk/articles/2014/11/01/89469

香港的雨傘運動持續了一個多月,我想用樂譜繪畫香港這段重要的時刻,期望這段樂章能奏出美滿的結局。

畫樂譜前我選了〈Do You Hear The People Sing》,然後把事情的重點繪畫出來。

在樂譜的塗鴉上,大家不難發現我是「密集愛好症」患者,為免大家看到眼花,以下便是每段曲目的放大圖:

1-2

8月31日:中國全國人大常委員會為特首普選訂定框架

9月17日:學生罷課,行政會議成員李國章三問:「who cares?」

2-2

9月21日:市民在facebook上載學生相,參與「一人一相撐罷課」行動

9月22-26日:學界罷課

9月26日:添美道舉行的罷課集會,集會接近尾聲「奪回公民廣場」。

3-2

9月27日:凌晨警方重重包圍在公民廣場的100多名示威者,並開始清場。其中有使用胡椒噴霧,多人被射中,61人被捕。

4-2

9月28日:「佔中」凌晨正式啟動,警方於黃昏鎮壓和平示威。施放胡椒噴霧後,防暴警察於夏慤道舉起「警告催淚煙」、「離開否則開槍」警告旗(註:後來警方於記者會表示有人失誤展示「離開否則開槍」),並施放催淚彈,造成數十名示威者受傷。

5-2

9月29日:防暴警察亦於夏慤道、金鐘道、干諾道中、遮打道施放催淚彈。是次行動警方動員超過7000人,使用87枚催淚彈。

6-2

9月29日:警方施放催淚彈後,大量市民自發佔領港九多條主要街道。

7

9月29日:行動在凌晨起有在全港各處「遍地開花」,包括:金鐘、灣仔、銅鑼灣及旺角,學界罷課抗議,至少逾10萬人在港島和九龍集會。

8

9月30日:私家車衝向旺角群眾,入夜後,香港各地都下大雨和響起雷聲,示威者紛紛開傘擋雨。

9

10月1日:數百名示威者到灣仔金紫荊廣場外集結,晚間有大批示威者參與金鐘夏慤道。

10月2日:警方派出談判專家勸喻示威者。同日,有團體發起反佔中運動集會,被稱為「藍絲帶」行動。

10

10月2日:警方將近百袋藍色尼龍袋寫上「SUP TW」的物資,最少20枝旗、盾牌、黃色大桶胡椒噴霧及一桶寫明是「橡膠子彈」的大桶運入特首辦。及後,林鄭表示會短期晤學生。

11

10月3日:警方於銅鑼灣、灣仔、尖沙咀清場。銅鑼灣旺角同時受反佔中人士襲擊。

10月4日:便裝警員到政總,旺角反佔中人仕與示威者衝突持續,記者遇襲。

10月5日:反佔中男子涉非禮獲釋。另一名反佔中男子爬上通往中信大廈的天橋頂,要求同學生代表對話,開路給他三名子女上學。消防員在橋底張開氣墊戒備。

12

10月9日:政務司司長林鄭月娥表示,決定暫不會會面。

10月10日:逾400名居民乘旅遊巴到旺角踩場反佔中。

10月13日:佔中示威者用竹棚設路障;反佔中示威者圍攻壹傳媒總部。

10月14日:7名警方涉嫌濫用私刑涉毆打公民黨成員。

10月17日:「藍絲帶運動」召集人李偲嫣到大學抗議。

13

10月21日:中信拆鐵馬、學聯與香港政府首輪會談。

10月22日:反佔中人士及暴徒於旺角拆路障;一男子疑在旺角企圖縱火,被佔領人士制止;《蘋果日報》遭人淋黑液。

14

10月23日:獅子山上垂掛「我要真普選」巨型標語。

10月25日:反佔領行動於尖沙咀鐘樓外舉行集會,4記者遭藍絲帶集會者毆打。

15

10月24日:自由黨黨魁田北俊公開呼籲特首梁振英考慮向中央請辭。

10月29日:田北俊被免除全國政協委員職位。

16

為記錄「雨傘運動」,因而繪畫時參考了wikipedia,沒有加入太多個人主見和爛gag (冷笑話),只在最後一段樂章加上幻想的結局。

.END

Leave a comment

Filed under Electronics DIY Project

袋住先? – 布基纳法索

pocket_it_first_2014nov0101

pocket_it_first_2014nov0102

burkina_fasco_2014nov0103 copy

袋住先 – 布基纳法索


布基纳法索 – 维基百科

布基纳法索(法语:Burkina Faso),西非内陆国家,整个国境皆位于撒哈拉沙漠南缘。旧称上沃尔特(法语:Haute Volta),1984年8月改为现国名。首都瓦加杜古位于国土的正中央,是该国最大城市也是文化、经济中心。

布基纳法索为全球识字率最低的国家,只有约两成三的国民识字。

布基纳法索是世界上十个最不发达国家(低度开发国家)之一。

布基纳法索为西非文明古国,从3世纪到13世纪,在布拉(Bura)这个位于尼日尔和布基纳法索西南部,存在记载的铁器的布拉文化。如今境内约有60个不同部落,摩西族(Mossi)为该国内主要种族,原名上沃尔特,1984年改为“布基纳法索”,意思是“正人君子之国”,结合当地主要语言摩西语的burkina(意为“正人君子”)和班巴拉语的faso(意为“国家”)。

1896年时法国人来到上沃尔特地区并声称此地为法国属地,但长久以来统治该地的摩西人顽强反抗,直到1919年时首都瓦加杜古沦陷,一些原属科特迪瓦北方的省分被并入新成立的殖民地里,合称“上沃尔特”,是法属西非联邦的组合单位之一。

1932年法属西非因为经济上的考量被拆散成较小的单位,直到1937年时上沃尔特与周围地区才被重组并改称为“上科特迪瓦”(法文:Haute-Côte d’Ivoire)。1956年时法国通过新的法案重新检讨该国的海外属地政策,上沃尔特也在两年后的1958年时,被升格成法国底下的自治共和国,并在1960年8月5日脱离法国独立。

独立后的上沃尔特历经了长达数十年的政治不稳与多次政变,直到1990年代初期才开始有所起色。目前该国为多党民主制,现任总统为布莱兹·孔帕奥埃(Blaise Compaoré)。

2014年10月30日,约1500名示威者因不满已经四次连任总统的孔帕奥埃计划修改宪法延长任期,冲进国会、首都瓦加杜古的

市政厅和执政党总部纵火

除了一般平民外,参与示威的还包括了部分军方人士。而在遭到抗议民众闯入与破坏之后,该国国营的布基纳广播电视台(Radiodiffusion-Télévision du Burkina, RTB)也立即停止讯息的播送[2]。

.END

Leave a comment

Filed under Electronics DIY Project

Burkina Faso’s autocrat toppled – NYT

burkina_fasco_2014nov0101

Burkina Faso’s President Resigns, and General Takes Reins – By HERVÉ TAOKO and ALAN COWELL OCT. 31, 2014

http://www.nytimes.com/2014/11/01/world/africa/burkina-faso-unrest-blaise-compaore.html?_r=0

OUAGADOUGOU, Burkina Faso —

He recently boasted that the streets would never oust him,

not after he had won at the ballot box and survived multiple violent outbursts against his 27-year rule.

But after days of turmoil in which protesters burned the Parliament building here and

set fire to the homes of his relatives and aides,

President Blaise Compaoré of Burkina Faso announced Friday that he had stepped down — a rare case of the kind of popular uprising that toppled autocrats during the Arab Spring succeeding in sub-Saharan Africa.

The political demise of Mr. Compaoré, 63, who stoked some of the region’s worst conflicts but later refashioned himself into an elder statesman committed to resolving them, closed the book on one of Africa’s most enduring rulers in a region where some leaders cling to power for decades.

Smoke billowed from Burkina Faso’s Parliament building on Thursday. President Blaise Compaoré angered people with his plans to further extend his 27-year rule, inciting the uprising.Violent Protests Topple Government in Burkina FasoOCT. 30, 2014

Protesters celebrated seizing the offices of state television in Burkina Faso’s capital, Ouagadougou, on Thursday.Open Source: Images of a Dramatic Day in Burkina FasoOCT. 30, 2014

“When you imagine that our young men and women who are now 27 years old have known a single president, it’s absurd,” said Issouf Traore, a 44-year-old business owner who took to the streets this week to demand the president’s resignation.

With a mix of guile and charm, Mr. Compaoré managed to juggle alliances with Western governments and the Libyan leader Col. Muammar el-Qaddafi, turning himself into a regional power broker whose influence far outweighed the resources of his nation: a poor, landlocked country where more than half of the population has had no other leader.

“The demonstrations he could live with; he’s had that over the years,” said Pierre Englebert, a professor of African politics at Pomona College.

“When they went for Parliament and set it on fire, then it went to a different level. It showed a certain resolve by the demonstrators.”

Mr. Compaoré’s dual and often contradictory roles on the continent meant that he both fed conflict and, in later years, earned praise on the international stage for working to foster peace and greater stability.

“He has always been an extremely adept and sophisticated player in that region,” said Lansana Gberie, a historian from Sierra Leone who has written about the civil war there. “It has confounded many people.”

Historians have described Mr. Compaoré as a principal supporter of Charles G. Taylor, the former Liberian president convicted in 2012 of war crimes and crimes against humanity.

During the civil war in Sierra Leone more than a decade ago, American officials accused Mr. Compaoré of fueling the violence by funneling arms to rebels and sending mercenaries to fight alongside them against United Nations peacekeepers in exchange for diamonds.

But Mr. Compaoré often took on the role of regional peacemaker as well. This year, the United Nations secretary general, Ban Ki-moon, commended him for “his contribution to peace and stability in Mali,” including his help in reaching an agreement for a cease-fire after that country, a neighbor, was split in half by an insurgency.

A few years earlier, the United Nations Security Council had singled him out for “his critical role” in supporting the peace process in Ivory Coast — another country where he has been accused of stoking instability.

He remained close to the French during his presidency and came to be seen as a pro-Western leader and ally in the battle against Islamist militancy in the region.

“Over the years, Compaoré has played both the role of accomplice and peacemaker,” said Corinne Dufka, an associate director at Human Rights Watch.

As “big men” like Qaddafi, Mr. Taylor and Foday Sankoh of Sierra Leone were toppled or indicted, “he took on the role of elder statesman, filling a vacuum for the role of Francophone negotiator,” Ms. Dufka said. “But still, why Compaoré’s actions in support of abusive regimes didn’t receive more scrutiny — indeed, condemnation — has always been a bit of a mystery.”

Mr. Compaoré was only 36 when he seized power in a coup in 1987 that felled his former friend and military colleague Thomas Sankara, a national hero whose death many in Burkina Faso continue to grieve.

Though the precise circumstances of the killing have long been opaque, it has cast a long shadow over Mr. Compaoré for decades, with many residents continuing to see it as an unforgivable betrayal.

The recent protests against Mr. Compaoré sprang from a legislative proposal to remove term limits from the Constitution, which would have allowed him to extend his rule.

The limits were introduced in 2000, but because of a legal technicality, they were not applied to Mr. Compaoré until the 2005 elections, which he won. In 2010, he triumphed again, but he would have been ineligible to run in 2015 unless the term limits were rescinded.

Opposition to his plans for another term had been building for weeks. Anger exploded Thursday as protesters stormed the Parliament building, bursting past police lines to prevent lawmakers from voting on a draft of the legislation.

Thousands rampaged through the capital, Ouagadougou, burning the homes of presidential aides and relatives and storming state broadcasting facilities.

Social media sites showed images of demonstrators toppling a statue of Mr. Compaoré.

Residents reported that a heavily armed convoy carrying the president had been seen leaving Ouagadougou and heading south toward the border with Ghana, even as his resignation announcement was read out on television.

There were reports, too, that residents had barricaded roads to prevent him from fleeing.

Gen. Honoré Nabéré Traoré, the chief of staff of Burkina Faso’s armed forces, said at a news conference that he would “assume the responsibilities of head of state.” He said he was acting to fill the power vacuum left by Mr. Compaoré’s departure and to “save the life of the nation.”

Only hours earlier, General Traoré had announced plans to form a transitional government leading to elections in a year’s time.

It was not immediately clear how popular the general’s action would be, since he was regarded as close to Mr. Compaoré. Many protesters had said they favored the former defense minister, the retired Gen. Kouame Lougué, to oversee a transition to new elections.

Later in the day, the military officer who had announced that Mr. Compaoré was no longer in office, Lt. Col. Isaac Zida, seemingly also staked a claim to power, saying he was the new president, Reuters reported.

Mr. Compaoré had declared martial law for a few hours on Thursday, but then seemed to relent, offering negotiations on a transitional government and rescinding his martial-law decree.

Overnight, the president said he had “heard the message” from the protesters in this impoverished West African nation and understood “the strong desire for change.”

As huge crowds gathered in Ouagadougou, one army officer signaled that the military had abandoned the president, telling protesters that the army was “henceforth at the side of the people.”

Tom McDonald, a lawyer and former United States ambassador to Zimbabwe, said he doubted that the uprising in Burkina Faso would lead to the ouster of longtime rulers in other African nations.

“I would say it’s happy talk to predict a Sub-Saharan Africa Spring,” Mr. McDonald said. At the same time, he added, such events do not go unnoticed among other leaders.

“These guys look around at each other,” he said. “When the music stops, how many chairs are left?”

Hervé Taoko reported from Ouagadougou, and Alan Cowell from London. Greg Winter and Rick Gladstone contributed reporting from New York.

.END

Leave a comment

Filed under Electronics DIY Project

煤老板对魏鹏远家藏2亿元现金淡然一笑 – 新京报社论

副司长家藏2亿,审批不透明必然腐败 – 2014-11-01 新京报 社论

http://www.bjnews.com.cn/opinion/2014/11/01/339662.html

审批条件、标准、程序、权利救济安排等等,这些审批要素环节应公示公开,并且严格遵照执行,如此才能大大压缩权钱交易的空间。对于重大复杂审批事项,可以将听证作为必须程序。

今年5月以来,社会上一直传言国家能源局煤炭司原副司长魏鹏远家中被搜出2亿余元现金,点钱时烧坏4台验钞机。在昨日举行的最高人民检察院新闻发布会上,这一传言得到最高检反贪污贿赂总局徐进辉局长证实。

据徐进辉介绍,反贪总局依法立案查办了一批国家发改委工作人员的职务犯罪案件,目前共查办11人,都是司局级干部,涉案金额超千万元的有6人。

魏鹏远作为一名前副司长,居然光家中藏匿的现金就达2亿元,真令人咋舌。不过有些人对于这样的数字并不惊讶,此前媒体就报道说,

煤老板对魏鹏远家藏亿元现金淡然一笑,在煤价疯狂期,煤老板们为获得采矿权几亿都愿送

官员家有2亿余元现金,透露部分审批权背后的腐败现状。按徐进辉局长的分析,它说明了两点:一是所在部门权力过大、权力集中,二是审批权运转不透明,缺乏有效的内外部监督机制。

魏鹏远等人既是宏观政策制定者,又是具体项目审批者,可以直接决定许多企业的利益得失,权力和资本很容易搞到一起。

众所周知,权力过大和过于集中是腐败的一个根源。分解和约束过分集中的权力,实行决策与执行分离,过去说得多,做得少。近两年来强调简政放权,力推减少、下放、取消审批权,可有可无的行政许可原则上都要取消。这是切实的权力瘦身之举。

不过从反腐败的需要看,下放审批权固然重要,但还不够。许多审批权下放,不过是变换了一个图章而已,其中的权力寻租空间仍在,像矿产管理领域,一些审批权的存在是不可避免的,它必然与许多企业的利害得失联系在一起。

所以,我们在大力削减下放审批权同时,对于那些减不掉的审批权,要改善审批的过程,让审批透明,受社会监督,让权力运行公开透明起来。公开透明我们讲了多年,但至今尚未完全做到,这与相应的机制不完善有很大关系。

所以,审批条件、标准、程序、权利救济安排等等,这些审批要素环节应公示公开,并且严格遵照执行,如此才能大大压缩权钱交易的空间。可以探索网上审批、非面对面审批,对于重大复杂审批事项,可以将听证作为法定程序。

要防止两种情况,一是不给钱不办事,二是给钱乱办事。对于前者,要完善听证、申诉等程序。审批者故意不作为的,必须给予惩处,企业还可以依法索赔。美国能源部设有“听证和上诉办公室”,可供我们借鉴。对于后者,可以实行审批事项抽查制度,发现问题即行问责。透明了,责任落实了,审批权就会趋于规范。

编辑:戴玉玺


突尼斯世俗党派赢得议会选举 – 早报实习记者 任丹妮 记者 方晓 2014-10-31

自“茉莉花革命”以来,复兴党一直是突尼斯的第一大党,但过去两年的执政受到了民众的不满,此次失去了近20个席位。

■ 击败宗教政党但面临组阁困境

■ 11月总统大选该党领袖贝吉目前呼声最高

28日,突尼斯民众在呼声党总部外集会表达支持。30日,呼声党赢得议会大选。

突尼斯最高独立选举委员会30日公布国民代表大会选举初步结果,世俗党派突尼斯呼声党击败最大竞争对手,温和宗教政党“伊斯兰复兴运动”(复兴党),从而赢得大选。

还有上诉机会

按照选举委员会公布的数据,突尼斯呼声党获85席,复兴党获69席,排在第三的是由突尼斯富商组成的自由爱国联盟,获得16席位,接下来是极左派人民阵线获15席,“突尼斯希望”获8席,剩余24席由其他小党和独立候选人获得。

呼声党建立于2012年,融杂了一些左派、中右派、反对派和前本·阿里政府的一些成员,一直对伊斯兰党派复兴党充满敌意。自“茉莉花革命”以来,复兴党一直是突尼斯的第一大党,但过去两年的执政受到了民众的不满,此次失去了近20个席位。

此次突尼斯议会选举的登记选民有大约520万人,投票率为69%。新华社报道称,按照相关规定,初步结果公布后,各政党和独立候选人可对选举过程中出现的问题向选举委员会提出质疑、上诉,最终选举结果在11月24日前公布。

分析称,最终结果可能还会有些微调,这个微调对呼声党而言可能颇具意义。

和谁联合组阁

获得席数最多的党派——呼声党将重组政府,将与11月23日选举的总统一起,成为未来五年突尼斯的新一届政府,但由于“呼声党”只占了85个席位,而根据规定,只有获得议会一半的票数(109)才能通过新政府组建方案,因此“呼声党”不得不与其他党派联合组阁以确保能达到109票的支持。

“我们将选择与我们理念最接近的来组成‘民主大家庭’。”呼声党领袖贝吉在近期的采访中暗示将与世俗党派联合组阁。

突尼斯媒体周三对联合组阁的可能性进行了猜测。“最好的情况是呼声党和复兴党联合,这样未来五年的政府能最稳定。”突尼斯《快报》称。

突尼斯《时代报》则认为,呼声党面临着两难的困境,和其自由民主理念相投的突尼斯希望党,只有8个席位,不得不做的选择可能是和极左派人民阵线结盟,至少人民阵线不会在经济层面与其相左。其次,去年人民阵线的两名重要领袖遭暗杀,该党因此把复兴党视为最大仇人,那么加上人民阵线的15个席位,可以达到108席。

“牺牲性投票”

很多突尼斯媒体和民众评价这次的投票是一次“有用的投票”,甚至是“牺牲性投票”。

“很多投呼声党的人只是为了赶复兴党下台。为了让这次投票变得‘有用’,很多小党派只好牺牲。所以如果呼声党和复兴党联合组阁,那么呼声党就是背叛所有因为反对复兴党才投他们的人,那样就一点意义也没有了。”22岁的突尼斯大学生Skander Mezghani在接受早报记者采访时说,“不过这个可能性不大,呼声党已经有过表态。”

  法国franceinfo广播电台选举当天采访了一个坐在剧院门口的突尼斯男子,他说:“我们已经受够了伊斯兰党派,也厌烦透了本·阿里的旧同僚。”

这似乎很能代表大多数突尼斯人的心声,投票前很大一部分突尼斯人犹豫不决,法国媒体甚至发文称,“突尼斯人民在伊斯兰和‘本·阿里’之间进行抉择”。在“茉莉花革命”中大放异彩的突尼斯博客新闻网站nawaat则形容2014的议会选举,是在“矮子里面拔将军”,不得不选相对不那么差的。

“比起腐败,极端伊斯兰分子是更难处理的问题。教义不能当作法律,我们要的是真正的民主。”Skander对早报记者表示,“不过最关键还要是看总统选举和最后的组阁结果,这将决定呼声党此次胜利的意义。现在取得的成绩还很简单。”

将迎总统选举

突尼斯此次议会选举平稳地进行,欧盟观察团发表监督报告,认为选举过程公开透明,结果可信。11月23日,突尼斯将继续迎来总统选举,目前民调显示,排名最高的是呼声党领袖贝吉。

新一届议会和政府的诞生,或将带领突尼斯翻开历史新一页。在多数“阿拉伯之春”国家仍在遭受混乱和动荡的时期,突尼斯或以这次平稳的选举过渡竖起了风向标。

“我希望新一届政府是民主党派当权,我们要的是真正的民主。”Skander说。

2010年底,突尼斯出现被称为“茉莉花革命”的社会动荡。次年1月,在突尼斯执政长达23年的领导人本·阿里下台。今年6月,突尼斯各政治派别通过全国对话大会确定新议会选举和总统选举日期。这次投票选出的国民代表大会将取代先前过渡性质的制宪议会。

录入编辑:周子静


2元鸡腿饭还送可乐 外卖大军包围农大 – 潇湘晨报 肖拓 2014-10-31

http://www.xxcb.cn/event/changsha/2014-10-31/8941505.html

10月30日,湖南农业大学芷兰学生宿舍,一堆送外卖的等在宿舍门口。农大一天最多有近6000人叫外卖,形成一个庞大的市场。

10 月30 日,湖南农业大学芷兰学生宿舍,宿舍入口贴有禁止外卖进入的标示,外卖员只能在门口等着学生出来拿外卖。组图/潇湘晨报记者 华剑

2 块钱可买到鸡腿饭配可乐,1 块钱可吃到原本需要10 元的盖码饭,还送饭上门,这像不像“ 天上掉馅饼”几个月前,湖南农业大学的校外餐饮店将外卖搬上网络平台,学生只要安装相应的手机软件,就可参加优惠活动。与食堂一顿饭要花6—9元相比,这些“低价”外卖吸引了不少学生。

然而,这几乎免费的用餐形式并没有受到校方欢迎。面对每天近700 台次的电动车外卖大军,校方“出于净化校园环境”的考虑,组织多部门阻截外卖。

“你好,外卖到了。”10 月30 日上午11 点半,湖南农业大学芷兰学生公寓17 栋后门,一群外卖员在打电话。他们倚着电动车,时不时瞄一下前方的几个保安,双方在雨中对峙着。从29 日开始,校方不再允许外卖送进宿舍区,外卖员只好打电话叫学生下来取。

现场每个门设5 个保安,阻截外卖送餐

30 日上午11 点,快到饭点,湖南农大宿舍区外的外卖员开始多了起来。他们将车停在宿舍区大门前方3米的位置,旁边“严禁一切小摊小贩外卖进入学生园区”的标语很醒目。

有学生告诉潇湘晨报记者,标语是29 日刚贴的。自29 日开始,学校不允许外卖员进入各大园区,近40 名工作人员轮流严守5 个大门,最多的时候1 个门有5 名保安。校方不让进,但外卖员依然不少。从11 点到11 点半,记者见到近50 个外卖员,其余4 个大门口也有大群外卖员集结。相比之下,学校食堂很冷清。中午12 点左右,记者到达该校学生一食堂时,发现用餐的学生不超过10 个。外卖不能送到寝室,这也影响了部分学生点外卖的热情。住16 栋的小李穿着睡衣拖鞋在门口四处张望,一个外卖员推车上前:“是你的不?”话音还没落,一名保安大声喝道:“ 离远点!”小李快速拿走外卖,有些不耐烦,她表示不会再点外卖了。

学生网上点外卖,“低价,还送上门”

几个月前,湖南农大附近的快餐店开始转变经营方式,开始电子配送。学生只需要下载相应的手机软件或登录网站,便可以网络点单,而这些软件则提供各种优惠活动。

  30 日上午,学生小王通过网络平台在餐馆订了一份盖码饭,饭的原价为10 元,参加“ 五元管饱”(指定套餐不管原价多少,都只要5 元,偶尔还赠送饮料)活动,9 元变5 元。再通过“ 在线支付满4 元立减4 元”优惠,又减免了4 元。最终,小王只出了1 块钱,就吃到了原本需要10 块钱的盖码饭,还送饭上门。

  一位不愿具名的女生表示,她此前曾连续吃了半个月的2 元鸡腿饭,还送可乐或红牛。她告诉记者,学校食堂内的米饭1 毛钱1 两,青菜2 元,带肉的菜3.5 元,全荤的达5 元以上,一顿饭吃下来要花6 到9 元,“两者对比,外卖更低价,还送上门,更有吸引力。”

在学生的指引下,记者登录一款订餐软件,定位“湖南农业大学”,发现附近可配送的外卖店达170 家,月售最高的店家订单达3911 单。

校方考虑环境和食品安全,将外卖堵在门外

湖南农大后勤服务集团总经理刘浩源表示,学校最近做了一次详细统计,有六分之一的学生——超过6000人点外卖,“29 日前,每天有近700 台次的电动车进学校送外卖,学校现在每天产生的白色垃圾、餐饮垃圾多达9吨。”刘浩源说,自从开始网络点外卖后,学校附近的餐饮店从69 家增加到289 家,“有的店面看不到顾客,但厨房内的锅子却忙不停。”

刘浩源介绍,考虑到学生用餐安全问题,以及外卖大军对校园治安秩序的影响,学校曾多次开会讨论外卖问题,最终决定组织保卫处、后勤服务集团等多部门阻截,“不让外卖进学校”。

外卖的市场份额增大,或将影响到食堂营收,这是否是学校干涉外卖的原因? 该校宣传部副部长米正华对此予以否认,他表示,学校“ 主张学生不吃外卖”,是为了净化校园环境和食品安全问题。刘浩源也表示,外卖对学校食堂的影响并不大,学校所有食堂月营业额仅减少了1 万元。但对于外卖市场可能对学校食堂产生的影响,刘浩源表示,此前另一所高校后勤负责人曾与他聊及外卖影响,对方称受外卖影响,该校食堂营业额下滑近50%。

刘浩源表示,保安堵截外卖员,但效果依然有限。米正华等人表示,学校也想呼吁相关部门规范市场。

订单多了,总营业额却相差不大

小孙一家来自沈阳。9年前,她还在农大上学时,父母就来学校附近开了个拌饭店,距离最近的学生公寓不足百米。30 日中午记者到达时,店内仅有3 人在用餐。

小孙母亲说,学生低价买外卖,他们快餐店却没亏,因为优惠活动大都是订餐平台给的。一份10 元的饭,学生付1 元,订餐平台会补贴7 元。29 日之前,他们每天可接200 多分订单,但学校阻截后,订量减了一半。对于学校的做法,小孙表示愿意配合,“能多卖就多卖,少卖点也问题不大”。

小孙家不是第一批尝试网络订餐的。周边的店面都开始订餐,没有了客源,他们不得不加入网络竞争。“从目前的情况来看,优惠活动多,销量大,订餐平台的补贴也很准时。”小孙说,但这种模式能持续多久,她无法给出肯定的答案。在她看来,附近的快餐店参与网络订餐也是被逼的,总营业额实际相差不大。

记者走访了多个快餐店,说法大多与小孙的一致:作为餐厅,他们必须顺应技术和学生习惯的变化,抗拒这种变化,只能是被市场淘汰。

潇湘晨报记者 覃剑 何滢


中国空置近5000万套房屋可能吗?- 第一财经日报 李秀中 2014-10-27

http://www.xxcb.cn/house/zixuntoutiao/2014-10/8940760.html

中国官方并不发布空置房数据,而西南财经大学的一项数据引发了巨大争论。这场关乎中国经济关键数据的争议还在继续,日前,西南财大方面做出了进一步解释。

今年上半年,西南财大中国家庭金融调查与研究中心发布报告称,

2013年,我国城镇住宅市场的整体空置率达到22.4%,城镇空置房为4898万套。

对此,华远地产原董事长任志强称此绝不可能。争议由此发酵。

西南财大中国家庭金融调查与研究中心主任甘犁的结论基于中国家庭金融调查项目(CHFS)的数据:全国城镇地区住房空置率为22.4%,约为 4900万套住房。商品房空置率为26.3%,约为2700万套。经适房空置率为23.3%,约为200万套。这一数据曾获得王志纲等地产大佬的认同。

任志强则从住宅竣工数量推算。1998年至2013年住宅竣工面积约106亿平方米,约1.1亿套住宅。其中,房地产开发为6700万套。按 1998年旧房拆除量2.4亿平方米推算,16年间拆除30多亿平方米,净增约70亿平方米住房面积。1998年到2013年,城镇新增人口约2.2 亿人,折算城镇新增约7000万个家庭。因此,住房套数和家庭数大体一致。

在任志强的质疑之后,甘犁当时曾作出过书面回应。而在10月24日由西南财经大学和新加坡管理大学联合举办的“西财-新大‘经济转型期的管理-以中国及新加坡为例’国际论坛”上,甘犁再次专门作出更为深入的回应,解答空置率之谜。

  甘犁说:“这是非常大的谜,这个谜怎么解决? 我们一家一户走下来看到了这么多空置房,但是国家宏观大数上算一算好像不应该有这么多空置房。解决这个谜底就是城镇化的谜底。就是我们对城镇化要有一个充分理解。空置率之谜要通过城镇化揭开这个谜底。”

  关键在于,由于统计方式的变化,许多农民的居住地在统计中由农村变成了城镇,有数千万个家庭因此“带着房子进城”了。

首先,CHFS定义的住房空置是指城镇地区无人居住的家庭自有住房,包括:一套房家庭因外出务工等原因而无人居住的住房;多套房家庭既未自住也无他人居住的住房。

“比如,在北京上班,房子在成都空着的,也算空置率。”

甘犁说,一般认为,城镇化是农村居民离开居住地,“扛包进城”生活工作,也就是“主动进城”。他们或租房或购房,有刚性居住需求。但是,城镇化还包括另一类通常被忽视的城镇化:

居住地由农村变成了城镇

当地农村居民也因此统计为城镇常住居民,是城镇化的一部分。

国家统计局公布了从2009年至2013年历年统计用区划和城乡分类代码。仅此期间,全国70万个社区(居委会、村委会)中有3.8%从乡村变为了城镇,占城镇社区的11.8%。“居住在社区上的居民就从农村居民变成了城镇居民,他的户籍是没有变化的,他的房子还在那里,他住着原来的房子。”

CHFS的数据还显示,2009到2013年,每个省的城镇化率的上升速度跟“被进城”的比例是相关的。基于CHFS数据,2013年常住地人口结构,城镇地区居民中的农业户籍人口,“被动进城”占比14.3%,而“主动进城”占比11%。

从住房需求上来说,“被动进城”家庭和“主动进城”家庭是非常不同的,和城镇户籍是比较接近的,而且少于城镇户籍,因为他们是“带着房子进城”的。

所以不能把“被动进城”家庭当成“主动进城”家庭,认为有很多刚性需求,要买很多房子。

甘犁认为,2000~2013年城镇新建住房7000万套之外,城镇地区至少还新增了四五千万套,这是由“被动”进城的家庭带进来的。

“你会看到被动进城比例越高地区住房空置率也越高,不是说这些被动进城家庭农村的自建房有空,空是空在商品房里面。因为城镇化建了很多房子,但是大量被动进城不需要房子,所以商品房是空着的。”

  甘犁认为,“被进城”居民明显多于主动进城。不区分两类进城居民将导致住房需求被高估。

对城镇化的误解有可能是导致中国3000万套商品房多建的原因之一。

“从供给角度是多供给了,因为对城镇化的错误理解认为有很多需求,但是实际上大部分超过一半的城镇化暂时没有这样的住房需求。

从需求角度来讲,就是多套房购买让这些多建的房子还是卖掉了,这是我们在需求供给一个非常严重的错配。”

.END

Leave a comment

Filed under Electronics DIY Project

Arduino String practising notes

<<< Test01 Menu <<<.
0 = Test Fongserial01.
1 = Test FongBuzzer01.
2 = Test FongDio01.
3 = Test FongAio01.
4 = Test FongInt01.
5 = Test FongText01.
b = Test FongBlueTooth01.
m = Menu
h = Help.
x = Exit.
<<< Selection = ? <<<
Selection = b <<<
Execute FongBlueTooth::test(), …
0 = Set slave all modules.
1 = Set master all modules.
2 = Set password & binding address all modules.
3 = Check out Modules 0,1.
4 = Set master Module 0, slave Module 1.
5 = Set master Modules 0,1.
6 = Display current state all modules.
7 = Test String functions.
8 = Reserved.
p = Power Test.
r = Power Reset.
m = Menu.
h = Help.
x = Exit.

Selection = ? <<<
Selection = 7 <<<
Set master Modules 0,1. <<<
Module num = 0
AT Command = Set Master, Reply = OK

AT Command = Ask Role, Reply = +ROLE:1
OK

AT Command = Set Slave, Reply = OK

AT Command = Ask Role, Reply = +ROLE:0
OK

AT Command = Ask State, Reply = +STATE:CONNECTED
OK


// *** FongBlueTooth01.cpp *******

// ********************************************************************
// FongBlueTooth01b – TL Fong 2014oct31hkt1721
// ********************************************************************

#include <FongBlueTooth01.h>

// *** Constructors ***

FongBlueTooth01::FongBlueTooth01(FongBuzzer01 *fbuz, FongDio01 *fdio, FongAio01 *faio, \
FongText01 *ftext, FongDebug01 *fdb, int8_t testNum, \
int8_t debugNum)
{
_fbuz = fbuz;
_fdio = fdio;
_faio = faio;
_ftext = ftext;
_fdb = fdb;
_testNum = testNum;
_debugNum = debugNum;

// _fdb->print(“\n\tCreating FongBlueTooth01 2014oct29hkt1257, …\n”, \
// _testNum, _debugNum);
initAll(testNum);
initModuleState(_testNum, _debugNum);
}

void FongBlueTooth01::initAll(int8_t testNum)
{
initModuleConfig(testNum);
disableCommandModeAllModules(testNum);
powerReset(_testNum, _debugNum);
}

// *** Power functions ***

void FongBlueTooth01::powerOn(int8_t testNum)
{
_fdio->setDioPinLow(PowerPin);
delay(500);
}

void FongBlueTooth01::powerOff(int8_t testNum)
{
_fdio->setDioPinHigh(PowerPin);
delay(500);
}

void FongBlueTooth01::powerReset(int8_t testNum, int8_t debugNum)
{
// _fdb->print(“\n\tNow resetting power, …\n”, _testNum, _debugNum);
disableCommandModeAllModules(testNum);
powerOff(testNum);
delay(500);
powerOn(testNum);
delay(500);
}

void FongBlueTooth01::powerTest(int8_t testNum)
{
powerOff(testNum);
delay(500);
powerOn(testNum);
delay(1000);
powerOff(testNum);
delay(500);
}

// *** Command mode functions ***

void FongBlueTooth01::enableCommandMode(int8_t moduleNum)
{
setAtKeyHigh(moduleNum);
}

void FongBlueTooth01::enableCommandModeAllModules(int8_t testNum)
{
for (int8_t i = FirstModuleNum; i <= LastModuleNum; i++)
{
enableCommandMode(i);
}
}

void FongBlueTooth01::disableCommandMode(int8_t moduleNum)
{
setAtKeyLow(moduleNum);
}

void FongBlueTooth01::disableCommandModeAllModules(int8_t testNum)
{
for (int8_t i = FirstModuleNum; i <= LastModuleNum; i++)
{
disableCommandMode(i);
}
}

void FongBlueTooth01::setAtKeyHigh(int8_t moduleNum)
{
int8_t dioPinNum;
dioPinNum = moduleConfig[moduleNum][AtKeyIndex];
_fdio->setDioPinHigh(dioPinNum);
}

void FongBlueTooth01::setAtKeyHigh(int8_t firstModuleNum, int8_t lastModuleNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
setAtKeyHigh(i);
}
}

void FongBlueTooth01::setAtKeyHighAllModules(int8_t testNum)
{
setAtKeyHigh(FirstModuleNum, LastModuleNum);

}

void FongBlueTooth01::setAtKeyLowAllModules(int8_t testNum)
{
setAtKeyLow(FirstModuleNum, LastModuleNum);

}

void FongBlueTooth01::setAtKeyLow(int8_t moduleNum)
{
int8_t dioPinNum;
dioPinNum = moduleConfig[moduleNum][AtKeyIndex];
_fdio->setDioPinLow(dioPinNum);
}

void FongBlueTooth01::setAtKeyLow(int8_t firstModuleNum, int8_t lastModuleNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
setAtKeyLow(i);
}
}

void FongBlueTooth01::cmdModeTest(int8_t testNum)
{
setAtKeyHighAllModules(testNum);
delay(1000);
setAtKeyLowAllModules(testNum);
}

/// *** Module config functions ***

void FongBlueTooth01::initModuleConfig(int8_t testNum)
{
int8_t moduleNum;

moduleNum = 0;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port1;
moduleConfig[moduleNum][AtKeyIndex] = DioPin0;
moduleConfig[moduleNum][RoleIndex] = MasterRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress0;

moduleNum = 1;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port2;
moduleConfig[moduleNum][AtKeyIndex] = DioPin1;
moduleConfig[moduleNum][RoleIndex] = MasterRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress1;

moduleNum = 2;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port3;
moduleConfig[moduleNum][AtKeyIndex] = DioPin2;
moduleConfig[moduleNum][RoleIndex] = MasterRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress2;

moduleNum = 3;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port4;
moduleConfig[moduleNum][AtKeyIndex] = DioPin3;
moduleConfig[moduleNum][RoleIndex] = SlaveRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress3;

moduleNum = 4;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port5;
moduleConfig[moduleNum][AtKeyIndex] = DioPin4;
moduleConfig[moduleNum][RoleIndex] = SlaveRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress4;

moduleNum = 5;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port6;
moduleConfig[moduleNum][AtKeyIndex] = DioPin5;
moduleConfig[moduleNum][RoleIndex] = SlaveRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress5;

moduleNum = 6;
moduleConfig[moduleNum][ModuleTypeIndex] = WaveSenHm05;
moduleConfig[moduleNum][PortNumIndex] = Port7;
moduleConfig[moduleNum][AtKeyIndex] = DioPin6;
moduleConfig[moduleNum][RoleIndex] = SlaveRole;
moduleConfig[moduleNum][AddressIndex] = BlueToothAddress6;
}

// *** AT command string array functions ***

void FongBlueTooth01::initcmdCharArrayArray(int8_t moduleType)
{
// *** Reset and default ***
cmdCharArrayArrayHm05Basic[Reset] = “AT+RESET\r\n”;
cmdCharArrayArrayHm05Basic[SetDefaultParameter] = “AT+ORGL\r\n”;

// *** Set ***
cmdCharArrayArrayHm05Basic[SetRoleSlave] = “AT+ROLE=0\r\n”;
cmdCharArrayArrayHm05Basic[SetRoleMaster] = “AT+ROLE=1\r\n”;
cmdCharArrayArrayHm05Basic[SetConnectModeAnyAddress] = “AT+CMODE=1\r\n”;
cmdCharArrayArrayHm05Basic[SetConnectModeFixedAddress] = “AT+CMODE=0\r\n”;

// *** Ask ***
cmdCharArrayArrayHm05Basic[SayHello] = “AT\r\n”;
cmdCharArrayArrayHm05Basic[AskVersion] = “AT+VERSION?\r\n”;
cmdCharArrayArrayHm05Basic[AskName] = “AT+NAME?\r\n”;
cmdCharArrayArrayHm05Basic[AskAddress] = “AT+ADDR?\r\n”;
cmdCharArrayArrayHm05Basic[AskRole] = “AT+ROLE?\r\n”;
cmdCharArrayArrayHm05Basic[AskConnectMode] = “AT+CMODE?\r\n”;
cmdCharArrayArrayHm05Basic[AskState] = “AT+STATE?\r\n”;
cmdCharArrayArrayHm05Basic[AskPassWord] = “AT+PSWD?\r\n”;
cmdCharArrayArrayHm05Basic[AskBindAddress] = “AT+BIND?\r\n”;
cmdCharArrayArrayHm05Basic[InquireDevice] = “AT+INQ\r\n”;
cmdCharArrayArrayHm05Basic[DisconnectDevice] = “AT+DISC\r\n”;

// *** Address specific ***
cmdCharArrayArrayHm05Basic[ConnectDevice123456abcdef] = “AT+LINK=1234,56,abcdef\r\n”;
cmdCharArrayArrayHm05Basic[AskAccessCode] = “AT+IAC?\r\n”;
cmdCharArrayArrayHm05Basic[AskInquiryAccessCode] = “AT+INQM?\r\n”;
cmdCharArrayArrayHm05Basic[CheckPair123456abcdef] = “AT+FSAD=1234,56,abcdef\r\n”;
cmdCharArrayArrayHm05Basic[SetPair123456abcdef20] = “AT+PAIR=1234,56,abcdef,20\r\n”;
cmdCharArrayArrayHm05Basic[AskSerialParameter] = “AT+UART?\r\n”;
cmdCharArrayArrayHm05Basic[SetSerialParameter9600n81] =”AT+UART=9600,0,0\r\n”;

cmdCharArrayArrayHm05Basic[SetNameHc05] = “AT+NAME=Hc-05\r\n”;
cmdCharArrayArrayHm05Basic[SetNameTlfong01] = “AT+NAME=tlfong01\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWord1234] = “AT+PSWD=1234\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWord0001] = “AT+PSWD=0001\r\n”;

cmdCharArrayArrayHm05Basic[SetBindAddress123456abcdef] = “AT+BIND=1234,56,abcdef\r\n”;
cmdCharArrayArrayHm05Basic[AskRemoteName000272od2224] = “AT+RNAME?0002,72,od2224\r\n”;

cmdCharArrayArrayHm05Basic[SetPassWordModule0] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule1] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule2] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule3] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule4] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule5] = “AT+PSWD=0000\r\n”;
cmdCharArrayArrayHm05Basic[SetPassWordModule6] = “AT+PSWD=0000\r\n”;

// cmdCharArrayArrayHm05Basic[SetBindAddressModule0] = “AT+BIND=2014:4:173229\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule1] = “AT+BIND=2014:4:224194\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule2] = “AT+BIND=2014:4:173390\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule3] = “AT+BIND=2014:4:223353\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule4] = “AT+BIND=2014:4:173177\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule5] = “AT+BIND=2014:4:223975\r\n”;
// cmdCharArrayArrayHm05Basic[SetBindAddressModule6] = “AT+BIND=2014:4:173054\r\n”;

cmdCharArrayArrayHm05Basic[SetBindAddressModule0] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule1] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule2] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule3] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule4] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule5] = “AT+BIND=0000:0:000000\r\n”;
cmdCharArrayArrayHm05Basic[SetBindAddressModule6] = “AT+BIND=0000:0:000000\r\n”;

// *** Other commands ***
// cmdCharArrayArrayHm05Basic[SetConnectModeSpecifiedAddress] = “AT+CMODE=0\r\n”;
// cmdCharArrayArrayHm05Basic[ConnectModule1] = “AT+LINK=2014,4,223353\r\n”;
// cmdCharArrayArrayHm05Basic[AskPio89] = “AT+POLAR?\r\n”;
// cmdCharArrayArrayHm05Basic[SetPio8900] = “AT+POLAR=0,0\r\n”;
// cmdCharArrayArrayHm05Basic[SetPio8911] = “AT+POLAR=1,1\r\n”;
// cmdCharArrayArrayHm05Basic[SetAccessCode9e8b3f] = “AT+IAC=9e8b3f\r\n”;
// cmdCharArrayArrayHm05Basic[SetInquiryAccessCode1948] = “AT+INQM=1,9,48\r\n”;

// *** CduinoHm09: ***
// commandStringArray[SayHello] = “AT”;
// commandStringArray[SetSlaveRole] = “AT+ROLE=0″;
// commandStringArray[SetMasterRole] = “AT+ROLE=1″;
// commandStringArray[AskRole] = “AT+ROLE?”;
// commandStringArray[SetPio8LedOffPio9LedOn] = “AT+POLAR=0,1″;
// commandStringArray[SetPio8LedOnPio9LedOff] = “AT+POLAR=0,1″;
// commandStringArray[AskPio8Pio9] = “AT+POLAR=?”;
// commandStringArray[SetConnectAnyAddress] = “AT+CMODE=1″;
// commandStringArray[SetPassWord1234] = “AT+PSWD=1234″;
// commandStringArray[AskPassWord] = “AT+PIN?”;
// commandStringArray[AskState] = “AT+STATE?”;
// commandStringArray[AskVersion] = “AT+VERSION?”;
// commandStringArray[AskName] = “AT+NAME?”;

// *** case BolutekMdBc04: ***
// commandStringArray[SayHello] = “AT\r\n”;
// commandStringArray[SetSlaveRole] = “AT+ROLE=0\r\n”;
// commandStringArray[SetMasterRole] = “AT+ROLE=1\r\n”;
// commandStringArray[AskRole] = “AT+ROLE\r\n”;
// commandStringArray[SetPio8LedOffPio9LedOn] = “AT+POLAR=0,1\r\n”;
// commandStringArray[SetPio8LedOnPio9LedOff] = “AT+POLAR=0,1\r\n”;
// commandStringArray[AskPio8Pio9] = “AT+POLAR=\r\n”;
// commandStringArray[SetConnectAnyAddress] = “AT+CMODE=1\r\n”;
// commandStringArray[SetPassWord1234] = “AT+PSWD=1234\r\n”;
// commandStringArray[AskPassWord] = “AT+PIN\r\n”;
// commandStringArray[AskState] = “AT+STATE\r\n”;
// commandStringArray[AskVersion] = “AT+VERSION\r\n”;
// commandStringArray[AskName] = “AT+NAME\r\n”;
}

// *** Menu functions ***

void FongBlueTooth01::printSelectMenu(int8_t testNum)
{
printSelectMenu(FirstSelectNum, LastSelectNum, testNum);
}

char FongBlueTooth01::askSelectChar(String askString, int8_t testNum, int8_t debugNum)
{
char selectChar;
char dummyChar;

// *** flush read buffer ***
while (Serial.available() > 0) {dummyChar = Serial.read();} // flush

// *** get user selection ***
Serial.print(F(“\n\t”));
Serial.print(askString);
Serial.println(F(” = ? <<< “));

while (Serial.available() == false) {} // wait for char
selectChar = Serial.read();
Serial.print(F(“\t”));
Serial.print(askString);
Serial.print(F(” = “));
Serial.print(selectChar);
Serial.println(F(” <<<“));
return selectChar;
}

int8_t FongBlueTooth01::askSelectDigit(String askString, int8_t testNum, int8_t debugNum)
{
char selectChar = askSelectChar(askString, testNum, debugNum);
int8_t selectDigit = selectChar – ‘0’;
return selectDigit;
}

int8_t FongBlueTooth01::askRepeatNum(String askString, int8_t testNum, int8_t debugNum)
{
int8_t repeatNum;
int8_t selectDigit = askSelectDigit(askString, testNum, debugNum);
if (selectDigit == 0) repeatNum = 0;
else if (selectDigit == 1) repeatNum = 500;
else if (selectDigit == 2) repeatNum = 1000;
else if (selectDigit == 3) repeatNum = 2000;
else repeatNum = 0;
return repeatNum;
}

// *** Test functions ***

void FongBlueTooth01::repeatSerialWrite(int8_t moduleNum, int8_t testNum)
{
int8_t portNum = moduleConfig[moduleNum][PortNumIndex];
_ftext->staticSerialWrite(portNum, RepeatCount200, “AT\r\n”, “dummy”);
}

void FongBlueTooth01::test(int8_t testNum, int8_t debugNum)
{
char selectChar;
char functionChar;
char portChar;
char repeatChar;

printSelectMenu(testNum);
initcmdCharArrayArray(testNum);
while (selectChar != ‘x’)
{
selectChar = askSelectChar(“Selection”, testNum, debugNum);
if (selectChar == ‘x’)
break;
else
execBlueToothFunction(selectChar, testNum, debugNum);
}
}

/*
void FongBlueTooth01::exeCommand(int8_t moduleNum, int8_t cmdNum)
{
int8_t portNum = moduleConfig[moduleNum][PortNumIndex];
int8_t moduleType = moduleConfig[moduleNum][ModuleTypeIndex];
setAtKeyHigh(moduleNum);
delay(100);
if (moduleType == WaveSenHm05)
exeCommand(portNum, cmdCharArrayArrayHm05Basic, cmdNum);
else if (moduleType == CduinoHm09)
exeCommand(portNum, cmdCharArrayArrayHm09Basic, cmdNum);
else if (moduleType == BolutekMdBc04)
exeCommand(portNum, cmdCharArrayArrayBc04Basic, cmdNum);
setAtKeyLow(moduleNum);
delay(100);
}
*/

String FongBlueTooth01::exeCommand(int8_t moduleNum, int8_t cmdNum)
{
String moduleReplyStr;
int8_t portNum = moduleConfig[moduleNum][PortNumIndex];
int8_t moduleType = moduleConfig[moduleNum][ModuleTypeIndex];
setAtKeyHigh(moduleNum);
delay(100);
if (moduleType == WaveSenHm05)
moduleReplyStr = exeCommand(portNum, cmdCharArrayArrayHm05Basic, cmdNum);
else if (moduleType == CduinoHm09)
moduleReplyStr = exeCommand(portNum, cmdCharArrayArrayHm09Basic, cmdNum);
else if (moduleType == BolutekMdBc04)
moduleReplyStr = exeCommand(portNum, cmdCharArrayArrayBc04Basic, cmdNum);
setAtKeyLow(moduleNum);
delay(100);
return moduleReplyStr;
}

void FongBlueTooth01::exeCommand(int8_t firstModuleNum, int8_t lastModuleNum, int8_t cmdNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
_fdb->print(“\t\tModule num = “, i, _testNum, _debugNum);
exeCommand(i, cmdNum);
}
}

void FongBlueTooth01::exeCommandAllModules(int8_t cmdNum)
{
exeCommand(FirstModuleNum, LastModuleNum, cmdNum);
}

/*
void FongBlueTooth01::exeCommand(int8_t portNum, char *cmdCharArrayArray[], int8_t cmdNum)
{
String cmdStr;
String rxdStr;
char writeCharArray[32];
cmdStr = cmdCharArrayArray[cmdNum];
cmdStr.toCharArray(writeCharArray, 32);
exeCommand(portNum, writeCharArray);
}
*/

String FongBlueTooth01::exeCommand(int8_t portNum, char *cmdCharArrayArray[], int8_t cmdNum)
{
String cmdStr;
String rxdStr;
char writeCharArray[32];
cmdStr = cmdCharArrayArray[cmdNum];
cmdStr.toCharArray(writeCharArray, 32);
rxdStr = exeCommand(portNum, writeCharArray);
return rxdStr;
}

/*
void FongBlueTooth01::exeCommand(int8_t portNum, char writeCharArray[])
{
String rxdStr;
_fdb->print(“\n\tAT command *** = “, _testNum, _debugNum);
_fdb->print(writeCharArray, _testNum, _debugNum);
rxdStr = _ftext->staticSerialWritePauseRead(portNum, MilliSec100, writeCharArray, “dummy”);
_fdb->print(“\n\tAT response *** = “, _testNum, _debugNum);
_fdb->print(rxdStr, _testNum, _debugNum);
}
*/

String FongBlueTooth01::exeCommand(int8_t portNum, char writeCharArray[])
{
String rxdStr;
_fdb->print(“\n\tAT command *** = “, _testNum, _debugNum);
_fdb->print(writeCharArray, _testNum, _debugNum);
rxdStr = _ftext->staticSerialWritePauseRead(portNum, MilliSec100, writeCharArray, “dummy”);
_fdb->print(“\n\tAT response *** = “, _testNum, _debugNum);
_fdb->print(rxdStr, _testNum, _debugNum);
return rxdStr;
}

void FongBlueTooth01::setMasterAnyAddress(int8_t moduleNum)
{
Serial.print(F(“\n\tModule Num = “));
Serial.println(moduleNum);
exeCommand(moduleNum, SetRoleMaster);
}

void FongBlueTooth01::setMasterAnyAddress(int8_t firstModuleNum, int8_t lastModuleNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
setMasterAnyAddress(i);
}
}

void FongBlueTooth01::setMasterFixedAddress(int8_t moduleNum)
{
Serial.print(F(“\n\tModule Num = “));
Serial.println(moduleNum);
exeCommand(moduleNum, SetRoleMaster);
}

void FongBlueTooth01::setMasterFixedAddress(int8_t firstModuleNum, int8_t lastModuleNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
setMasterFixedAddress(i);
}
}

void FongBlueTooth01::setMasterFixedAddressAllModules(int8_t testNum)
{
setMasterFixedAddress(FirstModuleNum, LastModuleNum);
}
void FongBlueTooth01::setSlave(int8_t moduleNum)
{
Serial.print(F(“\n\tModule Num = “));
Serial.println(moduleNum);
exeCommand(moduleNum, SetRoleSlave);
}

void FongBlueTooth01::setSlave(int8_t firstModuleNum, int8_t lastModuleNum)
{
for (int8_t i = firstModuleNum; i <= lastModuleNum; i++)
{
setSlave(i);
}
}

void FongBlueTooth01::setSlaveAllModules()
{
setSlave(FirstModuleNum, LastModuleNum);
}

void FongBlueTooth01::configModules(int8_t configNum)
{
exeCommand(FirstModuleNum, LastModuleNum, DisconnectDevice);
exeCommand(FirstModuleNum, LastModuleNum, SetRoleSlave);
exeCommand(FirstModuleNum, LastModuleNum, Reset);
powerReset(_testNum, _debugNum);
delay(4000);
setMasterAnyAddress(Module0, Module2);
setSlave(Module3, Module6);
}

void FongBlueTooth01::configModule(int8_t moduleNum, int8_t roleNum, int8_t connectModeNum, \
int8_t nameNum, int8_t connectAddressNum, int8_t passWordNum)
{
exeCommand(FirstModuleNum, LastModuleNum, DisconnectDevice);
exeCommand(FirstModuleNum, LastModuleNum, SetRoleSlave);
exeCommand(FirstModuleNum, LastModuleNum, Reset);
powerReset(_testNum, _debugNum);
delay(4000);
setMasterAnyAddress(Module0, Module2);
setSlave(Module3, Module6);
}

void FongBlueTooth01::setPassWordAllModules(int8_t testNum)
{
int setPassWordModule[TotalModuleNum];
setPassWordModule[0] = SetPassWordModule0;
setPassWordModule[1] = SetPassWordModule1;
setPassWordModule[2] = SetPassWordModule2;
setPassWordModule[3] = SetPassWordModule3;
setPassWordModule[4] = SetPassWordModule4;
setPassWordModule[5] = SetPassWordModule5;
setPassWordModule[6] = SetPassWordModule6;

for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
exeCommand(i, setPassWordModule[i]);
}

powerReset(_testNum, _debugNum);

exeCommandAllModules(AskPassWord);
}

void FongBlueTooth01::setBindAddressAllModules(int8_t testNum)
{
int setBindAddressModule[TotalModuleNum];
setBindAddressModule[0] = SetBindAddressModule0;
setBindAddressModule[1] = SetBindAddressModule1;
setBindAddressModule[2] = SetBindAddressModule2;
setBindAddressModule[3] = SetBindAddressModule3;
setBindAddressModule[4] = SetBindAddressModule4;
setBindAddressModule[5] = SetBindAddressModule5;
setBindAddressModule[6] = SetBindAddressModule6;

for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(F(“\n\tModule Num = “));
Serial.println(i);
exeCommand(i, setBindAddressModule[i]);
}

powerReset(_testNum, _debugNum);

exeCommandAllModules(AskBindAddress);
}

void FongBlueTooth01::setSlaveAllModules(int8_t testNum)
{
Serial.print(F(“\tSet slave Modules all. <<< “));
enableCommandModeAllModules(testNum);
for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(F(“\tModule num = “));
Serial.print(i);
exeCommand(i, SetRoleSlave);
}
powerReset(_testNum, _debugNum);

for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(F(“\tModule num = “));
Serial.print(i);
exeCommand(i, AskRole);
exeCommand(i, AskAddress);
exeCommand(i, AskState);
exeCommand(i, InquireDevice);
}
}

void FongBlueTooth01::setMasterAllModules(int8_t testNum)
{
Serial.println(F(“\tSet master Modules all. <<< “));
enableCommandModeAllModules(testNum);
for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(F(“\tModule num = “));
Serial.print(i);
exeCommand(i, SetRoleMaster);
exeCommand(i, SetConnectModeAnyAddress);
}

powerReset(_testNum, _debugNum);

for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(F(“\tModule num = “));
Serial.print(i);
exeCommand(i, AskState);
exeCommand(i, InquireDevice);
}
}

void FongBlueTooth01::checkModule(int8_t moduleNum, int8_t testNum)
{
repeatSerialWrite(moduleNum, testNum);

Serial.print(F(“\tModule num = “));
Serial.print(moduleNum);

exeCommand(moduleNum, SayHello);
exeCommand(moduleNum, AskVersion);
exeCommand(moduleNum, AskAddress);
exeCommand(moduleNum, AskPassWord);
exeCommand(moduleNum, AskRole);
exeCommand(moduleNum, AskState);
exeCommand(moduleNum, AskConnectMode);
exeCommand(moduleNum, InquireDevice);
}

// *** print select menu, execute selection ***

void FongBlueTooth01::printSelectMenu(int8_t firstSelectNum, int8_t lastSelectNum, int8_t testNum)
{
const char menu0[] PROGMEM = “\t0 = Set slave all modules.”;
const char menu1[] PROGMEM = “\t1 = Set master all modules.”;
const char menu2[] PROGMEM = “\t2 = Set password & binding address all modules.”;
const char menu3[] PROGMEM = “\t3 = Check out Modules 0,1.”;
const char menu4[] PROGMEM = “\t4 = Set master Module 0, slave Module 1.”;
const char menu5[] PROGMEM = “\t5 = Set master Modules 0,1.”;
const char menu6[] PROGMEM = “\t6 = Display current state all modules.”;
const char menu7[] PROGMEM = “\t7 = Test String functions.”;
const char menu8[] PROGMEM = “\t8 = Reserved.”;
const char menu9[] PROGMEM = “\tp = Power Test.”;
const char menu10[] PROGMEM = “\tr = Power Reset.”;
const char menu11[] PROGMEM = “\tm = Menu.”;
const char menu12[] PROGMEM = “\th = Help.”;
const char menu13[] PROGMEM = “\tx = Exit.”;

const char * const selectMenu[] PROGMEM = {menu0, menu1, menu2, menu3, \
menu4, menu5, menu6, menu7, \
menu8, menu9, menu10, menu11, \
menu12, menu13};

for (int8_t i = firstSelectNum; i <= lastSelectNum; i++)
{
Serial.println(selectMenu[i]);
}
}

void FongBlueTooth01::execBlueToothFunction(char selectChar, int8_t testNum, int8_t debugNum)
{
int moduleNum;
String moduleReplyStr;

extern FongSerial01 *exfserialPtr;

if (selectChar == ‘0’)
{
setSlaveAllModules(testNum);
}
else if (selectChar == ‘1’)
{
setMasterAllModules(testNum);
}
else if (selectChar == ‘2’)
{
setPassWordAllModules(testNum);
setBindAddressAllModules(testNum);
}
else if (selectChar == ‘3’)
{
checkModule(Module0, testNum);
checkModule(Module1, testNum);
}
else if (selectChar == ‘4’)
{
_fdb->print(“\n\tSet master Module 0, slave Module 1. <<< “, _testNum, _debugNum);
enableCommandModeAllModules(testNum);

moduleNum = 0;
_fdb->print(“\n\tModule Num * = “, moduleNum, _testNum, _debugNum);
exeCommand(moduleNum, SetRoleMaster);
exeCommand(moduleNum, SetConnectModeAnyAddress);
exeCommand(moduleNum, SetPassWord1234);

moduleNum = 1;
_fdb->print(“\n\tModule Num * = “, moduleNum, _testNum, _debugNum);
exeCommand(moduleNum, SetRoleSlave);
exeCommand(moduleNum, SetPassWord1234);

powerReset(_testNum, _debugNum);
}
else if (selectChar == ‘5’)
{
Serial.println(F(“\tSet master Modules 0,1. <<< “));
enableCommandModeAllModules(testNum);

moduleNum = 0;
Serial.print(F(“\tModule num = “));
Serial.print(moduleNum);
exeCommand(moduleNum, SetRoleMaster);
exeCommand(moduleNum, SetConnectModeAnyAddress);
exeCommand(moduleNum, SetPassWord1234);

moduleNum = 1;
Serial.print(F(“\tModule num = “));
Serial.print(moduleNum);
exeCommand(moduleNum, SetRoleMaster);
exeCommand(moduleNum, SetConnectModeAnyAddress);
exeCommand(moduleNum, SetPassWord1234);

powerReset(_testNum, _debugNum);
}
else if (selectChar == ‘6’)
{
Serial.println(F(“\tCurrent state all modules.”));
Serial.println(F(“\tModuleNum Role Operation State”));
for (int i = FirstModuleNum; i <= LastModuleNum; i++)
{
Serial.print(“\t”);
Serial.print(moduleState[i][CurrentNameIndex]);
Serial.print(moduleState[i][CurrentRoleIndex]);
Serial.print(moduleState[i][CurrentOperationStateIndex]);
Serial.print(moduleState[i][CurrentRoleIndex]);
Serial.print(moduleState[i][CurrentConnectStateIndex]);
Serial.print(“\n”);
}
}
else if (selectChar == ‘7’)
{
Serial.println(F(“\tSet master Modules 0,1. <<< “));
enableCommandModeAllModules(testNum);

moduleNum = 0;
Serial.print(F(“\tModule num = “));
Serial.println(moduleNum);

moduleReplyStr = exeCommand(moduleNum, SetRoleMaster);
Serial.println(“AT Command = Set Master, Reply = ” + moduleReplyStr);
moduleReplyStr = exeCommand(moduleNum, AskRole);
Serial.println(“AT Command = Ask Role, Reply = ” + moduleReplyStr);

moduleReplyStr = exeCommand(moduleNum, SetRoleSlave);
Serial.println(“AT Command = Set Slave, Reply = ” + moduleReplyStr);
moduleReplyStr = exeCommand(moduleNum, AskRole);
Serial.println(“AT Command = Ask Role, Reply = ” + moduleReplyStr);

moduleReplyStr = exeCommand(moduleNum, AskState);
Serial.println(“AT Command = Ask State, Reply = ” + moduleReplyStr);

}
else if (selectChar == ‘8’)
{
//
}
else if (selectChar == ‘p’)
{
powerTest(testNum);
}
else if (selectChar == ‘c’)
{
cmdModeTest(testNum);
}
else if (selectChar == ‘r’)
{
powerReset(_testNum, _debugNum);
}
else if (selectChar == ‘m’)
{
printSelectMenu(testNum);
}
else if (selectChar == ‘h’)
{
Serial.print(“Sorry, no help available, …”);
}
else
{
Serial.print(“Sorry, no such option, …”);
}
}

void FongBlueTooth01::initModuleState(int8_t testNum, int8_t debugNum)
{
int8_t moduleNum;

moduleNum = 0;
moduleState[moduleNum][CurrentNameIndex] = “Module0″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 1;
moduleState[moduleNum][CurrentNameIndex] = “Module1″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 2;
moduleState[moduleNum][CurrentNameIndex] = “Module2″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 3;
moduleState[moduleNum][CurrentNameIndex] = “Module3″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 4;
moduleState[moduleNum][CurrentNameIndex] = “Module4″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 5;
moduleState[moduleNum][CurrentNameIndex] = “Module5″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;

moduleNum = 6;
moduleState[moduleNum][CurrentNameIndex] = “Module6″;
moduleState[moduleNum][CurrentOperationStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRoleIndex] = “Unknown”;
moduleState[moduleNum][CurrentConnectStateIndex] = “Unknown”;
moduleState[moduleNum][CurrentRemoteNameIndex] = “Unknown”;
}

// *** End ***

.END

Leave a comment

Filed under Electronics DIY Project

強國過去30年經濟發展得太快喇,要好似非洲黑奴咁用300年先啱㗎 – 成名

Amazing Grace History / “Amazing Grace” By Wintley Phipps


Amazing Grace  John Newton (1725-1807)

Amazing Grace, how sweet the sound,
That saved a wretch like me.
I once was lost but now am found,
Was blind, but now I see.

T’was Grace that taught my heart to fear.
And Grace, my fears relieved.
How precious did that Grace appear
The hour I first believed.
Through many dangers, toils and snares
I have already come;
‘Tis Grace that brought me safe thus far
and Grace will lead me home.


wretch – a very unhappy or unlucky person – Merriam Webster

cha_2014oct3102

【雨傘革命】黑奴論被指侮辱港人 查史美倫表遺憾 – 蘋果日報 2014年10月31日

http://hk.apple.nextmedia.com/realtime/news/20141031/53081887

身兼港區人大的行會成員查史美倫日前接受傳媒訪問時,以

美國黑奴要逾百年才能爭取投票權,比喻港人爭取民主不能「一步到位」,應該「袋住先」,惹來各界批評,不滿她引喻失義、侮辱港人,

更有網民發動聯署,要求她道歉。查史美倫今日發表聲明,指「無意對任何人表示不尊重,對言論引起的關注深表遺憾」。

聲明又指,當日她接受訪問時,純粹想指出每個國家的民主發展皆在其各自的歷史背景演化。


查史美倫 黑奴論「坤」人袋住先 – 蘋果日報 2014年10月30日

http://hk.apple.nextmedia.com/news/art/20141030/18917602

身兼港區人大的行政會議成員查史美倫,昨日談及政改時促港人「袋住先」,又以美國黑奴歷史為例,指黑奴由解放到獲得投票權經歷逾百年時間,稱爭取民主需時,籲港人勿要求「一步到位」。

「黑奴論」受各界炮轟,學者斥查史發謬論,立法會議員指比喻不倫不類,講法侮辱港人。

記者:黃珮琳

以金融發展局主席身份隨貿發局訪歐的查史美倫,在巴黎接受香港傳媒訪問,談到政改時,她指民主並非一步到位,

「由1,200人提委會改變成約500萬人可以投票,

我唔明人大決定係咪真係差到不能接受」。

她又用美國黑奴作例,「1861年美國解放黑奴,大約100年後,1968年黑人才可獲投票權,我唔係話香港都要100年先有民主,但係爭取民主需要時間,2017唔得箒,你點知2022年無?點解唔袋住先?阿爺𠵱家話畀你,你都唔要?」

紅色資本主導的金發局去年撰寫報告指佔中為金融業界所顧慮,查史昨稱理解學生熱誠,但堵塞道路影響民生經濟,破壞法治不是有效方法,希望他們以其他方法爭取,「現時擁有嘅經濟成果得來不易,破壞卻好容易,實在唔想一炮過破壞大家一點一滴建立嘅成果」。

80年代已備民主條件

她又指若佔領持續,「業界做多幾個 roadshow 推介香港都於事無補」,形容現時已進入臨界點,

潛在投資者會有所顧慮,「錢又唔係無碇去,大可以將錢投資新加坡等地」

而在港根基比較厚的投資者「可能頂到一陣」。她指雖然佔中一個月以來,金融市場運作穩定,惟「好難預測投資者信心幾時動搖,1個月?6星期又會唔會呢?如旺角趨向暴力成份多咗、普遍咗,投資者會開始感到憂慮」。

查史的「黑奴論」被各方炮轟,科大社會科學部副教授成名指查史美倫的比喻不當,他指香港的經濟水平早於80年代末已具備成熟的民主化條件,而且根本不存在民主化需時多久的定律,二戰後的民主化過程就遠比英美迅速,認為查史說法有謬誤,

「好似經濟發展咁,難道話中國過去30年經濟發展太快,要好似非洲咁用300年先啱?

「要港人做二等公民」

立法會議員陳家洛狠批查史的比喻不倫不類,並促她認清事實,指香港按《基本法》理應在2007、2008年就有雙普選,

但包括查史在內的既得利益者卻慫恿中央將普選一拖再拖,港人現在爭取絕非一步到位,

「原本2017年話係終極,𠵱家又話唔係終極」,將港人與黑奴比較是侮辱港人,「要港人做二等公民」。


查史美伦 – 维基百科

史美伦(Laura Cha Shih May-lung),GBS,SBS,JP(1949年12月-)[1],

冠夫姓称查史美伦,籍贯上海。史于香港著名女子中学嘉诺撒圣方济各书院毕业,是前中国证监会副主席、前香港证监会副主席及前大学教育资助委员会主席。

现任香港行政会议成员(2004年10月-)、香港金融发展局主席及汇丰香港公司非执行董事。丈夫为查济民次子查懋成。

2008年1月,史美伦仅次于范徐丽泰以第二高票当选港区全国人大代表。

学历

美国威斯康辛大学文学士

美国加州圣达嘉娜大学法学博士

.END

Leave a comment

Filed under Electronics DIY Project