123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737 |
- #include "usr_config.h"
- #include "bsp_time.h"
- #include "system.h"
- #include "nrf_gpio.h"
- #include "app_charge.h"
- #include "app_flash.h"
- #include "ble_comm.h"
- #include "bsp_adc.h"
- #include "app_pair_chargerpin.h"
- #include "hal_led.h"
- #include "hal_charge.h"
- #include "app_one_wire.h"
- //发送协议
- // Host MAC[0] MAC[1] MAC[2]>>>>>> Client
- // Client MAC[3] MAC[4] MAC[5]>>>>>> Host
- //===========================================================================================================
- #define PIN_LED_RUN 100
- #define DATA_LENGTH 4
- #define BITWIDTH 30
- #define LOW_BIT_DELAY 15
- #define DELAY_SEND 100
- #define DELAY_REPLY 100
- #define DELAY_CHECK 100
- #define DELAY_LEDON (BITWIDTH * (8 * DATA_LENGTH + 3) * 2 + DELAY_SEND + DELAY_REPLY + DELAY_CHECK + 5 * BITWIDTH)
- #define LEDON_KEEP 100
- unsigned static char rxbuf[DATA_LENGTH];
- unsigned static char txbuf[DATA_LENGTH];
- unsigned static char savebuf[DATA_LENGTH];
- typedef void (*_Event)(unsigned char*,int);
- _Event _success_evt;
- static char one_ms_status = 0;
- static void null_pcs(void)
- {}
- void chargerpin_one_ms_init(_Event success_evt)
- {
- one_ms_status = 0;
- _success_evt=success_evt;
- Process_Start(0, "null_5pcs", null_pcs);
- Process_SetHoldOn(null_pcs, 1);
- TIME_Regist(chargerpin_one_ms_pcs);
- PAIR_CHARGERPIN_PRINT("-------------------------------------------chargerpin_one_ms_init.%d\r\n", 1);
- }
- void chargerpin_one_ms_uninit(void)
- {
- Process_Stop(null_pcs);
- TIME_UnRegist(chargerpin_one_ms_pcs);
- PAIR_CHARGERPIN_PRINT("-------------------------------------------chargerpin_one_ms_uninit.%d\r\n", 1);
- }
- void chargerpin_one_ms_pcs(void *t)
- {
- #if PAIR_CHARGERPIN_PRINTF
- unsigned int ms = *(unsigned int *)t;
- #endif
- static unsigned int bit_width = 0;
- static unsigned int now_bit = 0;
- static unsigned int delay_send_count = 0;
- static unsigned int delay_reply_count = 0;
- static unsigned int delay_check_count = 0;
- static unsigned int delay_ledon_count = 0;
- static int bitindex = 0;
- static int bytesindes = 0;
- static int value = 0;
- static int txrxcount = 0;
- static char lowbitdelay = 0;
- switch (one_ms_status)
- {
- case 0: // init
- bit_width = 0;
- now_bit = 0;
- delay_send_count = 0;
- delay_reply_count = 0;
- delay_check_count = 0;
- delay_ledon_count = 0;
- bitindex = 0;
- bytesindes = 0;
- value = 0;
- txrxcount = 0;
- one_ms_status = 0;
- lowbitdelay = 0;
- nrf_gpio_cfg(
- PIN_CHARGING,
- NRF_GPIO_PIN_DIR_OUTPUT,
- NRF_GPIO_PIN_INPUT_CONNECT,
- NRF_GPIO_PIN_NOPULL,
- NRF_GPIO_PIN_D0H1,
- NRF_GPIO_PIN_NOSENSE);
- nrf_gpio_cfg_watcher(PIN_CHARGING);
- one_ms_status = 1;
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("nrf_gpio_cfg_watcher(PIN_CHARGING); clear.%d\r\n", ms);
- break;
- case 1:
- if (now_bit == nrf_gpio_pin_read(PIN_CHARGING))
- {
- bit_width++;
- }
- else
- {
- //由高电平切换到低电平,下降信号
- if (now_bit == 1)
- {
- now_bit = 0;
- if ((bit_width > 1.5 * BITWIDTH - LOW_BIT_DELAY / 3) && (bit_width < 1.5 * BITWIDTH + LOW_BIT_DELAY / 3))
- {
- one_ms_status = 3;
- txrxcount = 1.5 * BITWIDTH;
- value = 30;
- if (mFlash.isHost == 0)
- {
- delay_ledon_count = 1.5 * BITWIDTH + DELAY_SEND;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count = 1.5 * BITWIDTH + DELAY_SEND.%d\r\n", txrxcount);
- }
- else
- {
- delay_ledon_count = 2.5 * BITWIDTH + DELAY_SEND + BITWIDTH * 8 * DATA_LENGTH + 1.5 * BITWIDTH + DELAY_REPLY;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count = 2.5 * BITWIDTH + DELAY_SEND + BITWIDTH*8*DATA_LENGTH + 1.5 * BITWIDTH + DELAY_REPLY .%d\r\n", txrxcount);
- }
- PAIR_CHARGERPIN_PRINT("-----------------------RX MODE start .%d\r\n", bit_width);
- break;
- }
- else
- {
- if (mFlash.isHost)
- {
- delay_send_count = 1; //左边鞋发送数据
- }
- PAIR_CHARGERPIN_INFO("EXTI CHARGEING MOID.%d bit_width %d \r\n", ms, bit_width);
- }
- }
- else
- {
- now_bit = 1;
- delay_send_count = 0;
- delay_reply_count = 0;
- delay_check_count = 0;
- nrf_gpio_pin_write(PIN_LED_RUN, 0);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("0123delay_ledon_count = 0 .%d\r\n", txrxcount);
- PAIR_CHARGERPIN_INFO("INTO CHARGEING MOID.%d\r\n", ms);
- }
- bit_width = 0;
- }
- if (delay_send_count != 0)
- {
- delay_send_count++;
- }
- if (delay_send_count > DELAY_SEND)
- {
- unsigned char macbuff[32];
- delay_send_count = 0;
- PAIR_CHARGERPIN_PRINT("BEGIN send MAC.%d\r\n", ms);
- Get_MACaddr(macbuff);
- macbuff[DATA_LENGTH - 1] = 0;
- for (int i = 0; i < DATA_LENGTH - 1; i++)
- {
- macbuff[DATA_LENGTH - 1] += macbuff[i];
- }
- memcpy(txbuf, macbuff, DATA_LENGTH);
- PAIR_CHARGERPIN_PRINT("host_mac send.%d\r\n", ms);
- one_ms_status = 2;
- txrxcount = 0;
- for (int i = 0; i < DATA_LENGTH; i++)
- {
- PAIR_CHARGERPIN_PRINT("txbuf.%x\r\n", txbuf[i]);
- }
- break;
- }
- if (delay_reply_count != 0)
- {
- delay_reply_count++;
- }
- if (delay_reply_count > DELAY_REPLY)
- {
- unsigned char macbuff[16];
- delay_reply_count = 0;
- PAIR_CHARGERPIN_PRINT("BEGIN send MAC.%d\r\n", ms);
- Get_MACaddr(macbuff);
- memcpy(txbuf, &macbuff[3], DATA_LENGTH);
- txbuf[DATA_LENGTH - 1] = 0;
- for (int i = 0; i < DATA_LENGTH - 1; i++)
- {
- txbuf[DATA_LENGTH - 1] += txbuf[i];
- }
- PAIR_CHARGERPIN_PRINT("host_mac send.%d\r\n", ms);
- one_ms_status = 2;
- txrxcount = 0;
- for (int i = 0; i < DATA_LENGTH; i++)
- {
- PAIR_CHARGERPIN_PRINT("txbuf.%x\r\n", txbuf[i]);
- }
- break;
- }
- if (delay_check_count != 0)
- {
- delay_check_count++;
- }
- if (delay_check_count > DELAY_CHECK)
- {
- delay_check_count = 0;
- one_ms_status = 4;
- txrxcount = 0;
- PAIR_CHARGERPIN_PRINT("CHECK start.%d\r\n", ms);
- break;
- }
- else if (delay_check_count > 0)
- {
- if (now_bit > 0)
- {
- delay_check_count = 0;
- PAIR_CHARGERPIN_PRINT("CANCEL CHECK.%d\r\n", ms);
- }
- }
- break;
- case 2: // tx
- {
- lowbitdelay++;
- static char send_interrupt = 0;
- if ((now_bit == 0) && (nrf_gpio_pin_read(PIN_CHARGING)) && (lowbitdelay > LOW_BIT_DELAY))
- {
- if (mFlash.isHost)
- {
- one_ms_status = 1;
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", ms);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count1 = 0;\r\n", txrxcount);
- PAIR_CHARGERPIN_PRINT("EXTI SEND MODE.CAN NOT SET LOW %d\r\n", txrxcount);
- send_interrupt = 0;
- break;
- }
- else
- {
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", ms);
- send_interrupt = 1;
- }
- }
- if ((txrxcount == 0) && (send_interrupt == 0))
- {
- nrf_gpio_pin_set(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("set.%d\r\n", ms);
- now_bit = 1;
- }
- if ((txrxcount == 1.5 * BITWIDTH) && (send_interrupt == 0))
- {
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", ms);
- now_bit = 0;
- lowbitdelay = 0;
- }
-
- if ((txrxcount >= (int)(2.5 * BITWIDTH) && (txrxcount - (int)(2.5 * BITWIDTH)) % BITWIDTH == 0) && (send_interrupt == 0)&&(txrxcount < BITWIDTH * (8 * DATA_LENGTH + 2.5) - 1))
- {
- bytesindes = ((txrxcount - (int)(2.5 * BITWIDTH)) / BITWIDTH) / 8;
- bitindex = 7 - ((txrxcount - (int)(2.5 * BITWIDTH)) / BITWIDTH) % 8;
- nrf_gpio_pin_write(PIN_CHARGING, (txbuf[bytesindes] >> bitindex) & 0x01);
- lowbitdelay = 0;
- PAIR_CHARGERPIN_PRINT("write.%d %d\r\n", ((txbuf[bytesindes] >> bitindex) & 0x01), txrxcount);
- now_bit = (txbuf[bytesindes] >> bitindex) & 0x01;
- PAIR_CHARGERPIN_PRINT("%d %d %d %d %x\r\n", (txrxcount - (int)(2.5 * BITWIDTH)) / BITWIDTH, bytesindes, bitindex, (txbuf[bytesindes] >> bitindex) & 0x01, txbuf[bytesindes]);
- }
- if (send_interrupt)
- {
- if (nrf_gpio_pin_read(PIN_CHARGING) == 0)
- {
- send_interrupt = 0;
- delay_ledon_count = DELAY_SEND;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count = DELAY_SEND;.%d\r\n", txrxcount);
- PAIR_CHARGERPIN_PRINT("RX SEND MODE MAC START.%d\r\n", txrxcount);
- txrxcount = 0;
- break;
- }
- }
- if (txrxcount == BITWIDTH * (8 * DATA_LENGTH + 2.5) - 1)
- {
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clearr.%d\r\n", ms);
- if (mFlash.isHost == 0)
- {
- delay_check_count = 1;
- }
- }
- if (delay_check_count != 0)
- {
- delay_check_count++;
- }
- if (txrxcount >= BITWIDTH * (8 * DATA_LENGTH + 2.5) - 1 + LOW_BIT_DELAY)
- {
- one_ms_status = 1;
- send_interrupt = 0;
- now_bit = 0;
- bit_width = 0;
- PAIR_CHARGERPIN_PRINT("SEDN DONE .%d pin one_ms_status %d\r\n", ms, nrf_gpio_pin_read(PIN_CHARGING));//IO口高电平就有错
- break;
- }
- txrxcount++;
- }
- break;
- case 3: // rx
- if (now_bit == nrf_gpio_pin_read(PIN_CHARGING))
- {
- bit_width++;
- }
- else
- {
- if (now_bit == 1)
- {
- now_bit = 0;
- if ((bit_width > 1.5 * BITWIDTH - 3) && (bit_width < 1.8 * BITWIDTH + 3))
- {
- txrxcount = 1.5 * BITWIDTH;
- value = 30;
- delay_ledon_count = DELAY_SEND + 1.5 * BITWIDTH;
- PAIR_CHARGERPIN_PRINT("DELAY_SEND + 1.5 * BITWIDTHt .%d\r\n", txrxcount);
- PAIR_CHARGERPIN_PRINT("RX MODE restart .%d\r\n", ms);
- }
- }
- else
- {
- now_bit = 1;
- }
- bit_width = 0;
- }
- if (txrxcount >= (int)(3.5 * BITWIDTH) && (txrxcount - (int)(3.5 * BITWIDTH)) % BITWIDTH == 0)
- {
- bytesindes = ((txrxcount - (int)(3.5 * BITWIDTH)) / BITWIDTH) / 8;
- bitindex = 7 - ((txrxcount - (int)(3.5 * BITWIDTH)) / BITWIDTH) % 8;
- if (value > 0)
- {
- rxbuf[bytesindes] |= 0x01 << bitindex;
- }
- else
- {
- rxbuf[bytesindes] &= ~(0x01 << bitindex);
- }
- PAIR_CHARGERPIN_PRINT("%d %d %d %d %x\r\n", txrxcount, bytesindes, bitindex, value, rxbuf[bytesindes]);
- value = 0;
- nrf_gpio_pin_toggle(PIN_LED_RUN);
- }
- else
- {
- if (now_bit)
- {
- value++;
- }
- else
- {
- value--;
- }
- }
- if (txrxcount >= BITWIDTH * (8 * DATA_LENGTH + 2.5))
- {
- unsigned char dataerrcheck = 0;
- unsigned char crc = 0;
- one_ms_status = 1;
- PAIR_CHARGERPIN_PRINT("RECEVIC DONE .%d\r\n", txrxcount);
- nrf_gpio_pin_clear(PIN_LED_RUN);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", ms);
- for (int i = 0; i < DATA_LENGTH - 1; i++)
- {
- crc += rxbuf[i];
- }
- for (int i = 0; i < DATA_LENGTH - 1; i++)
- {
- if (rxbuf[i] == 0)
- {
- dataerrcheck++;
- }
- }
- if (dataerrcheck == DATA_LENGTH - 1)
- {
- PAIR_CHARGERPIN_PRINT("CRC ERROR ALL 0x00.%x\r\n", crc);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count 2= 0;\r\n", txrxcount);
- break;
- }
- dataerrcheck = 0;
- for (int i = 0; i < DATA_LENGTH - 1; i++)
- {
- if (rxbuf[i] == 0xff)
- {
- dataerrcheck++;
- }
- }
- if (dataerrcheck == DATA_LENGTH - 1)
- {
- PAIR_CHARGERPIN_PRINT("CRC ERROR ALL 0xFF.%x\r\n", crc);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count 3= 0;\r\n", txrxcount);
- break;
- }
- if (crc == rxbuf[DATA_LENGTH - 1])
- {
- if (mFlash.isHost)
- {
- delay_check_count = 1; //延时校验计数器
- }
- else
- {
- delay_reply_count = 1; //延时回复计数器
- }
- PAIR_CHARGERPIN_PRINT("---------------CRC SUCCESS .%x----------------\r\n", crc);
- }
- else
- {
- PAIR_CHARGERPIN_PRINT("CRC ERROR .%x\r\n", crc);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count 4= 0;\r\n", txrxcount);
- }
- for (int i = 0; i < DATA_LENGTH; i++)
- {
- PAIR_CHARGERPIN_PRINT("rxbuf[%d].%x\r\n", i, rxbuf[i]);
- }
- }
- txrxcount++;
- break;
- case 4:
- if (nrf_gpio_pin_read(PIN_CHARGING))
- {
- value++;
- }
- else
- {
- value--;
- }
- if (mFlash.isHost)
- {
- if (txrxcount == 0)
- {
- value = 0;
- nrf_gpio_pin_set(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("set.%d\r\n", ms);
- }
- if (txrxcount == 3 * BITWIDTH)
- {
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", delay_ledon_count);
- }
- if (txrxcount >= 3 * BITWIDTH + LOW_BIT_DELAY)
- {
- value = 0;
- one_ms_status = 1;
- now_bit = 0;
- bit_width = 0;
- }
- }
- else
- {
- if (txrxcount == 0)
- {
- value = 0;
- }
- if (txrxcount > 3 * BITWIDTH)
- {
- if (value < 2 * BITWIDTH)
- {
- PAIR_CHARGERPIN_PRINT("CHECK ERROR .%d\r\n", txrxcount);
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count 5= 0;\r\n", txrxcount);
- }
- else
- {
- PAIR_CHARGERPIN_PRINT("CHECK DONE .%d\r\n", txrxcount);
- }
- value = 0;
- one_ms_status = 1;
- nrf_gpio_pin_clear(PIN_CHARGING);
- PAIR_CHARGERPIN_PRINT("clear.%d\r\n", ms);
- now_bit = 1;
- bit_width = 0;
- }
- }
- txrxcount++;
- break;
- }
- if (delay_ledon_count != 0)
- {
- delay_ledon_count++;
- }
- if (delay_ledon_count == DELAY_LEDON)
- {
- PAIR_CHARGERPIN_PRINT("LEDCOPEN.%d\r\n", ms);
- memcpy(savebuf, rxbuf, DATA_LENGTH - 1);
- if(_success_evt)_success_evt(savebuf,DATA_LENGTH - 1);
- }
- if ((delay_ledon_count > DELAY_LEDON) && (delay_ledon_count - DELAY_LEDON == LEDON_KEEP))
- {
- delay_ledon_count = 0;
- PAIR_CHARGERPIN_PRINT("delay_ledon_count 6= 0;\r\n", txrxcount);
- PAIR_CHARGERPIN_PRINT("LEDCLOSE.%d\r\n", ms);
- }
- }
- //===========================================================================================================
- struct
- {
- char statu;
- unsigned int ms;
- unsigned int bit_width;
- int now_bit;
- char cf_BIT_WIDTH;
- short tim_cun;
- int bitindex;
- int byteindex;
- int receive_byteslength;
- unsigned char *buff;
- unsigned short length;
- int value ;
- _Event _evt;
- _Event_ERR _evt_err;
- }one_byte_ram;
- void one_byte_receive_Event_err_register(_Event_ERR _cb)
- {
- one_byte_ram._evt_err=_cb;
- }
- void one_byte_receive_init(unsigned char *recbuff,unsigned short len,_Event evt)
- {
- nrf_gpio_cfg(
- PIN_CHARGING,
- NRF_GPIO_PIN_DIR_OUTPUT,
- NRF_GPIO_PIN_INPUT_CONNECT,
- NRF_GPIO_PIN_NOPULL,
- NRF_GPIO_PIN_D0H1,
- NRF_GPIO_PIN_NOSENSE);
- nrf_gpio_cfg_watcher(PIN_CHARGING);
- one_byte_ram.statu = 1;
- nrf_gpio_pin_clear(PIN_CHARGING);
-
- one_byte_ram.now_bit = nrf_gpio_pin_read(PIN_CHARGING);
- //这里应该高电平进入
- one_byte_ram.bit_width=0;
- one_byte_ram.cf_BIT_WIDTH=30;
-
- one_byte_ram.buff=recbuff;
- one_byte_ram.length=len;
- one_byte_ram._evt=evt;
-
- Process_Start(0, "null_6pcs", null_pcs);
- Process_SetHoldOn(null_pcs, 1);
- TIME_Regist(one_byte_receive_pcs);
- }
- void one_byte_receive_uninit(void)
- {
- Process_Stop(null_pcs);
- TIME_UnRegist(one_byte_receive_pcs);
- PAIR_CHARGERPIN_PRINT("-------------------------------------------chargerpin_one_ms_uninit.%d\r\n", 1);
- }
- void one_byte_receive_pcs(void*t)
- {
- for(int i=1;i>0;i--)
- {
- switch(one_byte_ram.statu)
- {
- case 1://等待完整的开始信号
- if (one_byte_ram.now_bit == nrf_gpio_pin_read(PIN_CHARGING))
- {
- one_byte_ram.bit_width++;
- }
- else
- {
- //由高电平切换到低电平,下降信号,下降沿
- if(one_byte_ram.now_bit==1)
- {
- one_byte_ram.now_bit=0;
- }
- else//上升沿
- {
- if((one_byte_ram.bit_width > 1.5*one_byte_ram.cf_BIT_WIDTH-5)&&(one_byte_ram.bit_width < 1.5*one_byte_ram.cf_BIT_WIDTH+5))
- {
- //已经收到1.5个位宽低电平的开始信号
- one_byte_ram.tim_cun=-1.5*one_byte_ram.cf_BIT_WIDTH+1;//第一个数据位开始的时刻,该变量的值为0
- one_byte_ram.statu=2;
- PAIR_CHARGERPIN_PRINT(" into receive mode %d;\r\n",one_byte_ram.tim_cun);
- }
- one_byte_ram.now_bit=1;
- }
- one_byte_ram.bit_width=0;
- }
-
- if(one_byte_ram.now_bit==0)
- {
- if(one_byte_ram.bit_width>1.5*one_byte_ram.cf_BIT_WIDTH+15)
- {
- if(one_byte_ram._evt_err)one_byte_ram._evt_err(1);//低电平长度错误
- }
- }
-
- break;
- case 2:
- one_byte_ram.tim_cun++;
- if(one_byte_ram.tim_cun==0)
- {
- one_byte_ram.statu=3;
- PAIR_CHARGERPIN_PRINT("one_byte_ram.tim_cun==0;%d\r\n",nrf_gpio_pin_read(PIN_CHARGING));
- i=2;
- one_byte_ram.value=0;
- }
- break;
- case 3:
- if(one_byte_ram.tim_cun>(one_byte_ram.length)*8*one_byte_ram.cf_BIT_WIDTH + 4*one_byte_ram.cf_BIT_WIDTH)//接收超时判断
- {
- PAIR_CHARGERPIN_PRINT("one_byte_ram receive overtime; %d \r\n",(one_byte_ram.length+1)*one_byte_ram.cf_BIT_WIDTH);
- one_byte_ram.statu=1;
- }
-
- if((one_byte_ram.tim_cun % (one_byte_ram.cf_BIT_WIDTH-1)==0)&&(one_byte_ram.tim_cun>0))
- {
- one_byte_ram.bitindex=one_byte_ram.tim_cun/one_byte_ram.cf_BIT_WIDTH;
- one_byte_ram.byteindex=one_byte_ram.bitindex/8;
- one_byte_ram.bitindex=one_byte_ram.bitindex%8;
- if(one_byte_ram.byteindex<one_byte_ram.length)
- {
- PAIR_CHARGERPIN_PRINT("%d %d %3d %d\r\n", one_byte_ram.bitindex,one_byte_ram.byteindex,one_byte_ram.value,one_byte_ram.value > 0);
- if (one_byte_ram.value > 0)
- {
- one_byte_ram.buff[one_byte_ram.byteindex] |= 0x01 <<(7 - one_byte_ram.bitindex);
- }
- else
- {
- one_byte_ram.buff[one_byte_ram.byteindex] &= ~(0x01 << (7 - one_byte_ram.bitindex));
- }
- }
- else if((one_byte_ram.bitindex==0)&&(one_byte_ram.byteindex==one_byte_ram.length))
- {
- //数据位接收完成
- PAIR_CHARGERPIN_PRINT(" data receive done length : %d \r\n data :",one_byte_ram.length);
- for (int k = 0; k < one_byte_ram.length; k++)
- {
- PAIR_CHARGERPIN_PRINT("%x ",one_byte_ram.buff[k]);
- }
- PAIR_CHARGERPIN_PRINT("\r\n");
- }
- one_byte_ram.value=0;
- }
- else
- {
- if(nrf_gpio_pin_read(PIN_CHARGING)==0)
- {
- one_byte_ram.value--;
- }
- else
- {
- one_byte_ram.value++;
- }
- }
-
- if (one_byte_ram.now_bit == nrf_gpio_pin_read(PIN_CHARGING))
- {
- one_byte_ram.bit_width++;
- }
- else
- {
-
- //由高电平切换到低电平,下降信号,下降沿
- if(one_byte_ram.now_bit==1)
- {
- if((one_byte_ram.bit_width > 1.5*one_byte_ram.cf_BIT_WIDTH-5)&&(one_byte_ram.bit_width < 1.5*one_byte_ram.cf_BIT_WIDTH+5))
- {
- if(one_byte_ram._evt)
- {
- one_byte_ram._evt(one_byte_ram.buff,one_byte_ram.byteindex);
- PAIR_CHARGERPIN_INFO("one_byte_ram.buff[0] %d one_byte_ram.byteindex %d \r\n", one_byte_ram.buff[0], one_byte_ram.byteindex);
- }
- PAIR_CHARGERPIN_PRINT(" one_byte_ram._evt \r\n");
- PAIR_CHARGERPIN_PRINT(" receive done tim %d; %d\r\n",one_byte_ram.tim_cun,one_byte_ram.bit_width);
- one_byte_ram.statu=1;
- }
- one_byte_ram.now_bit=0;
- }
- else//上升沿
- {
- one_byte_ram.now_bit=1;
- }
- one_byte_ram.bit_width=0;
- }
- one_byte_ram.tim_cun++;
- break;
- default:
- break;
- }
- }
- }
|