add printf in snapshot to confirm the running
Dependents: Camera_C328_HTTP_SDcard_file_server_WIZwiki-W7500
Fork of CameraC328 by
CameraC328.cpp@2:6a72fcad5c0a, 2010-06-28 (annotated)
- Committer:
- shintamainjp
- Date:
- Mon Jun 28 13:57:15 2010 +0000
- Revision:
- 2:6a72fcad5c0a
- Parent:
- 1:167e51d598cf
- Child:
- 3:6d3150d4396a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 2:6a72fcad5c0a | 1 | #include "CameraC328.h" |
shintamainjp | 2:6a72fcad5c0a | 2 | |
shintamainjp | 2:6a72fcad5c0a | 3 | Serial debout(USBTX, USBRX); |
shintamainjp | 2:6a72fcad5c0a | 4 | |
shintamainjp | 2:6a72fcad5c0a | 5 | #if 0 |
shintamainjp | 2:6a72fcad5c0a | 6 | #define SENDFUNC sendBytesWithDebugOutput |
shintamainjp | 2:6a72fcad5c0a | 7 | #define RECVFUNC recvBytesWithDebugOutput |
shintamainjp | 2:6a72fcad5c0a | 8 | #else |
shintamainjp | 2:6a72fcad5c0a | 9 | #define SENDFUNC sendBytes |
shintamainjp | 2:6a72fcad5c0a | 10 | #define RECVFUNC recvBytes |
shintamainjp | 2:6a72fcad5c0a | 11 | #endif |
shintamainjp | 2:6a72fcad5c0a | 12 | |
shintamainjp | 2:6a72fcad5c0a | 13 | CameraC328::CameraC328(PinName tx, PinName rx) : serial(tx, rx), syncdone(false) { |
shintamainjp | 2:6a72fcad5c0a | 14 | serial.baud(BAUD); |
shintamainjp | 2:6a72fcad5c0a | 15 | } |
shintamainjp | 2:6a72fcad5c0a | 16 | |
shintamainjp | 2:6a72fcad5c0a | 17 | CameraC328::~CameraC328() { |
shintamainjp | 2:6a72fcad5c0a | 18 | } |
shintamainjp | 2:6a72fcad5c0a | 19 | |
shintamainjp | 2:6a72fcad5c0a | 20 | CameraC328::ErrorNumber CameraC328::sync() { |
shintamainjp | 2:6a72fcad5c0a | 21 | char send[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 22 | char recv[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 23 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 24 | send[1] = 0x0D; |
shintamainjp | 2:6a72fcad5c0a | 25 | send[2] = 0; |
shintamainjp | 2:6a72fcad5c0a | 26 | send[3] = 0; |
shintamainjp | 2:6a72fcad5c0a | 27 | send[4] = 0; |
shintamainjp | 2:6a72fcad5c0a | 28 | send[5] = 0; |
shintamainjp | 2:6a72fcad5c0a | 29 | for (int i = 0; i < SYNCMAX; i++) { |
shintamainjp | 2:6a72fcad5c0a | 30 | if (SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 31 | if (RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 32 | if ((0xAA == recv[0]) && (0x0E == recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 33 | if (RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 34 | if ((0xAA == recv[0]) && (0x0D == recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 35 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 36 | send[1] = 0x0E; |
shintamainjp | 2:6a72fcad5c0a | 37 | send[2] = 0x0D; |
shintamainjp | 2:6a72fcad5c0a | 38 | send[3] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 39 | send[4] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 40 | send[5] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 41 | if (SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 42 | syncdone = true; |
shintamainjp | 2:6a72fcad5c0a | 43 | /* |
shintamainjp | 2:6a72fcad5c0a | 44 | * After synchronization, the camera needs a little time for AEC and AGC to be stable. |
shintamainjp | 2:6a72fcad5c0a | 45 | * Users should wait for 1-2 seconds before capturing the first picture. |
shintamainjp | 2:6a72fcad5c0a | 46 | */ |
shintamainjp | 2:6a72fcad5c0a | 47 | wait(1); |
shintamainjp | 2:6a72fcad5c0a | 48 | return NoError; |
shintamainjp | 2:6a72fcad5c0a | 49 | } |
shintamainjp | 2:6a72fcad5c0a | 50 | } |
shintamainjp | 2:6a72fcad5c0a | 51 | } |
shintamainjp | 2:6a72fcad5c0a | 52 | } |
shintamainjp | 2:6a72fcad5c0a | 53 | } |
shintamainjp | 2:6a72fcad5c0a | 54 | } |
shintamainjp | 2:6a72fcad5c0a | 55 | wait(0.200); |
shintamainjp | 2:6a72fcad5c0a | 56 | } |
shintamainjp | 2:6a72fcad5c0a | 57 | return UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 58 | } |
shintamainjp | 2:6a72fcad5c0a | 59 | |
shintamainjp | 2:6a72fcad5c0a | 60 | CameraC328::ErrorNumber CameraC328::init(ColorType ct, RawResolution rr, JpegResolution jr) { |
shintamainjp | 2:6a72fcad5c0a | 61 | char send[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 62 | char recv[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 63 | |
shintamainjp | 2:6a72fcad5c0a | 64 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 65 | send[1] = 0x01; |
shintamainjp | 2:6a72fcad5c0a | 66 | send[2] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 67 | send[3] = (char)ct; |
shintamainjp | 2:6a72fcad5c0a | 68 | send[4] = (char)rr; |
shintamainjp | 2:6a72fcad5c0a | 69 | send[5] = (char)jr; |
shintamainjp | 2:6a72fcad5c0a | 70 | |
shintamainjp | 2:6a72fcad5c0a | 71 | if (!SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 72 | return (ErrorNumber)SendRegisterTimeout; |
shintamainjp | 2:6a72fcad5c0a | 73 | } |
shintamainjp | 2:6a72fcad5c0a | 74 | |
shintamainjp | 2:6a72fcad5c0a | 75 | wait(0.2); |
shintamainjp | 2:6a72fcad5c0a | 76 | if (!RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 77 | return (ErrorNumber)UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 78 | } |
shintamainjp | 2:6a72fcad5c0a | 79 | |
shintamainjp | 2:6a72fcad5c0a | 80 | if ((0xAA != recv[0]) || (0x0E != recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 81 | return (ErrorNumber)recv[4]; |
shintamainjp | 2:6a72fcad5c0a | 82 | } |
shintamainjp | 2:6a72fcad5c0a | 83 | |
shintamainjp | 2:6a72fcad5c0a | 84 | return (ErrorNumber)NoError; |
shintamainjp | 2:6a72fcad5c0a | 85 | } |
shintamainjp | 2:6a72fcad5c0a | 86 | |
shintamainjp | 2:6a72fcad5c0a | 87 | /* |
shintamainjp | 2:6a72fcad5c0a | 88 | * Get snapshot picture (uncompressed snapshot picture) |
shintamainjp | 2:6a72fcad5c0a | 89 | * |
shintamainjp | 2:6a72fcad5c0a | 90 | * @param func Pointer to a callback function. |
shintamainjp | 2:6a72fcad5c0a | 91 | * @return Status of the error. |
shintamainjp | 2:6a72fcad5c0a | 92 | */ |
shintamainjp | 2:6a72fcad5c0a | 93 | CameraC328::ErrorNumber CameraC328::getJpegSnapshotPicture(void(*func)(size_t done, size_t total, char c)) { |
shintamainjp | 2:6a72fcad5c0a | 94 | |
shintamainjp | 2:6a72fcad5c0a | 95 | char send[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 96 | char recv[COMMAND_LENGTH]; |
shintamainjp | 2:6a72fcad5c0a | 97 | |
shintamainjp | 2:6a72fcad5c0a | 98 | /* |
shintamainjp | 2:6a72fcad5c0a | 99 | * Snapshot (uncompressed picture) |
shintamainjp | 2:6a72fcad5c0a | 100 | */ |
shintamainjp | 2:6a72fcad5c0a | 101 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 102 | send[1] = 0x05; |
shintamainjp | 2:6a72fcad5c0a | 103 | send[2] = (char)UncompressedPicture; |
shintamainjp | 2:6a72fcad5c0a | 104 | send[3] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 105 | send[4] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 106 | send[5] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 107 | |
shintamainjp | 2:6a72fcad5c0a | 108 | if (!SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 109 | return (ErrorNumber)SendRegisterTimeout; |
shintamainjp | 2:6a72fcad5c0a | 110 | } |
shintamainjp | 2:6a72fcad5c0a | 111 | if (!RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 112 | return (ErrorNumber)UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 113 | } |
shintamainjp | 2:6a72fcad5c0a | 114 | if ((0xAA != recv[0]) || (0x0E != recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 115 | return (ErrorNumber)recv[4]; |
shintamainjp | 2:6a72fcad5c0a | 116 | } |
shintamainjp | 2:6a72fcad5c0a | 117 | |
shintamainjp | 2:6a72fcad5c0a | 118 | /* |
shintamainjp | 2:6a72fcad5c0a | 119 | * Get picture (snapshot picture) |
shintamainjp | 2:6a72fcad5c0a | 120 | */ |
shintamainjp | 2:6a72fcad5c0a | 121 | |
shintamainjp | 2:6a72fcad5c0a | 122 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 123 | send[1] = 0x04; |
shintamainjp | 2:6a72fcad5c0a | 124 | send[2] = (char)SnapshotPicture; |
shintamainjp | 2:6a72fcad5c0a | 125 | send[3] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 126 | send[4] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 127 | send[5] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 128 | |
shintamainjp | 2:6a72fcad5c0a | 129 | if (!SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 130 | return (ErrorNumber)SendRegisterTimeout; |
shintamainjp | 2:6a72fcad5c0a | 131 | } |
shintamainjp | 2:6a72fcad5c0a | 132 | if (!RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 133 | return (ErrorNumber)UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 134 | } |
shintamainjp | 2:6a72fcad5c0a | 135 | if ((0xAA != recv[0]) || (0x0E != recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 136 | return (ErrorNumber)recv[4]; |
shintamainjp | 2:6a72fcad5c0a | 137 | } |
shintamainjp | 2:6a72fcad5c0a | 138 | |
shintamainjp | 2:6a72fcad5c0a | 139 | /* |
shintamainjp | 2:6a72fcad5c0a | 140 | * image data |
shintamainjp | 2:6a72fcad5c0a | 141 | */ |
shintamainjp | 2:6a72fcad5c0a | 142 | while (!serial.readable()) { |
shintamainjp | 2:6a72fcad5c0a | 143 | } |
shintamainjp | 2:6a72fcad5c0a | 144 | if (!RECVFUNC(recv, sizeof(recv))) { |
shintamainjp | 2:6a72fcad5c0a | 145 | return (ErrorNumber)UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 146 | } |
shintamainjp | 2:6a72fcad5c0a | 147 | if ((0xAA != recv[0]) || (0x0A != recv[1])) { |
shintamainjp | 2:6a72fcad5c0a | 148 | return (ErrorNumber)recv[4]; |
shintamainjp | 2:6a72fcad5c0a | 149 | } |
shintamainjp | 2:6a72fcad5c0a | 150 | size_t imgsiz = (recv[5] << 16) | (recv[4] << 8) | (recv[3] << 0); |
shintamainjp | 2:6a72fcad5c0a | 151 | size_t imgcnt = 0; |
shintamainjp | 2:6a72fcad5c0a | 152 | for (int i = 0; i < (int)imgsiz; i++) { |
shintamainjp | 2:6a72fcad5c0a | 153 | char c; |
shintamainjp | 2:6a72fcad5c0a | 154 | if (!RECVFUNC(&c, 1)) { |
shintamainjp | 2:6a72fcad5c0a | 155 | return (ErrorNumber)UnexpectedReply; |
shintamainjp | 2:6a72fcad5c0a | 156 | } |
shintamainjp | 2:6a72fcad5c0a | 157 | imgcnt++; |
shintamainjp | 2:6a72fcad5c0a | 158 | func(imgcnt, imgsiz, c); |
shintamainjp | 2:6a72fcad5c0a | 159 | } |
shintamainjp | 2:6a72fcad5c0a | 160 | |
shintamainjp | 2:6a72fcad5c0a | 161 | /* |
shintamainjp | 2:6a72fcad5c0a | 162 | * ACK |
shintamainjp | 2:6a72fcad5c0a | 163 | */ |
shintamainjp | 2:6a72fcad5c0a | 164 | send[0] = 0xAA; |
shintamainjp | 2:6a72fcad5c0a | 165 | send[1] = 0x0E; |
shintamainjp | 2:6a72fcad5c0a | 166 | send[2] = 0x0A; |
shintamainjp | 2:6a72fcad5c0a | 167 | send[3] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 168 | send[4] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 169 | send[5] = 0x00; |
shintamainjp | 2:6a72fcad5c0a | 170 | if (!SENDFUNC(send, sizeof(send))) { |
shintamainjp | 2:6a72fcad5c0a | 171 | return (ErrorNumber)SendRegisterTimeout; |
shintamainjp | 2:6a72fcad5c0a | 172 | } |
shintamainjp | 2:6a72fcad5c0a | 173 | |
shintamainjp | 2:6a72fcad5c0a | 174 | return (ErrorNumber)NoError; |
shintamainjp | 2:6a72fcad5c0a | 175 | } |
shintamainjp | 2:6a72fcad5c0a | 176 | |
shintamainjp | 2:6a72fcad5c0a | 177 | /** |
shintamainjp | 2:6a72fcad5c0a | 178 | * Send bytes to camera module. |
shintamainjp | 2:6a72fcad5c0a | 179 | * |
shintamainjp | 2:6a72fcad5c0a | 180 | * @param buf Pointer to the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 181 | * @param len Length of the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 182 | * |
shintamainjp | 2:6a72fcad5c0a | 183 | * @return True if the data sended. |
shintamainjp | 2:6a72fcad5c0a | 184 | */ |
shintamainjp | 2:6a72fcad5c0a | 185 | bool CameraC328::sendBytes(char *buf, size_t len) { |
shintamainjp | 2:6a72fcad5c0a | 186 | for (uint32_t i = 0; i < (uint32_t)len; i++) { |
shintamainjp | 2:6a72fcad5c0a | 187 | int cnt = 0; |
shintamainjp | 2:6a72fcad5c0a | 188 | while (!serial.writeable()) { |
shintamainjp | 2:6a72fcad5c0a | 189 | wait(0.000001); |
shintamainjp | 2:6a72fcad5c0a | 190 | cnt++; |
shintamainjp | 2:6a72fcad5c0a | 191 | if (TIMEOUT_US < cnt) { |
shintamainjp | 2:6a72fcad5c0a | 192 | return false; |
shintamainjp | 2:6a72fcad5c0a | 193 | } |
shintamainjp | 2:6a72fcad5c0a | 194 | } |
shintamainjp | 2:6a72fcad5c0a | 195 | serial.putc(buf[i]); |
shintamainjp | 2:6a72fcad5c0a | 196 | } |
shintamainjp | 2:6a72fcad5c0a | 197 | return true; |
shintamainjp | 2:6a72fcad5c0a | 198 | } |
shintamainjp | 2:6a72fcad5c0a | 199 | |
shintamainjp | 2:6a72fcad5c0a | 200 | /** |
shintamainjp | 2:6a72fcad5c0a | 201 | * Send bytes to camera module. |
shintamainjp | 2:6a72fcad5c0a | 202 | * |
shintamainjp | 2:6a72fcad5c0a | 203 | * @param buf Pointer to the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 204 | * @param len Length of the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 205 | * |
shintamainjp | 2:6a72fcad5c0a | 206 | * @return True if the data sended. |
shintamainjp | 2:6a72fcad5c0a | 207 | */ |
shintamainjp | 2:6a72fcad5c0a | 208 | bool CameraC328::sendBytesWithDebugOutput(char *buf, size_t len) { |
shintamainjp | 2:6a72fcad5c0a | 209 | debout.printf("SEND : "); |
shintamainjp | 2:6a72fcad5c0a | 210 | for (uint32_t i = 0; i < (uint32_t)len; i++) { |
shintamainjp | 2:6a72fcad5c0a | 211 | int cnt = 0; |
shintamainjp | 2:6a72fcad5c0a | 212 | while (!serial.writeable()) { |
shintamainjp | 2:6a72fcad5c0a | 213 | wait(0.000001); |
shintamainjp | 2:6a72fcad5c0a | 214 | cnt++; |
shintamainjp | 2:6a72fcad5c0a | 215 | if (TIMEOUT_US < cnt) { |
shintamainjp | 2:6a72fcad5c0a | 216 | debout.printf(" [Timed out]\n"); |
shintamainjp | 2:6a72fcad5c0a | 217 | return false; |
shintamainjp | 2:6a72fcad5c0a | 218 | } |
shintamainjp | 2:6a72fcad5c0a | 219 | } |
shintamainjp | 2:6a72fcad5c0a | 220 | serial.putc(buf[i]); |
shintamainjp | 2:6a72fcad5c0a | 221 | debout.printf(" %02X", buf[i]); |
shintamainjp | 2:6a72fcad5c0a | 222 | } |
shintamainjp | 2:6a72fcad5c0a | 223 | debout.printf(" [OK]\n"); |
shintamainjp | 2:6a72fcad5c0a | 224 | return true; |
shintamainjp | 2:6a72fcad5c0a | 225 | } |
shintamainjp | 2:6a72fcad5c0a | 226 | |
shintamainjp | 2:6a72fcad5c0a | 227 | /** |
shintamainjp | 2:6a72fcad5c0a | 228 | * Receive bytes from camera module. |
shintamainjp | 2:6a72fcad5c0a | 229 | * |
shintamainjp | 2:6a72fcad5c0a | 230 | * @param buf Pointer to the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 231 | * @param len Length of the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 232 | * |
shintamainjp | 2:6a72fcad5c0a | 233 | * @return True if the data received. |
shintamainjp | 2:6a72fcad5c0a | 234 | */ |
shintamainjp | 2:6a72fcad5c0a | 235 | bool CameraC328::recvBytes(char *buf, size_t len) { |
shintamainjp | 2:6a72fcad5c0a | 236 | for (uint32_t i = 0; i < (uint32_t)len; i++) { |
shintamainjp | 2:6a72fcad5c0a | 237 | int cnt = 0; |
shintamainjp | 2:6a72fcad5c0a | 238 | while (!serial.readable()) { |
shintamainjp | 2:6a72fcad5c0a | 239 | wait(0.000001); |
shintamainjp | 2:6a72fcad5c0a | 240 | cnt++; |
shintamainjp | 2:6a72fcad5c0a | 241 | if (TIMEOUT_US < cnt) { |
shintamainjp | 2:6a72fcad5c0a | 242 | return false; |
shintamainjp | 2:6a72fcad5c0a | 243 | } |
shintamainjp | 2:6a72fcad5c0a | 244 | } |
shintamainjp | 2:6a72fcad5c0a | 245 | buf[i] = serial.getc(); |
shintamainjp | 2:6a72fcad5c0a | 246 | } |
shintamainjp | 2:6a72fcad5c0a | 247 | return true; |
shintamainjp | 2:6a72fcad5c0a | 248 | } |
shintamainjp | 2:6a72fcad5c0a | 249 | |
shintamainjp | 2:6a72fcad5c0a | 250 | /** |
shintamainjp | 2:6a72fcad5c0a | 251 | * Receive bytes from camera module. |
shintamainjp | 2:6a72fcad5c0a | 252 | * |
shintamainjp | 2:6a72fcad5c0a | 253 | * @param buf Pointer to the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 254 | * @param len Length of the data buffer. |
shintamainjp | 2:6a72fcad5c0a | 255 | * |
shintamainjp | 2:6a72fcad5c0a | 256 | * @return True if the data received. |
shintamainjp | 2:6a72fcad5c0a | 257 | */ |
shintamainjp | 2:6a72fcad5c0a | 258 | bool CameraC328::recvBytesWithDebugOutput(char *buf, size_t len) { |
shintamainjp | 2:6a72fcad5c0a | 259 | debout.printf("RECV : "); |
shintamainjp | 2:6a72fcad5c0a | 260 | for (uint32_t i = 0; i < (uint32_t)len; i++) { |
shintamainjp | 2:6a72fcad5c0a | 261 | int cnt = 0; |
shintamainjp | 2:6a72fcad5c0a | 262 | while (!serial.readable()) { |
shintamainjp | 2:6a72fcad5c0a | 263 | wait(0.000001); |
shintamainjp | 2:6a72fcad5c0a | 264 | cnt++; |
shintamainjp | 2:6a72fcad5c0a | 265 | if (TIMEOUT_US < cnt) { |
shintamainjp | 2:6a72fcad5c0a | 266 | debout.printf(" [Timed out]\n"); |
shintamainjp | 2:6a72fcad5c0a | 267 | return false; |
shintamainjp | 2:6a72fcad5c0a | 268 | } |
shintamainjp | 2:6a72fcad5c0a | 269 | } |
shintamainjp | 2:6a72fcad5c0a | 270 | buf[i] = serial.getc(); |
shintamainjp | 2:6a72fcad5c0a | 271 | debout.printf(" %02X", buf[i]); |
shintamainjp | 2:6a72fcad5c0a | 272 | } |
shintamainjp | 2:6a72fcad5c0a | 273 | debout.printf(" [OK]\n"); |
shintamainjp | 2:6a72fcad5c0a | 274 | return true; |
shintamainjp | 2:6a72fcad5c0a | 275 | } |