Junichi Katsu / Mbed 2 deprecated BLEControl

Dependencies:   FatFileSystem TB6612FNG2 mbed

Committer:
mbed_Cookbook_SE
Date:
Mon Nov 30 09:32:15 2015 +0000
Revision:
0:de03cbbcd0ff
??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_Cookbook_SE 0:de03cbbcd0ff 1 #include "mbed.h"
mbed_Cookbook_SE 0:de03cbbcd0ff 2 #include "uvc.h"
mbed_Cookbook_SE 0:de03cbbcd0ff 3
mbed_Cookbook_SE 0:de03cbbcd0ff 4 //#define __DEBUG
mbed_Cookbook_SE 0:de03cbbcd0ff 5 //#define __DEBUG3
mbed_Cookbook_SE 0:de03cbbcd0ff 6 #include "mydbg.h"
mbed_Cookbook_SE 0:de03cbbcd0ff 7 #include "usb_itd.h"
mbed_Cookbook_SE 0:de03cbbcd0ff 8
mbed_Cookbook_SE 0:de03cbbcd0ff 9 uvc::uvc(int cam)
mbed_Cookbook_SE 0:de03cbbcd0ff 10 {
mbed_Cookbook_SE 0:de03cbbcd0ff 11 DBG("cam=%d\n", cam);
mbed_Cookbook_SE 0:de03cbbcd0ff 12 DBG_ASSERT(cam >= 0);
mbed_Cookbook_SE 0:de03cbbcd0ff 13 m_cam = cam;
mbed_Cookbook_SE 0:de03cbbcd0ff 14 m_init = false;
mbed_Cookbook_SE 0:de03cbbcd0ff 15 m_connect = false;
mbed_Cookbook_SE 0:de03cbbcd0ff 16 m_int_seq = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 17 m_iso_seq = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 18 m_width = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 19 m_height = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 20 m_payload = PAYLOAD_MJPEG;
mbed_Cookbook_SE 0:de03cbbcd0ff 21 m_FormatIndex = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 22 m_FrameIndex = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 23 m_FrameInterval = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 24 m_PacketSize = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 25 m_stream = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 26 for(int i = 0; i <= 15; i++) {
mbed_Cookbook_SE 0:de03cbbcd0ff 27 ReportConditionCode[i] = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 28 }
mbed_Cookbook_SE 0:de03cbbcd0ff 29 clearOnResult();
mbed_Cookbook_SE 0:de03cbbcd0ff 30 }
mbed_Cookbook_SE 0:de03cbbcd0ff 31
mbed_Cookbook_SE 0:de03cbbcd0ff 32 uvc::~uvc()
mbed_Cookbook_SE 0:de03cbbcd0ff 33 {
mbed_Cookbook_SE 0:de03cbbcd0ff 34 clearOnResult();
mbed_Cookbook_SE 0:de03cbbcd0ff 35 }
mbed_Cookbook_SE 0:de03cbbcd0ff 36
mbed_Cookbook_SE 0:de03cbbcd0ff 37 int uvc::setup()
mbed_Cookbook_SE 0:de03cbbcd0ff 38 {
mbed_Cookbook_SE 0:de03cbbcd0ff 39 if (!m_init) {
mbed_Cookbook_SE 0:de03cbbcd0ff 40 return _init();
mbed_Cookbook_SE 0:de03cbbcd0ff 41 }
mbed_Cookbook_SE 0:de03cbbcd0ff 42 return 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 43 }
mbed_Cookbook_SE 0:de03cbbcd0ff 44
mbed_Cookbook_SE 0:de03cbbcd0ff 45 int uvc::get_jpeg(const char* path)
mbed_Cookbook_SE 0:de03cbbcd0ff 46 {
mbed_Cookbook_SE 0:de03cbbcd0ff 47 const int size = 4800;
mbed_Cookbook_SE 0:de03cbbcd0ff 48 const int timeout = 5000;
mbed_Cookbook_SE 0:de03cbbcd0ff 49 uint8_t* buf = new uint8_t[size];
mbed_Cookbook_SE 0:de03cbbcd0ff 50 DBG_ASSERT(buf);
mbed_Cookbook_SE 0:de03cbbcd0ff 51 if (buf == NULL) {
mbed_Cookbook_SE 0:de03cbbcd0ff 52 return -1;
mbed_Cookbook_SE 0:de03cbbcd0ff 53 }
mbed_Cookbook_SE 0:de03cbbcd0ff 54 usb_mjpeg mjpeg(buf, size);
mbed_Cookbook_SE 0:de03cbbcd0ff 55 attach(&mjpeg);
mbed_Cookbook_SE 0:de03cbbcd0ff 56 Timer t;
mbed_Cookbook_SE 0:de03cbbcd0ff 57 t.reset();
mbed_Cookbook_SE 0:de03cbbcd0ff 58 t.start();
mbed_Cookbook_SE 0:de03cbbcd0ff 59 while(t.read_ms() < timeout) {
mbed_Cookbook_SE 0:de03cbbcd0ff 60 int stat = isochronous();
mbed_Cookbook_SE 0:de03cbbcd0ff 61 if (mjpeg.status() >= 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 62 break;
mbed_Cookbook_SE 0:de03cbbcd0ff 63 }
mbed_Cookbook_SE 0:de03cbbcd0ff 64 }
mbed_Cookbook_SE 0:de03cbbcd0ff 65 detach();
mbed_Cookbook_SE 0:de03cbbcd0ff 66 int len = mjpeg.status();
mbed_Cookbook_SE 0:de03cbbcd0ff 67 if (len >= 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 68 if (path != NULL) {
mbed_Cookbook_SE 0:de03cbbcd0ff 69 FILE *fp = fopen(path, "wb");
mbed_Cookbook_SE 0:de03cbbcd0ff 70 if (fp != NULL) {
mbed_Cookbook_SE 0:de03cbbcd0ff 71 for(int i = 0; i < len; i++) {
mbed_Cookbook_SE 0:de03cbbcd0ff 72 fputc(buf[i], fp);
mbed_Cookbook_SE 0:de03cbbcd0ff 73 }
mbed_Cookbook_SE 0:de03cbbcd0ff 74 fclose(fp);
mbed_Cookbook_SE 0:de03cbbcd0ff 75 }
mbed_Cookbook_SE 0:de03cbbcd0ff 76 }
mbed_Cookbook_SE 0:de03cbbcd0ff 77 }
mbed_Cookbook_SE 0:de03cbbcd0ff 78 delete[] buf;
mbed_Cookbook_SE 0:de03cbbcd0ff 79 return len;
mbed_Cookbook_SE 0:de03cbbcd0ff 80 }
mbed_Cookbook_SE 0:de03cbbcd0ff 81
mbed_Cookbook_SE 0:de03cbbcd0ff 82 int uvc::get_jpeg(uint8_t* buf, int size)
mbed_Cookbook_SE 0:de03cbbcd0ff 83 {
mbed_Cookbook_SE 0:de03cbbcd0ff 84 //DBG("buf=%p size=%d\n", buf, size);
mbed_Cookbook_SE 0:de03cbbcd0ff 85 const int timeout = 5000;
mbed_Cookbook_SE 0:de03cbbcd0ff 86 usb_mjpeg mjpeg(buf, size);
mbed_Cookbook_SE 0:de03cbbcd0ff 87 attach(&mjpeg);
mbed_Cookbook_SE 0:de03cbbcd0ff 88 Timer t;
mbed_Cookbook_SE 0:de03cbbcd0ff 89 t.reset();
mbed_Cookbook_SE 0:de03cbbcd0ff 90 t.start();
mbed_Cookbook_SE 0:de03cbbcd0ff 91 while(t.read_ms() < timeout) {
mbed_Cookbook_SE 0:de03cbbcd0ff 92 int stat = isochronous();
mbed_Cookbook_SE 0:de03cbbcd0ff 93 if (mjpeg.status() >= 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 94 break;
mbed_Cookbook_SE 0:de03cbbcd0ff 95 }
mbed_Cookbook_SE 0:de03cbbcd0ff 96 }
mbed_Cookbook_SE 0:de03cbbcd0ff 97 detach();
mbed_Cookbook_SE 0:de03cbbcd0ff 98 int len = mjpeg.status();
mbed_Cookbook_SE 0:de03cbbcd0ff 99 return len;
mbed_Cookbook_SE 0:de03cbbcd0ff 100 }
mbed_Cookbook_SE 0:de03cbbcd0ff 101
mbed_Cookbook_SE 0:de03cbbcd0ff 102 bool uvc::interrupt()
mbed_Cookbook_SE 0:de03cbbcd0ff 103 {
mbed_Cookbook_SE 0:de03cbbcd0ff 104 if (!m_init) {
mbed_Cookbook_SE 0:de03cbbcd0ff 105 _init();
mbed_Cookbook_SE 0:de03cbbcd0ff 106 }
mbed_Cookbook_SE 0:de03cbbcd0ff 107 if (m_int_seq == 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 108 int rc = m_pEpIntIn->transfer(m_int_buf, sizeof(m_int_buf));
mbed_Cookbook_SE 0:de03cbbcd0ff 109 if (rc != USBERR_PROCESSING) {
mbed_Cookbook_SE 0:de03cbbcd0ff 110 return false;
mbed_Cookbook_SE 0:de03cbbcd0ff 111 }
mbed_Cookbook_SE 0:de03cbbcd0ff 112 m_int_seq++;
mbed_Cookbook_SE 0:de03cbbcd0ff 113 }
mbed_Cookbook_SE 0:de03cbbcd0ff 114 int len = m_pEpIntIn->status();
mbed_Cookbook_SE 0:de03cbbcd0ff 115 if (len > 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 116 m_int_seq = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 117 DBG_BYTES("interrupt", m_int_buf, len);
mbed_Cookbook_SE 0:de03cbbcd0ff 118 return true;
mbed_Cookbook_SE 0:de03cbbcd0ff 119 }
mbed_Cookbook_SE 0:de03cbbcd0ff 120 return false;
mbed_Cookbook_SE 0:de03cbbcd0ff 121 }
mbed_Cookbook_SE 0:de03cbbcd0ff 122
mbed_Cookbook_SE 0:de03cbbcd0ff 123 #define CC_NOERROR 0x0
mbed_Cookbook_SE 0:de03cbbcd0ff 124 #define CC_DATAOVERRUN 0x8
mbed_Cookbook_SE 0:de03cbbcd0ff 125 #define CC_DATAUNDERRUN 0x9
mbed_Cookbook_SE 0:de03cbbcd0ff 126
mbed_Cookbook_SE 0:de03cbbcd0ff 127 inline void DI()
mbed_Cookbook_SE 0:de03cbbcd0ff 128 {
mbed_Cookbook_SE 0:de03cbbcd0ff 129 NVIC_DisableIRQ(USB_IRQn);
mbed_Cookbook_SE 0:de03cbbcd0ff 130 }
mbed_Cookbook_SE 0:de03cbbcd0ff 131
mbed_Cookbook_SE 0:de03cbbcd0ff 132 inline void EI()
mbed_Cookbook_SE 0:de03cbbcd0ff 133 {
mbed_Cookbook_SE 0:de03cbbcd0ff 134 NVIC_EnableIRQ(USB_IRQn);
mbed_Cookbook_SE 0:de03cbbcd0ff 135 }
mbed_Cookbook_SE 0:de03cbbcd0ff 136
mbed_Cookbook_SE 0:de03cbbcd0ff 137 int uvc::isochronous()
mbed_Cookbook_SE 0:de03cbbcd0ff 138 {
mbed_Cookbook_SE 0:de03cbbcd0ff 139 if (m_iso_seq == 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 140 uint16_t frame = LPC_USB->HcFmNumber;
mbed_Cookbook_SE 0:de03cbbcd0ff 141 m_iso_frame = frame + 10; // 10msec
mbed_Cookbook_SE 0:de03cbbcd0ff 142 DBG_ASSERT(m_pEpIsoIn->m_itdActive == 0);
mbed_Cookbook_SE 0:de03cbbcd0ff 143 m_iso_seq++;
mbed_Cookbook_SE 0:de03cbbcd0ff 144 }
mbed_Cookbook_SE 0:de03cbbcd0ff 145 if (m_iso_seq == 1) {
mbed_Cookbook_SE 0:de03cbbcd0ff 146 DBG_ASSERT(m_itdCount > 0 && m_itdCount <= 8);
mbed_Cookbook_SE 0:de03cbbcd0ff 147 while(m_pEpIsoIn->m_itdActive < m_itdCount) {
mbed_Cookbook_SE 0:de03cbbcd0ff 148 int len = m_PacketSize * m_FrameCount;
mbed_Cookbook_SE 0:de03cbbcd0ff 149 uint8_t* buf = (uint8_t*)usb_get_bp(len);
mbed_Cookbook_SE 0:de03cbbcd0ff 150 if (buf == NULL) {
mbed_Cookbook_SE 0:de03cbbcd0ff 151 DBG("len=%d\n", len);
mbed_Cookbook_SE 0:de03cbbcd0ff 152 DBG("m_itdCount=%d\n", m_itdCount);
mbed_Cookbook_SE 0:de03cbbcd0ff 153 }
mbed_Cookbook_SE 0:de03cbbcd0ff 154 DBG_ASSERT(buf);
mbed_Cookbook_SE 0:de03cbbcd0ff 155 int rc = m_pEpIsoIn->transfer(m_iso_frame, m_FrameCount, buf, len);
mbed_Cookbook_SE 0:de03cbbcd0ff 156 m_iso_frame += m_FrameCount;
mbed_Cookbook_SE 0:de03cbbcd0ff 157 DBG_ASSERT(rc == USBERR_PROCESSING);
mbed_Cookbook_SE 0:de03cbbcd0ff 158 }
mbed_Cookbook_SE 0:de03cbbcd0ff 159 m_iso_seq++;
mbed_Cookbook_SE 0:de03cbbcd0ff 160 }
mbed_Cookbook_SE 0:de03cbbcd0ff 161 if (m_iso_seq == 2) {
mbed_Cookbook_SE 0:de03cbbcd0ff 162 //DBG("frame:%04X\n", LPC_USB->HcFmNumber);
mbed_Cookbook_SE 0:de03cbbcd0ff 163 while(1) {
mbed_Cookbook_SE 0:de03cbbcd0ff 164 DI();
mbed_Cookbook_SE 0:de03cbbcd0ff 165 bool empty = m_pEpIsoIn->queue_done_itd.empty();
mbed_Cookbook_SE 0:de03cbbcd0ff 166 EI();
mbed_Cookbook_SE 0:de03cbbcd0ff 167
mbed_Cookbook_SE 0:de03cbbcd0ff 168 if (empty) {
mbed_Cookbook_SE 0:de03cbbcd0ff 169 break;
mbed_Cookbook_SE 0:de03cbbcd0ff 170 }
mbed_Cookbook_SE 0:de03cbbcd0ff 171
mbed_Cookbook_SE 0:de03cbbcd0ff 172 DI();
mbed_Cookbook_SE 0:de03cbbcd0ff 173 HCITD* itd = m_pEpIsoIn->queue_done_itd.front();
mbed_Cookbook_SE 0:de03cbbcd0ff 174 m_pEpIsoIn->queue_done_itd.pop();
mbed_Cookbook_SE 0:de03cbbcd0ff 175 EI();
mbed_Cookbook_SE 0:de03cbbcd0ff 176
mbed_Cookbook_SE 0:de03cbbcd0ff 177 m_pEpIsoIn->m_itdActive--;
mbed_Cookbook_SE 0:de03cbbcd0ff 178 usb_itd iso_td(itd);
mbed_Cookbook_SE 0:de03cbbcd0ff 179 //DBG("frame:%04X\n", LPC_USB->HcFmNumber);
mbed_Cookbook_SE 0:de03cbbcd0ff 180 //DBG("itd->Control=%08X\n", itd->Control);
mbed_Cookbook_SE 0:de03cbbcd0ff 181 int cc = iso_td.ConditionCode();
mbed_Cookbook_SE 0:de03cbbcd0ff 182 DBG_ASSERT(cc >= 0 && cc <= 15);
mbed_Cookbook_SE 0:de03cbbcd0ff 183 ReportConditionCode[cc]++;
mbed_Cookbook_SE 0:de03cbbcd0ff 184 if (cc != CC_NOERROR) {
mbed_Cookbook_SE 0:de03cbbcd0ff 185 DBG3("%04X ERR:%X\n", LPC_USB->HcFmNumber, cc);
mbed_Cookbook_SE 0:de03cbbcd0ff 186 iso_td.free();
mbed_Cookbook_SE 0:de03cbbcd0ff 187 m_iso_seq = 3;
mbed_Cookbook_SE 0:de03cbbcd0ff 188 return -1;
mbed_Cookbook_SE 0:de03cbbcd0ff 189 }
mbed_Cookbook_SE 0:de03cbbcd0ff 190 uint16_t frame = iso_td.StartingFrame();
mbed_Cookbook_SE 0:de03cbbcd0ff 191 int fc = iso_td.FrameCount();
mbed_Cookbook_SE 0:de03cbbcd0ff 192 for(int i = 0; i < fc; i++) {
mbed_Cookbook_SE 0:de03cbbcd0ff 193 int len = iso_td.Length(i);
mbed_Cookbook_SE 0:de03cbbcd0ff 194 if (len > 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 195 if (m_stream) {
mbed_Cookbook_SE 0:de03cbbcd0ff 196 m_stream->input(frame+i, iso_td.BufferPage(i, m_PacketSize), len);
mbed_Cookbook_SE 0:de03cbbcd0ff 197 }
mbed_Cookbook_SE 0:de03cbbcd0ff 198 onResult(frame+i, iso_td.BufferPage(i, m_PacketSize), len);
mbed_Cookbook_SE 0:de03cbbcd0ff 199 }
mbed_Cookbook_SE 0:de03cbbcd0ff 200 }
mbed_Cookbook_SE 0:de03cbbcd0ff 201 iso_td.free();
mbed_Cookbook_SE 0:de03cbbcd0ff 202 }
mbed_Cookbook_SE 0:de03cbbcd0ff 203 //DBG("frame:%04X\n", LPC_USB->HcFmNumber);
mbed_Cookbook_SE 0:de03cbbcd0ff 204 m_iso_seq = 1;
mbed_Cookbook_SE 0:de03cbbcd0ff 205 return m_pEpIsoIn->m_itdActive;
mbed_Cookbook_SE 0:de03cbbcd0ff 206 }
mbed_Cookbook_SE 0:de03cbbcd0ff 207 if (m_iso_seq == 3) { // cleanup
mbed_Cookbook_SE 0:de03cbbcd0ff 208 DBG("m_pEpIsoIn->queue_done_itd.size() :%d\n", m_pEpIsoIn->queue_done_itd.size());
mbed_Cookbook_SE 0:de03cbbcd0ff 209 while(1) {
mbed_Cookbook_SE 0:de03cbbcd0ff 210 DI();
mbed_Cookbook_SE 0:de03cbbcd0ff 211 bool empty = m_pEpIsoIn->queue_done_itd.empty();
mbed_Cookbook_SE 0:de03cbbcd0ff 212 EI();
mbed_Cookbook_SE 0:de03cbbcd0ff 213
mbed_Cookbook_SE 0:de03cbbcd0ff 214 if (empty) {
mbed_Cookbook_SE 0:de03cbbcd0ff 215 break;
mbed_Cookbook_SE 0:de03cbbcd0ff 216 }
mbed_Cookbook_SE 0:de03cbbcd0ff 217
mbed_Cookbook_SE 0:de03cbbcd0ff 218 DI();
mbed_Cookbook_SE 0:de03cbbcd0ff 219 HCITD* itd = m_pEpIsoIn->queue_done_itd.front();
mbed_Cookbook_SE 0:de03cbbcd0ff 220 m_pEpIsoIn->queue_done_itd.pop();
mbed_Cookbook_SE 0:de03cbbcd0ff 221 EI();
mbed_Cookbook_SE 0:de03cbbcd0ff 222
mbed_Cookbook_SE 0:de03cbbcd0ff 223 m_pEpIsoIn->m_itdActive--;
mbed_Cookbook_SE 0:de03cbbcd0ff 224 usb_itd iso_td(itd);
mbed_Cookbook_SE 0:de03cbbcd0ff 225 iso_td.free();
mbed_Cookbook_SE 0:de03cbbcd0ff 226 }
mbed_Cookbook_SE 0:de03cbbcd0ff 227 if (m_pEpIsoIn->m_itdActive == 0) {
mbed_Cookbook_SE 0:de03cbbcd0ff 228 m_iso_seq = 0;
mbed_Cookbook_SE 0:de03cbbcd0ff 229 }
mbed_Cookbook_SE 0:de03cbbcd0ff 230 }
mbed_Cookbook_SE 0:de03cbbcd0ff 231 return m_pEpIsoIn->m_itdActive;
mbed_Cookbook_SE 0:de03cbbcd0ff 232 }
mbed_Cookbook_SE 0:de03cbbcd0ff 233
mbed_Cookbook_SE 0:de03cbbcd0ff 234 void uvc::attach(usb_stream* stream)
mbed_Cookbook_SE 0:de03cbbcd0ff 235 {
mbed_Cookbook_SE 0:de03cbbcd0ff 236 m_stream = stream;
mbed_Cookbook_SE 0:de03cbbcd0ff 237 }
mbed_Cookbook_SE 0:de03cbbcd0ff 238
mbed_Cookbook_SE 0:de03cbbcd0ff 239 void uvc::detach()
mbed_Cookbook_SE 0:de03cbbcd0ff 240 {
mbed_Cookbook_SE 0:de03cbbcd0ff 241 m_stream = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 242 }
mbed_Cookbook_SE 0:de03cbbcd0ff 243
mbed_Cookbook_SE 0:de03cbbcd0ff 244 void uvc::onResult(uint16_t frame, uint8_t* buf, int len)
mbed_Cookbook_SE 0:de03cbbcd0ff 245 {
mbed_Cookbook_SE 0:de03cbbcd0ff 246 if(m_pCbItem && m_pCbMeth)
mbed_Cookbook_SE 0:de03cbbcd0ff 247 (m_pCbItem->*m_pCbMeth)(frame, buf, len);
mbed_Cookbook_SE 0:de03cbbcd0ff 248 else if(m_pCb)
mbed_Cookbook_SE 0:de03cbbcd0ff 249 m_pCb(frame, buf, len);
mbed_Cookbook_SE 0:de03cbbcd0ff 250 }
mbed_Cookbook_SE 0:de03cbbcd0ff 251
mbed_Cookbook_SE 0:de03cbbcd0ff 252 void uvc::setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) )
mbed_Cookbook_SE 0:de03cbbcd0ff 253 {
mbed_Cookbook_SE 0:de03cbbcd0ff 254 m_pCb = pMethod;
mbed_Cookbook_SE 0:de03cbbcd0ff 255 m_pCbItem = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 256 m_pCbMeth = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 257 }
mbed_Cookbook_SE 0:de03cbbcd0ff 258
mbed_Cookbook_SE 0:de03cbbcd0ff 259 void uvc::clearOnResult()
mbed_Cookbook_SE 0:de03cbbcd0ff 260 {
mbed_Cookbook_SE 0:de03cbbcd0ff 261 m_pCb = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 262 m_pCbItem = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 263 m_pCbMeth = NULL;
mbed_Cookbook_SE 0:de03cbbcd0ff 264 }