あきまへん。調子のってしまいそうです
遂に遂に、ポチの玉手箱が無線通信を手中にしました。近距離ではなく、衛星(GPS)からの信号受信に成功しました。しかも、USB経由での接続です!!
EPのリセット他に苦労しましたが、なんとか試行錯誤して動きました ・・・ バンザイ!!
Descriptor表示がデバッグに使えるように、すべてのフィールドを表示し、頭0サプレスされていたのを止めました。
詳細な位置情報は置き換えましたが、置き換えた数字は3種類だけ。時間帯にも寄りますが、精度は良いようです
Device descriptor dumpと2バイトのフィールド(idVendor、idProduct、bcdDevice)の内容が不一致なので調べてみました。結果、原因はよく分からないのですが、castの仕方に問題があるようです。結局、キャストを使わないように修正しました。もしかすると、オリジナルはLinuxにあるような気がすのですが、printf()の書式には不得意な方の作成かも知れません。因みにポチはキャストや構造体、unionなど分からないことだらけです
・SetControlLineStateコマンドは何をするのか分からないのですがwValue(Control Signal Bitmap)00→01→02→03を変化させます
ターゲットで動作させたときの、ログを参考にしました。この時悩んだのが、上位、下位バイトの順です
よく分からないので0000→0101→0202→0303としました(USB線上は別にして関数仕様としての指定方法が??)
・GetLineCoding/SetLineCoding、これも??。そもそもUSBで接続して居るんだから関係無いじゃん、と思うのですが
実際は機微でした。正しく設定しないと、文字化けして読めません
ターゲットで動作させた時のWindowsの指定値は「B0040000 000007」
7は7bitのことらしい事は分かったのですが「B0040000」はチンプンカンプン。実は「000004B0」=1200bpsの事らしいのです
GT-730F/LをWindowsに接続した時のTeraTermの設定は38400bps、8bit、パリティNone。
なのでLineCodingを「00960000 000008」としました
・データの受信はひたすらバルクReadです
動いちゃえば簡単なようですが、やっぱシリアルの方が楽です
時分秒まではUTC→JSTへ何とか変換しましたが、年月日まで変換するのは疲れたのでやっていません
大小の月や閏年まで考える元気が残ってません。何方かお願いします(UTCでは9/15ですが、JSTでは9/16です)
実はこの3号機、ホストとターゲットをDIP SWで切り替えられるようになっています
大型クリップを中学の時に作った文鎮で押えました
プロジェクトアーカイブ
昔、H8/3069 + MesでNTPサーバに恐る恐る、時刻を問い合わせして表示しましたが、GPSは遠慮する必要がなく、気軽に使えます
年月日から曜日を求める時は「ツェラーの公式」が使えます
うるう年の判定も簡単です。だからGPSから受信したUTCをJSTに変えるのはそんなに難しい話ではないと思います
ところが、ポチはアホなので、通算日を求めたり、通算日から年月日を求めてみようと考えてしまいました・・・
そうは言っても、GPSから受信したUTCの変換なので実用的な日付だけで紀元前とかは考慮しません
考え方は、このサイトグレゴリオ暦/ユリウス暦 ⇔ ユリウス日から頂きました
たまたま数時間動いただけで、テストも十分ではないし、理屈もよく分かってないので説明できないのですが、紀元元年3月1日からの通算日を求めるのだそうです。元年の2月28日以前は正しく動きません。(正確には正しく動くか、動かないか分からない。且つ興味がない)
ちなみに紀元0年はそもそも存在しないそうです。元年の前年は紀元前1年。
曜日は通算日を7で割って余りを求めるだけです
これは、上記ページを見たのですがよく分かりませんでした。なので日めくり式に近い、力ずくになってしまいました
乗除算数回とはどうやれば出来るのでしょうか?
別に日めくり式でも現実的な日付ならシンプルで良いかなと思っています
色々、気になるところが出て来て、普段はエラーチェックとかしないのですが10回ぐらいアップし直しています
div()関数で商と余りを同時に求めてみたのですが、コンパイルリストを見てみると(アセンブラはよく分からないのですが)
却って長くなっているような・・。div()を使わなくても最適化されているのかな?
ということで、もうこれ以上は止めときます
遂に遂に、ポチの玉手箱が無線通信を手中にしました。近距離ではなく、衛星(GPS)からの信号受信に成功しました。しかも、USB経由での接続です!!
EPのリセット他に苦労しましたが、なんとか試行錯誤して動きました ・・・ バンザイ!!
Descriptor表示がデバッグに使えるように、すべてのフィールドを表示し、頭0サプレスされていたのを止めました。
Tiny Dump Monitor >ub Binaryimage download start! Download address = 1C000000h Binaryimage download start! .......................................................................................................................................................................................................................................................................................................................... Download program size : 139E0h Jump address = 1C00053Ch Download program start!! --- Hello USB World!! --- >H_CheckAttach(): buf1=0001, buf2=0001, buf3=0001 H_CheckAttach(): rhst=0000, buf1=0001 H_CheckAttach(): buf1=0001, buf2=0001, buf3=0001 H_CheckAttach(): rhst=0000, buf1=0001 H_UsbStateManager(): UsbDeviceState=0001 H_UsbStateManager(): UsbDeviceState=0002 <-- [SETUP STAGE] : Req=0680, Val=0100, Indx=0000, Len=0040 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0211 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0220 --> [DATA STAGE READ] --> CR=12011001 00000040 7B060323 00040102 0001 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0222 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0230 <-- CW= usb_write_buffer_c():status=0001 <-- [STATUS STAGE READ MODE] H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0232 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0040, UsbCmdStage=0232 H_UsbStateManager(): UsbDeviceState=0003 Full-Speed Device---- H_UsbStateManager(): UsbDeviceState=0004 H_UsbStateManager(): UsbDeviceState=0005 <-- [SETUP STAGE] : Req=0500, Val=0003, Indx=0000, Len=0000 H_CtrlTransStart(): Req=0500, Val=0003, Indx=0000, Len=0000, UsbCmdStage=0312 H_CtrlTransStart(): Req=0500, Val=0003, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=0500, Val=0003, Indx=0000, Len=0000, UsbCmdStage=0332 USB Address is 3---- H_CtrlTransStart(): Req=0500, Val=0003, Indx=0000, Len=0000, UsbCmdStage=0332 H_UsbStateManager(): UsbDeviceState=0006 H_UsbStateManager(): UsbDeviceState=0007 <-- [SETUP STAGE] : Req=0680, Val=0100, Indx=0000, Len=0012 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0211 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0220 --> [DATA STAGE READ] --> CR=12011001 00000040 7B060323 00040102 0001 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0222 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0230 <-- CW= usb_write_buffer_c():status=0001 <-- [STATUS STAGE READ MODE] H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0232 H_CtrlTransStart(): Req=0680, Val=0100, Indx=0000, Len=0012, UsbCmdStage=0232 H_UsbStateManager(): UsbDeviceState=0008 <-- [SETUP STAGE] : Req=0680, Val=0200, Indx=0000, Len=0009 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0211 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0220 --> [DATA STAGE READ] --> CR=09022700 01010080 32 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0222 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0230 <-- CW= usb_write_buffer_c():status=0001 <-- [STATUS STAGE READ MODE] H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0232 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0009, UsbCmdStage=0232 H_UsbStateManager(): UsbDeviceState=0009 <-- [SETUP STAGE] : Req=0680, Val=0200, Indx=0000, Len=0027 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0211 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0220 --> [DATA STAGE READ] --> CR=09022700 01010080 32090400 0003FF00 00000705 81030A00 01070502 02400000 07058302 400000 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0222 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0230 <-- CW= usb_write_buffer_c():status=0001 <-- [STATUS STAGE READ MODE] H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0232 Get configuration (Device descriptor) ------------------------ PASS! Device descriptor dump : 12 01 10 01 00 00 00 40 7b 06 03 23 00 04 01 02 00 01 Device descriptor fields : bLength 0000 : 0x12 bDescripotorType 0001 : 0x01 bcdUSB 0002 : 0x0110 bDeviceClass 0004 : 0x00 bDeviceSubClass 0005 : 0x00 bProtocolCode 0006 : 0x00 bMaxPacketSize 0007 : 0x40 idVendor 0008 : 0x067b idProduct 000A : 0x2303 bcdDevice 000C : 0x0400 iManufacture 000E : 0x01 iProduct 000F : 0x02 iSerialNumber 0010 : 0x00 bNumConfigurations 0011 : 0x01 Get configuration (Configuration descriptor) ----------------- Configuration descriptor fields: bLength 0000 : 0x09 bDescriptorType 0001 : 0x02 wTotalLength 0002 : 0x0027 bNumInterfaces 0004 : 0x01 bConfigurationValue0005 : 0x01 iConfiguration 0006 : 0x00 bmAttributes 0007 : 0x80 bMaxPower 0008 : 0x32 Interface descriptor fields: bLength 0000 : 0x09 bDescriptorType 0001 : 0x04 bInterfaceNumber 0002 : 0x00 bAlternateSetting 0003 : 0x00 bNumEndpoints 0004 : 0x03 bInterfaceClass 0005 : 0xff bInterfaceSubClass 0006 : 0x00 bInterfaceProtocol 0007 : 0x00 iInterface 0008 : 0x00 Endpoint descriptor fields: bLength 0000 : 0x07 bDescriptorType 0001 : 0x05 bEndpointAddress 0002 : 0x81 bmAttributes 0003 : 0x03 wMaxPacketSize 0004 : 0x000a bInterval 0006 : 0x01 Endpoint descriptor fields: bLength 0000 : 0x07 bDescriptorType 0001 : 0x05 bEndpointAddress 0002 : 0x02 bmAttributes 0003 : 0x02 wMaxPacketSize 0004 : 0x0040 bInterval 0006 : 0x00 Endpoint descriptor fields: bLength 0000 : 0x07 bDescriptorType 0001 : 0x05 bEndpointAddress 0002 : 0x83 bmAttributes 0003 : 0x02 wMaxPacketSize 0004 : 0x0040 bInterval 0006 : 0x00 H_CtrlTransStart(): Req=0680, Val=0200, Indx=0000, Len=0027, UsbCmdStage=0232 H_UsbStateManager(): UsbDeviceState=000A H_UsbStateManager(): UsbDeviceState=000B <-- [SETUP STAGE] : Req=0900, Val=0001, Indx=0000, Len=0000 H_CtrlTransStart(): Req=0900, Val=0001, Indx=0000, Len=0000, UsbCmdStage=0312 H_CtrlTransStart(): Req=0900, Val=0001, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=0900, Val=0001, Indx=0000, Len=0000, UsbCmdStage=0332 -H_SetEndpoint(). Length=39, offset=9 Config Descriptor 0000 09022700 01010080 32090400 0003FF00 00000705 81030A00 01070502 02400000 |..'.....2....................@..| 0020 07058302 400000 |....@.. | USB_CFG_PIPETBL 0000 00010100 1C080000 00000001 00020100 1C100000 00000001 00030100 1C180000 |................................| 0020 00000001 00040100 1C200000 00000001 00050100 1C280000 00000001 00060000 |......... ...........(..........| 0040 00040000 00000000 00070000 00050000 00000000 00080000 00060000 00000000 |................................| 0060 00090000 00070000 00000000 FFFFFFFF FFFFFFFF FFFFFFFF |........................ | - Table[ 1 ]=05, Table[ 3 ]=03. - H_SetEndpointTable(-1). default return!!. -H_SetEndpoint() ret=00FF end_point=00 pipe_number=1. - Table[ 1 ]=05, Table[ 3 ]=03. - H_SetEndpointTable(-1). default return!!. -H_SetEndpoint() ret=00FF end_point=01 pipe_number=2. - Table[ 1 ]=05, Table[ 3 ]=03. - H_SetEndpointTable(-1). default return!!. -H_SetEndpoint() ret=00FF end_point=02 pipe_number=3. - Table[ 1 ]=05, Table[ 3 ]=03. - H_SetEndpointTable(-1). default return!!. -H_SetEndpoint() ret=00FF end_point=03 pipe_number=4. - Table[ 1 ]=05, Table[ 3 ]=03. - H_SetEndpointTable(-1). default return!!. -H_SetEndpoint() ret=00FF end_point=04 pipe_number=5. - Table[ 1 ]=05, Table[ 3 ]=03. H_resetEP() : pipe = 6 pipe_cfg = 8081, pipe_buf = 4, pipe_max_pktsize = 300a, pipe_cycle = 0 -H_SetEndpoint() ret=0000 end_point=05 pipe_number=6. - Table[ 1 ]=05, Table[ 3 ]=02. H_resetEP() : pipe = 1 pipe_cfg = 4112, pipe_buf = 1c08, pipe_max_pktsize = 3040, pipe_cycle = 0 -H_SetEndpoint() ret=0010 end_point=00 pipe_number=1. - Table[ 1 ]=05, Table[ 3 ]=02. -H_SetEndpoint() ret=00FF end_point=00 pipe_number=1. - Table[ 1 ]=05, Table[ 3 ]=02. H_resetEP() : pipe = 2 pipe_cfg = 4183, pipe_buf = 1c10, pipe_max_pktsize = 3040, pipe_cycle = 0 -H_SetEndpoint() ret=0000 end_point=01 pipe_number=2.H_CtrlTransStart(): Req=0900, Val=0001, Indx=0000, Len=0000, UsbCmdStage=0332 H_SetEndpointTable(): PIPE#=0006, EP#=0001 H_SetEndpointTable(): PIPE#=0001, EP#=0002 H_SetEndpointTable(): PIPE#=0002, EP#=0003 H_UsbStateManager(): UsbDeviceState=000C <-- [SETUP STAGE] : Req=21A1, Val=0000, Indx=0000, Len=0007 H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0211 H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0220 --> [DATA STAGE READ] --> CR=80250000 000000 H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0222 H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0230 <-- CW= usb_write_buffer_c():status=0001 <-- [STATUS STAGE READ MODE] H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0232 H_CtrlTransStart(): Req=21A1, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0232 H_UsbStateManager(): UsbDeviceState=000D <-- [SETUP STAGE] : Req=2021, Val=0000, Indx=0000, Len=0007 H_CtrlTransStart(): Req=2021, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0111 H_CtrlTransStart(): Req=2021, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0120 <-- CW=00960000 000008 usb_write_buffer_c():status=0001 <-- [DATA_STAGE WRITE]=00960000 000008 H_CtrlTransStart(): Req=2021, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0130 --> [STATUS STAGE WRITE MODE] H_CtrlTransStart(): Req=2021, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0132 H_CtrlTransStart(): Req=2021, Val=0000, Indx=0000, Len=0007, UsbCmdStage=0132 H_UsbStateManager(): UsbDeviceState=000E <-- [SETUP STAGE] : Req=2221, Val=0000, Indx=0000, Len=0000 H_CtrlTransStart(): Req=2221, Val=0000, Indx=0000, Len=0000, UsbCmdStage=0311 H_CtrlTransStart(): Req=2221, Val=0000, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=2221, Val=0000, Indx=0000, Len=0000, UsbCmdStage=0332 H_CtrlTransStart(): Req=2221, Val=0000, Indx=0000, Len=0000, UsbCmdStage=0332 H_UsbStateManager(): UsbDeviceState=0010 <-- [SETUP STAGE] : Req=2221, Val=0101, Indx=0000, Len=0000 H_CtrlTransStart(): Req=2221, Val=0101, Indx=0000, Len=0000, UsbCmdStage=0311 H_CtrlTransStart(): Req=2221, Val=0101, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=2221, Val=0101, Indx=0000, Len=0000, UsbCmdStage=0332 H_CtrlTransStart(): Req=2221, Val=0101, Indx=0000, Len=0000, UsbCmdStage=0332 H_UsbStateManager(): UsbDeviceState=0011 <-- [SETUP STAGE] : Req=2221, Val=0202, Indx=0000, Len=0000 H_CtrlTransStart(): Req=2221, Val=0202, Indx=0000, Len=0000, UsbCmdStage=0311 H_CtrlTransStart(): Req=2221, Val=0202, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=2221, Val=0202, Indx=0000, Len=0000, UsbCmdStage=0332 H_CtrlTransStart(): Req=2221, Val=0202, Indx=0000, Len=0000, UsbCmdStage=0332 H_UsbStateManager(): UsbDeviceState=0012 <-- [SETUP STAGE] : Req=2221, Val=0303, Indx=0000, Len=0000 H_CtrlTransStart(): Req=2221, Val=0303, Indx=0000, Len=0000, UsbCmdStage=0311 H_CtrlTransStart(): Req=2221, Val=0303, Indx=0000, Len=0000, UsbCmdStage=0330 --> [STATUS STAGE NO DATA] H_CtrlTransStart(): Req=2221, Val=0303, Indx=0000, Len=0000, UsbCmdStage=0332 H_CtrlTransStart(): Req=2221, Val=0303, Indx=0000, Len=0000, UsbCmdStage=0332 H_UsbStateManager(): UsbDeviceState=0013 $GPGGA,094233.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5C $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094233.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*74 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094234.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5B $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094234.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*73 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094235.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5A $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPGSV,3,1,12,17,77,177,28,04,56,320,,10,53,242,,13,44,117,*75 $GPGSV,3,2,12,23,42,078,,20,23,050,,02,16,291,,28,09,196,*77 $GPGSV,3,3,12,12,09,317,,01,08,093,,05,01,234,,32,00,048,*7A $GPRMC,094235.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*72 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094236.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*59 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094236.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*71 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094237.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*58 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094237.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*70 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094238.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*57 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPGSV,3,1,12,17,77,177,29,04,56,320,,10,53,242,,13,44,117,*74 $GPGSV,3,2,12,23,42,078,,20,23,050,,02,16,291,,28,09,196,*77 $GPGSV,3,3,12,12,09,317,,01,08,093,,05,01,234,,32,00,048,*7A $GPRMC,094238.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*7F $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094239.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*56 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094239.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*7E $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094240.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*58 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094240.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*70 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094241.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*59 $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPGSV,3,1,12,17,77,177,28,04,56,320,,10,53,242,,13,44,117,*75 $GPGSV,3,2,12,23,42,078,,20,23,050,,02,16,291,,28,09,196,*77 $GPGSV,3,3,12,12,09,317,,01,08,093,,05,01,234,,32,00,048,*7A $GPRMC,094241.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*71 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094242.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5A $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094242.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*72 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094243.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5B $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094243.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*73 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094244.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5C $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPGSV,3,1,12,17,77,177,30,04,56,320,,10,53,242,,13,44,117,*7C $GPGSV,3,2,12,23,42,078,,20,23,050,,02,16,292,,28,09,196,*74 $GPGSV,3,3,12,12,09,317,,01,08,093,,05,01,234,,32,00,048,*7A $GPRMC,094244.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*74 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 $GPGGA,094245.000,3518.abcd,N,13914.abcd,E,0,00,0.0,83.0,M,0.0,M,,0000*5D $GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30 $GPRMC,094245.000,V,3518.abcd,N,13914.abcd,E,000.0,000.0,230911,,,N*75 $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02 Tiny Dump Monitor
詳細な位置情報は置き換えましたが、置き換えた数字は3種類だけ。時間帯にも寄りますが、精度は良いようです
Device descriptor dumpと2バイトのフィールド(idVendor、idProduct、bcdDevice)の内容が不一致なので調べてみました。結果、原因はよく分からないのですが、castの仕方に問題があるようです。結局、キャストを使わないように修正しました。もしかすると、オリジナルはLinuxにあるような気がすのですが、printf()の書式には不得意な方の作成かも知れません。因みにポチはキャストや構造体、unionなど分からないことだらけです
・SetControlLineStateコマンドは何をするのか分からないのですがwValue(Control Signal Bitmap)00→01→02→03を変化させます
ターゲットで動作させたときの、ログを参考にしました。この時悩んだのが、上位、下位バイトの順です
よく分からないので0000→0101→0202→0303としました(USB線上は別にして関数仕様としての指定方法が??)
・GetLineCoding/SetLineCoding、これも??。そもそもUSBで接続して居るんだから関係無いじゃん、と思うのですが
実際は機微でした。正しく設定しないと、文字化けして読めません
ターゲットで動作させた時のWindowsの指定値は「B0040000 000007」
7は7bitのことらしい事は分かったのですが「B0040000」はチンプンカンプン。実は「000004B0」=1200bpsの事らしいのです
GT-730F/LをWindowsに接続した時のTeraTermの設定は38400bps、8bit、パリティNone。
なのでLineCodingを「00960000 000008」としました
・データの受信はひたすらバルクReadです
動いちゃえば簡単なようですが、やっぱシリアルの方が楽です
時分秒まではUTC→JSTへ何とか変換しましたが、年月日まで変換するのは疲れたのでやっていません
大小の月や閏年まで考える元気が残ってません。何方かお願いします(UTCでは9/15ですが、JSTでは9/16です)
実はこの3号機、ホストとターゲットをDIP SWで切り替えられるようになっています
大型クリップを中学の時に作った文鎮で押えました
プロジェクトアーカイブ
昔、H8/3069 + MesでNTPサーバに恐る恐る、時刻を問い合わせして表示しましたが、GPSは遠慮する必要がなく、気軽に使えます
年月日から曜日を求める時は「ツェラーの公式」が使えます
うるう年の判定も簡単です。だからGPSから受信したUTCをJSTに変えるのはそんなに難しい話ではないと思います
ところが、ポチはアホなので、通算日を求めたり、通算日から年月日を求めてみようと考えてしまいました・・・
そうは言っても、GPSから受信したUTCの変換なので実用的な日付だけで紀元前とかは考慮しません
考え方は、このサイトグレゴリオ暦/ユリウス暦 ⇔ ユリウス日から頂きました
たまたま数時間動いただけで、テストも十分ではないし、理屈もよく分かってないので説明できないのですが、紀元元年3月1日からの通算日を求めるのだそうです。元年の2月28日以前は正しく動きません。(正確には正しく動くか、動かないか分からない。且つ興味がない)
ちなみに紀元0年はそもそも存在しないそうです。元年の前年は紀元前1年。
曜日は通算日を7で割って余りを求めるだけです
int GregorianToDayNumber( int y, int m, int d ) { // ×月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 13月 14月 static int DoM_1[16]={99999999, 305, 336, -1, 30, 60, 91, 121, 152, 183, 213, 244, 274, 305, 336, 364 } ; int ret; if ( y < 1 || m < 1 || m > 12 || d < 1 || d > 31 ) return -1; if ( m < 3 ) { // 1月 → 前年の 13月 // m = m + 12; // 2月 → 前年の 14月 y = y - 1; } ret = y * 365 + y/4 - y/100 + y/400 + DoM_1[m] + d ; return ret; }
これは、上記ページを見たのですがよく分かりませんでした。なので日めくり式に近い、力ずくになってしまいました
乗除算数回とはどうやれば出来るのでしょうか?
別に日めくり式でも現実的な日付ならシンプルで良いかなと思っています
色々、気になるところが出て来て、普段はエラーチェックとかしないのですが10回ぐらいアップし直しています
div()関数で商と余りを同時に求めてみたのですが、コンパイルリストを見てみると(アセンブラはよく分からないのですが)
却って長くなっているような・・。div()を使わなくても最適化されているのかな?
ということで、もうこれ以上は止めときます
int YMD( int NoD, int *yp, int *mp, int *dp ) { // 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 13月 14月 static int DoM_1[15] = { -1, 30, 60, 91, 121, 152, 183, 213, 244, 274, 305, 336, 365 } ; int y, m, d, remainder, i, leap_day; if ( NoD < 0 ) return -1; y = d = leap_day = 0; m = 3; i = NoD/146097 ; y = i * 400; remainder = NoD - i * 146097; if ( remainder == 146096 ) leap_day = 3; // うるう日 i = remainder/36524 ; y = y + i * 100; remainder = remainder - i * 36524; if ( leap_day != 3 && remainder == 36523 ) leap_day = 2; // うるう日ではない i = remainder/1461 ; y = y + i * 4; remainder = remainder - i * 1461; if ( leap_day != 2 && remainder == 1460 ) leap_day = 1; // うるう日 i = remainder/365 ; y = y + i ; remainder = remainder - i * 365; *yp = y ; if ( leap_day == 3 || leap_day == 1 ) { // うるう日 *mp = 2; *dp = 29; return remainder; } for ( i=1; i<13; i++) { if ( remainder <= DoM_1[i] ) goto escape; m++; } printf("\n\n >>>>>>>>>>>>>>>>> E R R O R (YMD Calucuration!)<<<<<<<<<<<<<<<<<<<<<\n\n"); return -1; escape: if ( m>12 ) { m=m-12; *yp = ++y; } *mp = m; *dp = remainder - DoM_1[i-1]; return remainder; }
コメントをかく