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