の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
無線
|
|
APRS運用
ずっと前から作ろうと思ってたAPRSの送信機。 最初はRPi PicoもしくはZero(Debian+Direwolf)使おうと思っていたけど、電気をどこから持ってくるかで難航... そんな中、 こんなものを発見。 既製品の流用でAPRS_TNCを自作?いや制作?した話です。
|
最初の案
最初は - WxもできるAPRS TNC
- どうしても消費電力は小さくしたい
- とにかく小さく
- IC一個で完結
- GPS出したい(当たり前)
- メッセージ送受信
- なるべく動作を軽く
- DACなし(内臓を使う)
- 起動時間0
- 得意なCppで開発
- Webマネージ機能もつける
- タブレットPCやスマホと連携
- AFSKしてハンディで送信
- ほとんどをソフト側で
...なぁんてものを構想。 この通りに作ろうと、いろいろ試してたら何ヶ月もかかって、結局できたのはAPRSでGPS飛ばすやつ...しかも全部固定値というもの。 これだと悔しいので、自作を諦めて既製品を流用する方向で。 RPi Zeroで試したらうまくできた...はずだが、電源を多く食う(しかも無駄!)のと、起動時間が長いのでこれも没。 せっかくWebUI作ったのに... で、AX.25の仕様書やAPRSの仕様書を検索する中で気になっていた上記のもの(ESP32APRS_Audio)をダウンロード。 ソフト側は動かすことができたが、現時点でハードウェアはまだ...と言う感じ。 結局既製品の流用になってしまった... (最近自分で全て一からプログラムを組む時間がなくて、だいたい既製品を流用している。今回の件で、なんだかプログラミング能力が下がってきてる気がした。勉強は続けないと意味がないなぁ...でも、受験が先だなぁ...と考えつつ。受験勉強の方へ時間を取られ、自分で一から電子回路やプログラムを考えることが難しくなるのは一つの葛藤があると思う。)
|
うそ?!
運用しようと準備してると、妙に再起動を繰り返すことが判明。 async_tcpがWDTの評価時間内に応答しないらしい。 以下コピペ E (185142) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time: E (185142) task_wdt: - async_tcp (CPU 1) E (185142) task_wdt: Tasks currently running: E (185142) task_wdt: CPU 0: IDLE0 E (185142) task_wdt: CPU 1: IDLE1 E (185142) task_wdt: Aborting. E (185142) task_wdt: Print CPU 1 backtrace
Backtrace: 0x4008d147:0x3ffbd5a0 0x4013ed9d:0x3ffbd5c0 0x400915b7:0x3ffbd5e0 0x40090542:0x3ffbd600
以上コピペ ...これじゃあ実用にならないわ... 改善も、すっかりCppが読めなくなった自分にはきつい...のでまたいつかのために部品箱の奥底へ...
|
|
|
|
|