#include <stdint.h>
#include "pickle.h"                // SYS function prototypes
// ワード(2バイト)単位でのシリアル通信ラッパ
// ビッグエンディアン(0x1234は0x12 0x34の順番で送受信する)

// バッファに溜まっているデータの数をワード単位で得る

// 1ワード受信する
unsigned int serialReadOneWord(void) {
    uint8_t *rdBuf;
    uint32_t rdCnt;
    uint8_t buf[2]={0};

    USBCDC_finishGetData();
    USBCDC_getData(&rdBuf, &rdCnt);
    if(rdCnt != 0){
        buf[0]=*rdBuf;
        buf[1]=*(rdBuf+1);
    }
    
    return (((unsigned int)buf[0])<<8)|((unsigned int)buf[1]);
}

// データが来るまで待機し、1ワード受信する
unsigned int serialReadOneWordBlock(void) {
    uint8_t *rdBuf;
    uint32_t rdCnt;
    uint8_t buf[2];
    
    USBCDC_finishGetData();
    rdCnt=0;
    do {
        SYS_Tasks ( );
        if (rdCnt!=0) USBCDC_finishGetData();
        USBCDC_getData(&rdBuf, &rdCnt);
    } while(rdCnt < 2);

    buf[0]=*rdBuf;
    buf[1]=*(rdBuf+1);
    
    return (((unsigned int)buf[0])<<8)|((unsigned int)buf[1]);
}

// 1ワード送信する
void serialWriteOneWord(unsigned int w) {
    uint8_t *wrBuf;
    uint16_t wrBufSize;
    char buf[2];
    uint8_t i;
    
    for(i=0;i<10;i++){SYS_Tasks();CORETIMER_DelayMs(1);};    //これがないと文字化け
    buf[0]=(w>>8)&0xff;
    buf[1]=w&0xff;
    if(USBCDC_getPutBuf(&wrBuf, &wrBufSize)){
        memcpy((void*)wrBuf, (void*)buf, 2);
        USBCDC_putData(wrBuf, 2);
    }
}
