東芝FlashAirを使って、直接ツイートするツイッタークライアントです。 supertweetやStewgate UなどのAPIプロキシを必要としません。 このプログラムは、mbed Advent Calendar 2014 をきっかけに作成されました。 http://www.adventar.org/calendars/523
Dependencies: OAuth4Tw iSDIO mbed
main.cpp@0:b1be2bea94df, 2014-12-15 (annotated)
- Committer:
- ban4jp
- Date:
- Mon Dec 15 12:25:37 2014 +0000
- Revision:
- 0:b1be2bea94df
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ban4jp | 0:b1be2bea94df | 1 | #include "mbed.h" |
ban4jp | 0:b1be2bea94df | 2 | #include "iSDIO.h" |
ban4jp | 0:b1be2bea94df | 3 | #include "HTTPClient.h" |
ban4jp | 0:b1be2bea94df | 4 | #include "OAuth4Tw.h" |
ban4jp | 0:b1be2bea94df | 5 | |
ban4jp | 0:b1be2bea94df | 6 | #if defined(TARGET_LPC11U24) |
ban4jp | 0:b1be2bea94df | 7 | SD_iSDIO sd(p11, p12, p13, p14, "sd"); // MOSI, MISO, SCLK, SSEL |
ban4jp | 0:b1be2bea94df | 8 | #elif defined(TARGET_LPC1114) |
ban4jp | 0:b1be2bea94df | 9 | SD_iSDIO sd(p11, p12, p13, p14, "sd"); // MOSI, MISO, SCLK, SSEL |
ban4jp | 0:b1be2bea94df | 10 | #elif defined(TARGET_LPC1549) |
ban4jp | 0:b1be2bea94df | 11 | SD_iSDIO sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCLK, SSEL |
ban4jp | 0:b1be2bea94df | 12 | #else |
ban4jp | 0:b1be2bea94df | 13 | #error |
ban4jp | 0:b1be2bea94df | 14 | #endif |
ban4jp | 0:b1be2bea94df | 15 | |
ban4jp | 0:b1be2bea94df | 16 | Serial pc(USBTX, USBRX); |
ban4jp | 0:b1be2bea94df | 17 | |
ban4jp | 0:b1be2bea94df | 18 | OAuth4Tw oa4t("XXXXXXXXXXXXXXXXXXXXXXXXX", // Consumer key |
ban4jp | 0:b1be2bea94df | 19 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", // Consumer secret |
ban4jp | 0:b1be2bea94df | 20 | "000000000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Access token |
ban4jp | 0:b1be2bea94df | 21 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); // Access token secret |
ban4jp | 0:b1be2bea94df | 22 | |
ban4jp | 0:b1be2bea94df | 23 | //************************************************** |
ban4jp | 0:b1be2bea94df | 24 | uint8_t buffer[512]; |
ban4jp | 0:b1be2bea94df | 25 | void printByte(uint8_t value) |
ban4jp | 0:b1be2bea94df | 26 | { |
ban4jp | 0:b1be2bea94df | 27 | pc.printf("%x", value >> 4); |
ban4jp | 0:b1be2bea94df | 28 | pc.printf("%x", value & 0xF); |
ban4jp | 0:b1be2bea94df | 29 | } |
ban4jp | 0:b1be2bea94df | 30 | void printBytes(uint8_t* p, uint32_t len) |
ban4jp | 0:b1be2bea94df | 31 | { |
ban4jp | 0:b1be2bea94df | 32 | for (int i = 0; i < len; ++i) { |
ban4jp | 0:b1be2bea94df | 33 | printByte(p[i]); |
ban4jp | 0:b1be2bea94df | 34 | } |
ban4jp | 0:b1be2bea94df | 35 | } |
ban4jp | 0:b1be2bea94df | 36 | void printIPAddress(uint8_t* p) |
ban4jp | 0:b1be2bea94df | 37 | { |
ban4jp | 0:b1be2bea94df | 38 | pc.printf("%d", p[0]); |
ban4jp | 0:b1be2bea94df | 39 | pc.printf("."); |
ban4jp | 0:b1be2bea94df | 40 | pc.printf("%d", p[1]); |
ban4jp | 0:b1be2bea94df | 41 | pc.printf("."); |
ban4jp | 0:b1be2bea94df | 42 | pc.printf("%d", p[2]); |
ban4jp | 0:b1be2bea94df | 43 | pc.printf("."); |
ban4jp | 0:b1be2bea94df | 44 | pc.printf("%d", p[3]); |
ban4jp | 0:b1be2bea94df | 45 | } |
ban4jp | 0:b1be2bea94df | 46 | uint8_t iSDIO_status() |
ban4jp | 0:b1be2bea94df | 47 | { |
ban4jp | 0:b1be2bea94df | 48 | pc.printf("\nRead iSDIO Status Register"); |
ban4jp | 0:b1be2bea94df | 49 | // Read iSDIO Status Register (E7 1.10 2.2.2.1) |
ban4jp | 0:b1be2bea94df | 50 | memset(buffer, 0, 0x200); |
ban4jp | 0:b1be2bea94df | 51 | if (!sd.readExtMemory(1, 1, 0x400, 0x200, buffer)) { |
ban4jp | 0:b1be2bea94df | 52 | return false; |
ban4jp | 0:b1be2bea94df | 53 | } |
ban4jp | 0:b1be2bea94df | 54 | #if 0 |
ban4jp | 0:b1be2bea94df | 55 | for (int i = 0; i < 0x200; i++) { |
ban4jp | 0:b1be2bea94df | 56 | pc.printf("%2x ", buffer[i]); |
ban4jp | 0:b1be2bea94df | 57 | if ((i & 0xf) == 0xf) pc.printf("\n"); |
ban4jp | 0:b1be2bea94df | 58 | } |
ban4jp | 0:b1be2bea94df | 59 | #endif |
ban4jp | 0:b1be2bea94df | 60 | // Show values in the common status area. |
ban4jp | 0:b1be2bea94df | 61 | pc.printf("\n == iSDIO Status Registers == "); |
ban4jp | 0:b1be2bea94df | 62 | pc.printf("\n [0400h] Command Write Status: "); |
ban4jp | 0:b1be2bea94df | 63 | if (buffer[0x000] & 0x01) pc.printf("CWU "); |
ban4jp | 0:b1be2bea94df | 64 | if (buffer[0x000] & 0x02) pc.printf("CWA "); |
ban4jp | 0:b1be2bea94df | 65 | pc.printf("\n [0420h] iSDIO Status: "); |
ban4jp | 0:b1be2bea94df | 66 | if (buffer[0x020] & 0x01) pc.printf("CRU "); |
ban4jp | 0:b1be2bea94df | 67 | if (buffer[0x020] & 0x02) pc.printf("ESU "); |
ban4jp | 0:b1be2bea94df | 68 | if (buffer[0x020] & 0x04) pc.printf("MCU "); |
ban4jp | 0:b1be2bea94df | 69 | if (buffer[0x020] & 0x08) pc.printf("ASU "); |
ban4jp | 0:b1be2bea94df | 70 | pc.printf("\n [0422h] iSDIO Int Enable: "); |
ban4jp | 0:b1be2bea94df | 71 | if (buffer[0x022] & 0x01) pc.printf("CRU_ENA "); |
ban4jp | 0:b1be2bea94df | 72 | if (buffer[0x022] & 0x02) pc.printf("ESU_ENA "); |
ban4jp | 0:b1be2bea94df | 73 | if (buffer[0x022] & 0x04) pc.printf("MCU_ENA "); |
ban4jp | 0:b1be2bea94df | 74 | if (buffer[0x022] & 0x08) pc.printf("ASU_ENA "); |
ban4jp | 0:b1be2bea94df | 75 | pc.printf("\n [0424h] Error Status: "); |
ban4jp | 0:b1be2bea94df | 76 | if (buffer[0x024] & 0x01) pc.printf("CRE "); |
ban4jp | 0:b1be2bea94df | 77 | if (buffer[0x024] & 0x02) pc.printf("CWE "); |
ban4jp | 0:b1be2bea94df | 78 | if (buffer[0x024] & 0x04) pc.printf("RRE "); |
ban4jp | 0:b1be2bea94df | 79 | if (buffer[0x024] & 0x08) pc.printf("APE "); |
ban4jp | 0:b1be2bea94df | 80 | pc.printf("\n [0426h] Memory Status: "); |
ban4jp | 0:b1be2bea94df | 81 | if (buffer[0x026] & 0x01) pc.printf("MEX "); |
ban4jp | 0:b1be2bea94df | 82 | if (buffer[0x026] & 0x02) pc.printf("FAT "); |
ban4jp | 0:b1be2bea94df | 83 | for (int i = 0; i < 8; ++i) { |
ban4jp | 0:b1be2bea94df | 84 | uint8_t addr = 0x40 + i * 0x14; |
ban4jp | 0:b1be2bea94df | 85 | pc.printf("\n [04"); |
ban4jp | 0:b1be2bea94df | 86 | printByte(addr); |
ban4jp | 0:b1be2bea94df | 87 | pc.printf("h] Command Response Status #"); |
ban4jp | 0:b1be2bea94df | 88 | pc.printf("%d", i + 1); |
ban4jp | 0:b1be2bea94df | 89 | pc.printf(": "); |
ban4jp | 0:b1be2bea94df | 90 | if (buffer[addr] & 0x01) { |
ban4jp | 0:b1be2bea94df | 91 | pc.printf("id = "); |
ban4jp | 0:b1be2bea94df | 92 | pc.printf("%d", get_u16(buffer + addr + 2)); |
ban4jp | 0:b1be2bea94df | 93 | pc.printf(", sequence id = "); |
ban4jp | 0:b1be2bea94df | 94 | pc.printf("%d", get_u32(buffer + addr + 4)); |
ban4jp | 0:b1be2bea94df | 95 | pc.printf(", status = "); |
ban4jp | 0:b1be2bea94df | 96 | switch (buffer[addr + 8]) { |
ban4jp | 0:b1be2bea94df | 97 | case 0x00: |
ban4jp | 0:b1be2bea94df | 98 | pc.printf("Initial"); |
ban4jp | 0:b1be2bea94df | 99 | break; |
ban4jp | 0:b1be2bea94df | 100 | case 0x01: |
ban4jp | 0:b1be2bea94df | 101 | pc.printf("Command Processing"); |
ban4jp | 0:b1be2bea94df | 102 | break; |
ban4jp | 0:b1be2bea94df | 103 | case 0x02: |
ban4jp | 0:b1be2bea94df | 104 | pc.printf("Command Rejected"); |
ban4jp | 0:b1be2bea94df | 105 | break; |
ban4jp | 0:b1be2bea94df | 106 | case 0x03: |
ban4jp | 0:b1be2bea94df | 107 | pc.printf("Process Succeeded"); |
ban4jp | 0:b1be2bea94df | 108 | break; |
ban4jp | 0:b1be2bea94df | 109 | case 0x04: |
ban4jp | 0:b1be2bea94df | 110 | pc.printf("Process Terminated"); |
ban4jp | 0:b1be2bea94df | 111 | break; |
ban4jp | 0:b1be2bea94df | 112 | default: |
ban4jp | 0:b1be2bea94df | 113 | pc.printf("Process Failed "); |
ban4jp | 0:b1be2bea94df | 114 | pc.printf("%h", buffer[addr + 8]); |
ban4jp | 0:b1be2bea94df | 115 | break; |
ban4jp | 0:b1be2bea94df | 116 | } |
ban4jp | 0:b1be2bea94df | 117 | } else { |
ban4jp | 0:b1be2bea94df | 118 | pc.printf("Not registered"); |
ban4jp | 0:b1be2bea94df | 119 | } |
ban4jp | 0:b1be2bea94df | 120 | } |
ban4jp | 0:b1be2bea94df | 121 | // Show values in the application status area. |
ban4jp | 0:b1be2bea94df | 122 | pc.printf("\n == Wireless LAN Status Registers =="); |
ban4jp | 0:b1be2bea94df | 123 | pc.printf("\n [0500h] DLNA Status: "); |
ban4jp | 0:b1be2bea94df | 124 | if (buffer[0x100] & 0x01) pc.printf("ULR "); |
ban4jp | 0:b1be2bea94df | 125 | if (buffer[0x100] & 0x02) pc.printf("DLU "); |
ban4jp | 0:b1be2bea94df | 126 | if (buffer[0x100] & 0x04) pc.printf("CBR "); |
ban4jp | 0:b1be2bea94df | 127 | if (buffer[0x100] & 0x08) pc.printf("CDR "); |
ban4jp | 0:b1be2bea94df | 128 | pc.printf("\n [0501h] P2P Status: "); |
ban4jp | 0:b1be2bea94df | 129 | if (buffer[0x101] & 0x01) pc.printf("ILU "); |
ban4jp | 0:b1be2bea94df | 130 | if (buffer[0x101] & 0x02) pc.printf("FLU "); |
ban4jp | 0:b1be2bea94df | 131 | pc.printf("\n [0502h] PTP Status: "); |
ban4jp | 0:b1be2bea94df | 132 | if (buffer[0x102] & 0x01) pc.printf("RPO "); |
ban4jp | 0:b1be2bea94df | 133 | if (buffer[0x102] & 0x02) pc.printf("RPD "); |
ban4jp | 0:b1be2bea94df | 134 | if (buffer[0x102] & 0x04) pc.printf("RPC "); |
ban4jp | 0:b1be2bea94df | 135 | if (buffer[0x102] & 0x08) pc.printf("CPI "); |
ban4jp | 0:b1be2bea94df | 136 | if (buffer[0x102] & 0x10) pc.printf("DPI "); |
ban4jp | 0:b1be2bea94df | 137 | if (buffer[0x102] & 0x20) pc.printf("CIL "); |
ban4jp | 0:b1be2bea94df | 138 | pc.printf("\n [0504h] Application: "); |
ban4jp | 0:b1be2bea94df | 139 | pc.printf((char *)buffer[0x104]); |
ban4jp | 0:b1be2bea94df | 140 | pc.printf("\n [0506h] WLAN: "); |
ban4jp | 0:b1be2bea94df | 141 | if ((buffer[0x106] & 0x01) == 0x00) pc.printf("No Scan, "); |
ban4jp | 0:b1be2bea94df | 142 | if ((buffer[0x106] & 0x01) == 0x01) pc.printf("Scanning, "); |
ban4jp | 0:b1be2bea94df | 143 | if ((buffer[0x106] & 0x06) == 0x00) pc.printf("No WPS, "); |
ban4jp | 0:b1be2bea94df | 144 | if ((buffer[0x106] & 0x06) == 0x02) pc.printf("WPS with PIN, "); |
ban4jp | 0:b1be2bea94df | 145 | if ((buffer[0x106] & 0x06) == 0x04) pc.printf("WPS with PBC, "); |
ban4jp | 0:b1be2bea94df | 146 | if ((buffer[0x106] & 0x08) == 0x00) pc.printf("Group Client, "); |
ban4jp | 0:b1be2bea94df | 147 | if ((buffer[0x106] & 0x08) == 0x08) pc.printf("Group Owner "); |
ban4jp | 0:b1be2bea94df | 148 | if ((buffer[0x106] & 0x10) == 0x00) pc.printf("STA, "); |
ban4jp | 0:b1be2bea94df | 149 | if ((buffer[0x106] & 0x10) == 0x10) pc.printf("AP, "); |
ban4jp | 0:b1be2bea94df | 150 | if ((buffer[0x106] & 0x60) == 0x00) pc.printf("Initial, "); |
ban4jp | 0:b1be2bea94df | 151 | if ((buffer[0x106] & 0x60) == 0x20) pc.printf("Infrastructure, "); |
ban4jp | 0:b1be2bea94df | 152 | if ((buffer[0x106] & 0x60) == 0x40) pc.printf("Wi-Fi Direct, "); |
ban4jp | 0:b1be2bea94df | 153 | if ((buffer[0x106] & 0x80) == 0x00) pc.printf("No Connection, "); |
ban4jp | 0:b1be2bea94df | 154 | if ((buffer[0x106] & 0x80) == 0x80) pc.printf("Connected, "); |
ban4jp | 0:b1be2bea94df | 155 | pc.printf("\n [0508h] SSID: "); |
ban4jp | 0:b1be2bea94df | 156 | for (int i = 0; i < 32 && buffer[0x108 + i] != 0; ++i) { |
ban4jp | 0:b1be2bea94df | 157 | pc.printf("%c", (char)buffer[0x108 + i]); |
ban4jp | 0:b1be2bea94df | 158 | } |
ban4jp | 0:b1be2bea94df | 159 | pc.printf("\n [0528h] Encryption Mode: "); |
ban4jp | 0:b1be2bea94df | 160 | switch (buffer[0x128]) { |
ban4jp | 0:b1be2bea94df | 161 | case 0 : |
ban4jp | 0:b1be2bea94df | 162 | pc.printf("Open System and no encryption"); |
ban4jp | 0:b1be2bea94df | 163 | break; |
ban4jp | 0:b1be2bea94df | 164 | case 1 : |
ban4jp | 0:b1be2bea94df | 165 | pc.printf("Open System and WEP"); |
ban4jp | 0:b1be2bea94df | 166 | break; |
ban4jp | 0:b1be2bea94df | 167 | case 2 : |
ban4jp | 0:b1be2bea94df | 168 | pc.printf("Shared Key and WEP"); |
ban4jp | 0:b1be2bea94df | 169 | break; |
ban4jp | 0:b1be2bea94df | 170 | case 3 : |
ban4jp | 0:b1be2bea94df | 171 | pc.printf("WPA-PSK and TKIP"); |
ban4jp | 0:b1be2bea94df | 172 | break; |
ban4jp | 0:b1be2bea94df | 173 | case 4 : |
ban4jp | 0:b1be2bea94df | 174 | pc.printf("WPA-PSK and AES"); |
ban4jp | 0:b1be2bea94df | 175 | break; |
ban4jp | 0:b1be2bea94df | 176 | case 5 : |
ban4jp | 0:b1be2bea94df | 177 | pc.printf("WPA2-PSK and TKIP"); |
ban4jp | 0:b1be2bea94df | 178 | break; |
ban4jp | 0:b1be2bea94df | 179 | case 6 : |
ban4jp | 0:b1be2bea94df | 180 | pc.printf("WPA2-PSK and AES"); |
ban4jp | 0:b1be2bea94df | 181 | break; |
ban4jp | 0:b1be2bea94df | 182 | default: |
ban4jp | 0:b1be2bea94df | 183 | pc.printf("Unknown"); |
ban4jp | 0:b1be2bea94df | 184 | } |
ban4jp | 0:b1be2bea94df | 185 | pc.printf("\n [0529h] Signal Strength: "); |
ban4jp | 0:b1be2bea94df | 186 | pc.printf("%d", buffer[0x129]); |
ban4jp | 0:b1be2bea94df | 187 | pc.printf("\n [052Ah] Channel: "); |
ban4jp | 0:b1be2bea94df | 188 | if (buffer[0x12A] == 0) pc.printf("No connection"); |
ban4jp | 0:b1be2bea94df | 189 | else pc.printf("%d", buffer[0x12A]); |
ban4jp | 0:b1be2bea94df | 190 | pc.printf("\n [0530h] MAC Address: "); |
ban4jp | 0:b1be2bea94df | 191 | printBytes(buffer + 0x130, 6); |
ban4jp | 0:b1be2bea94df | 192 | pc.printf("\n [0540h] ID: "); |
ban4jp | 0:b1be2bea94df | 193 | for (int i = 0; i < 16 && buffer[0x140 + i] != 0; ++i) { |
ban4jp | 0:b1be2bea94df | 194 | pc.printf("%c", (char)buffer[0x140 + i]); |
ban4jp | 0:b1be2bea94df | 195 | } |
ban4jp | 0:b1be2bea94df | 196 | pc.printf("\n [0550h] IP Address: "); |
ban4jp | 0:b1be2bea94df | 197 | printIPAddress(buffer + 0x150); |
ban4jp | 0:b1be2bea94df | 198 | pc.printf("\n [0554h] Subnet Mask: "); |
ban4jp | 0:b1be2bea94df | 199 | printIPAddress(buffer + 0x154); |
ban4jp | 0:b1be2bea94df | 200 | pc.printf("\n [0558h] Default Gateway: "); |
ban4jp | 0:b1be2bea94df | 201 | printIPAddress(buffer + 0x158); |
ban4jp | 0:b1be2bea94df | 202 | pc.printf("\n [055Ch] Preferred DNS Server: "); |
ban4jp | 0:b1be2bea94df | 203 | printIPAddress(buffer + 0x15C); |
ban4jp | 0:b1be2bea94df | 204 | pc.printf("\n [0560h] Alternate DNS Server: "); |
ban4jp | 0:b1be2bea94df | 205 | printIPAddress(buffer + 0x160); |
ban4jp | 0:b1be2bea94df | 206 | pc.printf("\n [0564h] Proxy Server: "); |
ban4jp | 0:b1be2bea94df | 207 | if ((buffer[0x164] & 0x01) == 0x00) pc.printf("Disabled"); |
ban4jp | 0:b1be2bea94df | 208 | if ((buffer[0x164] & 0x01) == 0x01) pc.printf("Enabled"); |
ban4jp | 0:b1be2bea94df | 209 | pc.printf("\n [0570h] Date: "); |
ban4jp | 0:b1be2bea94df | 210 | pc.printf("%d", buffer[0x171] + 1980); |
ban4jp | 0:b1be2bea94df | 211 | pc.printf("-"); |
ban4jp | 0:b1be2bea94df | 212 | pc.printf("%d", buffer[0x170] >> 4); |
ban4jp | 0:b1be2bea94df | 213 | pc.printf("-"); |
ban4jp | 0:b1be2bea94df | 214 | pc.printf("%d", buffer[0x170] & 0xF); |
ban4jp | 0:b1be2bea94df | 215 | pc.printf("\n [0572h] Time: "); |
ban4jp | 0:b1be2bea94df | 216 | pc.printf("%d", buffer[0x173] >> 3); |
ban4jp | 0:b1be2bea94df | 217 | pc.printf(":"); |
ban4jp | 0:b1be2bea94df | 218 | pc.printf("%d", buffer[0x172] << 3 | buffer[0x170] >> 3); |
ban4jp | 0:b1be2bea94df | 219 | pc.printf(":"); |
ban4jp | 0:b1be2bea94df | 220 | pc.printf("%d", (buffer[0x172] & 0x1F) * 2); |
ban4jp | 0:b1be2bea94df | 221 | pc.printf("\n [0574h] HTTP Status: "); |
ban4jp | 0:b1be2bea94df | 222 | pc.printf("%d", buffer[0x174] & 0xEF); |
ban4jp | 0:b1be2bea94df | 223 | if ((buffer[0x174] & 0x80) == 0x00) pc.printf(" (No Processing)"); |
ban4jp | 0:b1be2bea94df | 224 | if ((buffer[0x174] & 0x80) == 0x80) pc.printf(" (Processing)"); |
ban4jp | 0:b1be2bea94df | 225 | pc.printf("\n [0575h] Power Save Management: "); |
ban4jp | 0:b1be2bea94df | 226 | if ((buffer[0x175] & 0x01) == 0x00) pc.printf("Power Save Mode Off"); |
ban4jp | 0:b1be2bea94df | 227 | if ((buffer[0x175] & 0x01) == 0x01) pc.printf("Power Save Mode On"); |
ban4jp | 0:b1be2bea94df | 228 | pc.printf("\n [0576h] File System Management: "); |
ban4jp | 0:b1be2bea94df | 229 | if ((buffer[0x176] & 0x01) == 0x00) pc.printf("FS Information may be modified"); |
ban4jp | 0:b1be2bea94df | 230 | if ((buffer[0x176] & 0x01) == 0x01) pc.printf("FS Information shall not be modified"); |
ban4jp | 0:b1be2bea94df | 231 | pc.printf("\n"); |
ban4jp | 0:b1be2bea94df | 232 | |
ban4jp | 0:b1be2bea94df | 233 | #if 0 |
ban4jp | 0:b1be2bea94df | 234 | memset(buffer, 0, 0x200); |
ban4jp | 0:b1be2bea94df | 235 | if (!sd2->readExtMemory(1, 1, 0x600, 0x100, buffer)) { |
ban4jp | 0:b1be2bea94df | 236 | return false; |
ban4jp | 0:b1be2bea94df | 237 | } |
ban4jp | 0:b1be2bea94df | 238 | |
ban4jp | 0:b1be2bea94df | 239 | for (int i = 0; i < 0x100; i++) { |
ban4jp | 0:b1be2bea94df | 240 | pc.printf("%2x ", buffer[i]); |
ban4jp | 0:b1be2bea94df | 241 | if ((i & 0xf) == 0xf) pc.printf("\n"); |
ban4jp | 0:b1be2bea94df | 242 | } |
ban4jp | 0:b1be2bea94df | 243 | #endif |
ban4jp | 0:b1be2bea94df | 244 | |
ban4jp | 0:b1be2bea94df | 245 | return true; |
ban4jp | 0:b1be2bea94df | 246 | } |
ban4jp | 0:b1be2bea94df | 247 | //************************************************** |
ban4jp | 0:b1be2bea94df | 248 | |
ban4jp | 0:b1be2bea94df | 249 | int main() |
ban4jp | 0:b1be2bea94df | 250 | { |
ban4jp | 0:b1be2bea94df | 251 | pc.printf("start.\n"); |
ban4jp | 0:b1be2bea94df | 252 | |
ban4jp | 0:b1be2bea94df | 253 | //Initialise card |
ban4jp | 0:b1be2bea94df | 254 | FILE *fp = fopen("/sd/mbed.txt", "w"); |
ban4jp | 0:b1be2bea94df | 255 | fclose(fp); |
ban4jp | 0:b1be2bea94df | 256 | |
ban4jp | 0:b1be2bea94df | 257 | // WiFi Connection -------------------- |
ban4jp | 0:b1be2bea94df | 258 | |
ban4jp | 0:b1be2bea94df | 259 | // Connection wait |
ban4jp | 0:b1be2bea94df | 260 | while(1) { |
ban4jp | 0:b1be2bea94df | 261 | memset(buffer, 0, 0x14); |
ban4jp | 0:b1be2bea94df | 262 | if (!sd.readExtMemory(1, 1, 0x506, 0x14, buffer)) { |
ban4jp | 0:b1be2bea94df | 263 | return -1; |
ban4jp | 0:b1be2bea94df | 264 | } |
ban4jp | 0:b1be2bea94df | 265 | uint8_t resp = get_u8(buffer); |
ban4jp | 0:b1be2bea94df | 266 | if ((resp & 0x80) != 0) { |
ban4jp | 0:b1be2bea94df | 267 | break; |
ban4jp | 0:b1be2bea94df | 268 | } |
ban4jp | 0:b1be2bea94df | 269 | pc.printf(".\n"); |
ban4jp | 0:b1be2bea94df | 270 | wait_ms(1000); |
ban4jp | 0:b1be2bea94df | 271 | } |
ban4jp | 0:b1be2bea94df | 272 | |
ban4jp | 0:b1be2bea94df | 273 | // Dump status |
ban4jp | 0:b1be2bea94df | 274 | if (iSDIO_status() == false) { |
ban4jp | 0:b1be2bea94df | 275 | pc.printf("Failed to read status.\n"); |
ban4jp | 0:b1be2bea94df | 276 | return -1; |
ban4jp | 0:b1be2bea94df | 277 | } |
ban4jp | 0:b1be2bea94df | 278 | |
ban4jp | 0:b1be2bea94df | 279 | // Abort command |
ban4jp | 0:b1be2bea94df | 280 | for (int i = 0; i < 8; ++i) { |
ban4jp | 0:b1be2bea94df | 281 | uint8_t addr = 0x40 + i * 0x14; |
ban4jp | 0:b1be2bea94df | 282 | if (buffer[addr] & 0x01) { |
ban4jp | 0:b1be2bea94df | 283 | int abortSequenceId = get_u32(buffer + addr + 4); |
ban4jp | 0:b1be2bea94df | 284 | int sequenceId = sd.getSequenceId(); |
ban4jp | 0:b1be2bea94df | 285 | memset(buffer, 0, 512); |
ban4jp | 0:b1be2bea94df | 286 | uint8_t* p = buffer; |
ban4jp | 0:b1be2bea94df | 287 | p = put_command_header(p, 1, 0); |
ban4jp | 0:b1be2bea94df | 288 | p = put_command_info_header(p, 0x12, sequenceId, 2); |
ban4jp | 0:b1be2bea94df | 289 | p = put_u32_arg(p, abortSequenceId); |
ban4jp | 0:b1be2bea94df | 290 | put_command_header(buffer, 1, (p - buffer)); |
ban4jp | 0:b1be2bea94df | 291 | if ( sd.writeExtDataPort(1, 1, 0x000, buffer) == false ) { |
ban4jp | 0:b1be2bea94df | 292 | return -1; |
ban4jp | 0:b1be2bea94df | 293 | } |
ban4jp | 0:b1be2bea94df | 294 | sd.waitResponse(sequenceId); |
ban4jp | 0:b1be2bea94df | 295 | } |
ban4jp | 0:b1be2bea94df | 296 | } |
ban4jp | 0:b1be2bea94df | 297 | for (int i = 0; i < 16; i++) { |
ban4jp | 0:b1be2bea94df | 298 | if (!sd.readExtDataPort(1, 1, 0x200, buffer)) { |
ban4jp | 0:b1be2bea94df | 299 | return -1; |
ban4jp | 0:b1be2bea94df | 300 | } |
ban4jp | 0:b1be2bea94df | 301 | } |
ban4jp | 0:b1be2bea94df | 302 | |
ban4jp | 0:b1be2bea94df | 303 | // Update time -------------------- |
ban4jp | 0:b1be2bea94df | 304 | |
ban4jp | 0:b1be2bea94df | 305 | HTTPClient http; |
ban4jp | 0:b1be2bea94df | 306 | char str[512]; |
ban4jp | 0:b1be2bea94df | 307 | |
ban4jp | 0:b1be2bea94df | 308 | pc.printf("Trying to update time...\n"); |
ban4jp | 0:b1be2bea94df | 309 | int ret = http.get("http://ntp-a1.nict.go.jp/cgi-bin/jst", str, 128); |
ban4jp | 0:b1be2bea94df | 310 | if (ret) { |
ban4jp | 0:b1be2bea94df | 311 | pc.printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode()); |
ban4jp | 0:b1be2bea94df | 312 | return -1; |
ban4jp | 0:b1be2bea94df | 313 | } |
ban4jp | 0:b1be2bea94df | 314 | |
ban4jp | 0:b1be2bea94df | 315 | pc.printf("Page fetched successfully - read %d characters\n", strlen(str)); |
ban4jp | 0:b1be2bea94df | 316 | pc.printf("Result: %s\n", str); |
ban4jp | 0:b1be2bea94df | 317 | |
ban4jp | 0:b1be2bea94df | 318 | if (strncmp(str, "<HTML>", 6) != 0) { |
ban4jp | 0:b1be2bea94df | 319 | pc.printf("format error 1\n"); |
ban4jp | 0:b1be2bea94df | 320 | return -1; |
ban4jp | 0:b1be2bea94df | 321 | } |
ban4jp | 0:b1be2bea94df | 322 | if (strncmp(&str[69], "</HTML>", 7) != 0) { |
ban4jp | 0:b1be2bea94df | 323 | pc.printf("format error 2\n"); |
ban4jp | 0:b1be2bea94df | 324 | return -1; |
ban4jp | 0:b1be2bea94df | 325 | } |
ban4jp | 0:b1be2bea94df | 326 | |
ban4jp | 0:b1be2bea94df | 327 | str[56] = '\0'; |
ban4jp | 0:b1be2bea94df | 328 | //pc.printf("%d\n", atol(&str[46])); |
ban4jp | 0:b1be2bea94df | 329 | set_time( atol(&str[46]) ); |
ban4jp | 0:b1be2bea94df | 330 | |
ban4jp | 0:b1be2bea94df | 331 | time_t ctTime = time(NULL); |
ban4jp | 0:b1be2bea94df | 332 | pc.printf("Time is set to (UTC): %s\n", ctime(&ctTime)); |
ban4jp | 0:b1be2bea94df | 333 | |
ban4jp | 0:b1be2bea94df | 334 | // Tweet -------------------- |
ban4jp | 0:b1be2bea94df | 335 | |
ban4jp | 0:b1be2bea94df | 336 | std::string uri = "https://api.twitter.com/1.1/statuses/update.json"; |
ban4jp | 0:b1be2bea94df | 337 | |
ban4jp | 0:b1be2bea94df | 338 | uri += "?status="; |
ban4jp | 0:b1be2bea94df | 339 | uri += OAuth4Tw::url_escape("Hello World!"); |
ban4jp | 0:b1be2bea94df | 340 | uri += OAuth4Tw::url_escape(ctime(&ctTime)); |
ban4jp | 0:b1be2bea94df | 341 | |
ban4jp | 0:b1be2bea94df | 342 | std::string postarg; |
ban4jp | 0:b1be2bea94df | 343 | std::string postres = oa4t.post(uri.c_str(), postarg); |
ban4jp | 0:b1be2bea94df | 344 | pc.printf("postres: %s\n", postres.c_str()); |
ban4jp | 0:b1be2bea94df | 345 | |
ban4jp | 0:b1be2bea94df | 346 | } |