| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- #include "soft_poweramp.h"
- #include "string.h"
- #include "common.h"
- #include "crc.h"
- #include "soft_can.h"
- #include "soft_okcell.h"
- #include "soft_crc.h"
- // //��������array�����Ƿ�����ַ���str
- // //����ʹ��strstr�����������д���'\0'�Ļ��ᱻ����
- // int findStrInArray(uint8_t *array, int aLen, const char *str);
- // short Poweramp_recv_index = 0;
- // //��ȡ����ʼ��־λ
- // bool Poweramp_get_s = false;
- // #define POWERAMP_MAXLEN 100
- // unsigned char Poweramp_recv_buf[POWERAMP_MAXLEN] = {0};
- // Connect_check Poweramp_Link;
- // _POWERAMP_INF poweramp_inf = {0};
- // _POWERAMP_VER poweramp_ver = {0};
- // _POWERAMP_SYS poweramp_sys = {0};
- // bool get_poweramp_handle_ack = false;
- // bool get_poweramp_pair_data = false;
- // bool get_poweramp_ver = false;
- // bool get_poweramp_sys = false;
- // void PowerAmpCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len)
- // {
- // Poweramp_Link.recv_time = HAL_GetTick();
-
- // //�ҵ���ͷ����ʼ����
- // //strncmp�Ƚ��ַ���������'\0'����������Բ��ʺ���������Ƚ�
- // if(memcmp(data,"{",1) == 0){
- // Poweramp_recv_index = 0;
- // Poweramp_get_s = true;
- // }
-
- // //������
- // if(Poweramp_recv_index + len > POWERAMP_MAXLEN)
- // {
- // memset(Poweramp_recv_buf,0,Poweramp_recv_index);
- // Poweramp_recv_index = 0;
- // Poweramp_get_s = false;
- // }
-
- // //���յ���ʼ��־��ʼ������
- // if(Poweramp_get_s == true){
- // //��������
- // memcpy(&Poweramp_recv_buf[Poweramp_recv_index], data, len);
- // Poweramp_recv_index += len;
- // }
-
- // //�ҵ���β����ʼ����,������strstr
- // if(Poweramp_get_s == true && findStrInArray(Poweramp_recv_buf, Poweramp_recv_index, "}") != 0
- // && Poweramp_recv_buf[1] == Poweramp_recv_index - 4)
- // {
- // Poweramp_get_s = false;
-
- // unsigned char powamplength = Poweramp_recv_buf[1];
- // unsigned char powampcommand = Poweramp_recv_buf[2];
-
- // //�ֽ����Ƿ���ȷ
- // if(powamplength == Poweramp_recv_index-4)
- // {
- // unsigned char powerampCheck = Poweramp_recv_buf[powamplength+2];
- // //У��ͨ��,����ûͨ��
- // if((poweramp_CRC8(&Poweramp_recv_buf[1], powamplength+1, POWERAMP_CRC8_KEY)) == powerampCheck)
- // {
- // time_poweramp_lastrecv = HAL_GetTick();
-
- // switch(powampcommand)
- // {
- // case 0x00:
- // //����������0-���ַ�����1-�������ݷ���
- // switch(Poweramp_recv_buf[3])
- // {
- // case 0x00:
- // if(Poweramp_recv_buf[4] == 0x00)
- // get_poweramp_handle_ack = true;
- // break;
- // case 0x01:
- // get_poweramp_pair_data = true;
- // break;
- // default:
- // break;
- // }
- // break;
- // case 0x01:
- // //ǰ�����ֽβ���ʶ��Ϊ����״̬��
- // Poweramp_Link.connect_status = COMP_NORMAL;
-
- // //�����س���˽������Э����ɵ��������
- // if(powamplength-1 <= sizeof(_POWERAMP_INF))
- // {
- // memcpy((void *)&poweramp_inf, &Poweramp_recv_buf[3], powamplength-1);
- // }
- // break;
- // case 0x20:
- // get_poweramp_ver = true;
- // //�����س���˽������Э����ɵ��������
- // if(powamplength-1 <= sizeof(_POWERAMP_VER))
- // {
- // memcpy((void *)&poweramp_ver, &Poweramp_recv_buf[3], powamplength-1);
- // }
- // break;
- // case 0x21:
- // get_poweramp_sys = true;
- // //�����س���˽������Э����ɵ��������
- // if(powamplength-1 <= sizeof(_POWERAMP_SYS))
- // {
- // memcpy((void *)&poweramp_sys, &Poweramp_recv_buf[3], powamplength-1);
- // }
- // break;
- // default:
- // break;
- // }
- // }
- // }
-
- // //����buff
- // memset(Poweramp_recv_buf,0,Poweramp_recv_index);
-
- // //�����������¼���
- // Poweramp_recv_index = 0;
- // }
- // }
- // /*
- // �ϵ�ǰ10s���������������ݸ����ܵ�أ�������������
- // */
- // #define CAN_POWERAMP_SEND_ID (0x188)
- // #pragma pack(1)
- // struct Poweramp_Handshake{
- // char amp_sof;
- // char amp_length;
- // char amp_command;
- // char amp_data[14];
- // char amp_crc;
- // char amp_eof;
- // };
- // #pragma pack()
- // struct Poweramp_Handshake poweramp_handshake;
- // #pragma pack(1)
- // struct Poweramp_Handpair{
- // char amp_sof;
- // char amp_length;
- // char amp_command;
- // char amp_data[2];
- // char amp_crc;
- // char amp_eof;
- // };
- // #pragma pack()
- // struct Poweramp_Handpair poweramp_handpair;
- // #pragma pack(1)
- // struct Poweramp_Uavheart{
- // char amp_sof;
- // char amp_length;
- // char amp_command;
- // char amp_data[6];
- // char amp_crc;
- // char amp_eof;
- // };
- // #pragma pack()
- // struct Poweramp_Uavheart poweramp_uavheart;
- // #pragma pack(1)
- // struct Poweramp_Ver{
- // char amp_sof;
- // char amp_length;
- // char amp_command;
- // char amp_crc;
- // char amp_eof;
- // };
- // #pragma pack()
- // struct Poweramp_Ver poweramp_sver;
- // #pragma pack(1)
- // struct Poweramp_Sys{
- // char amp_sof;
- // char amp_length;
- // char amp_command;
- // char amp_crc;
- // char amp_eof;
- // };
- // #pragma pack()
- // struct Poweramp_Sys poweramp_ssys;
- // uint32_t time_poweramp_handle = 0;
- // bool send_poweramp_handle = false;
- // uint32_t time_poweramp_pairack = 0;
- // bool send_poweramp_pairack = false;
- // uint32_t time_poweramp_uavheart = 0;
- // bool send_poweramp_uavheart = false;
- // uint32_t time_poweramp_ver = 0;
- // bool send_poweramp_ver = false;
- // uint32_t time_poweramp_sys = 0;
- // bool send_poweramp_sys = false;
- // //�ϴη���ʱ�䣬����ʱ���
- // uint32_t time_poweramp_lastsend = 0;
- // //��Ŀ���485��˫�����յ���Ϣ������ӳ�100ms�ٷ�����һ��
- // uint32_t time_poweramp_lastrecv = 0;
- // char send_poweramp_uavheart_counts = 0;
- // //���ַ��ʹ���
- // char send_poweramp_handle_counts = 0;
- // char send_poweramp_pairack_counts = 0;
- // char send_poweramp_ver_counts = 0;
- // char send_poweramp_sys_counts = 0;
- // #define HANDLE_COUNTS_MAX 5
- // #define PAIRACK_COUNTS_MAX 2
- // #define UAVHEART_COUNTS_MAX 5
- // #define VERSYS_COUNTS_MAX 5
- // void send_msg_to_poweramp(void)
- // {
- // //���رշ����ֲ�����������Ȳ�����������֣��������Żظ�ʵʱ��Ϣ
- // if((Poweramp_Link.connect_status == COMP_NOEXIST || Poweramp_Link.connect_status == COMP_RECON) && HAL_GetTick() > 5000)
- // {
- // //��Ŀ��ؿ�����Ҫ����������Ϣ������ͨ�š�
- // if(send_poweramp_handle == false &&
- // get_poweramp_handle_ack == false && send_poweramp_handle_counts < HANDLE_COUNTS_MAX &&
- // HAL_GetTick() - time_poweramp_handle > 300 && HAL_GetTick() - time_poweramp_lastrecv > 100)
- // {
- // send_poweramp_handle_counts++;
-
- // time_poweramp_handle = HAL_GetTick();
- // time_poweramp_pairack = HAL_GetTick();
- // time_poweramp_uavheart = HAL_GetTick();
- // poweramp_handshake.amp_sof = '{';
- // poweramp_handshake.amp_length = 15;
- // poweramp_handshake.amp_command = 0;
-
- // poweramp_handshake.amp_data[0] = 1;
- // poweramp_handshake.amp_data[1] = 0;
- // poweramp_handshake.amp_data[2] = 'E';
- // poweramp_handshake.amp_data[3] = 'A';
- // poweramp_handshake.amp_data[4] = 'V';
- // poweramp_handshake.amp_data[5] = 'i';
- // poweramp_handshake.amp_data[6] = 's';
- // poweramp_handshake.amp_data[7] = 'i';
- // poweramp_handshake.amp_data[8] = 'o';
- // poweramp_handshake.amp_data[9] = 'n';
- // poweramp_handshake.amp_data[10] = 't';
- // poweramp_handshake.amp_data[11] = 'e';
- // poweramp_handshake.amp_data[12] = 'c';
- // poweramp_handshake.amp_data[13] = 'h';
-
- // poweramp_handshake.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_handshake.amp_length,poweramp_handshake.amp_length+1,POWERAMP_CRC8_KEY);
-
- // poweramp_handshake.amp_eof = '}';
-
- // send_poweramp_handle = true;
- // }
- // //�������ֺ��ػظ����ֲ��ظ��������ݣ��յ���Ŀ��صļ������ݺ�ظ�ȷ����Ϣ,Ȼ��ʼͨ�ţ��ظ�ȷ����Ϣʱû�з��������Է������Σ�
- // else if(get_poweramp_pair_data == true && send_poweramp_pairack_counts < PAIRACK_COUNTS_MAX &&
- // send_poweramp_pairack == false && HAL_GetTick() - time_poweramp_pairack > 300 && HAL_GetTick() - time_poweramp_lastrecv > 100)
- // {
- // send_poweramp_pairack_counts++;
-
- // time_poweramp_pairack = HAL_GetTick();
- // time_poweramp_uavheart = HAL_GetTick();
-
- // poweramp_handpair.amp_sof = '{';
- // poweramp_handpair.amp_length = 3;
- // poweramp_handpair.amp_command = 0;
-
- // poweramp_handpair.amp_data[0] = 1;
- // poweramp_handpair.amp_data[1] = 0;
-
- // poweramp_handpair.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_handpair.amp_length, poweramp_handpair.amp_length+1, POWERAMP_CRC8_KEY);
-
- // poweramp_handpair.amp_eof = '}';
-
- // send_poweramp_pairack = true;
- // }
- // //��������Լ�����ʧ�ܺ�ֱ�ӷ������������Ȳ�������ֶ�ͨ��ʧ��
- // else if(((get_poweramp_handle_ack == false && send_poweramp_handle_counts == HANDLE_COUNTS_MAX) || (get_poweramp_pair_data == true && send_poweramp_pairack_counts == PAIRACK_COUNTS_MAX)) &&
- // send_poweramp_uavheart_counts < UAVHEART_COUNTS_MAX &&
- // send_poweramp_uavheart == false && HAL_GetTick() - time_poweramp_uavheart > 300 && HAL_GetTick() - time_poweramp_lastrecv > 100)
- // {
- // send_poweramp_uavheart_counts++;
-
- // time_poweramp_uavheart = HAL_GetTick();
- // time_poweramp_lastsend = HAL_GetTick();
-
- // poweramp_uavheart.amp_sof = '{';
- // poweramp_uavheart.amp_length = 7;
- // poweramp_uavheart.amp_command = 0x25;
-
- // poweramp_uavheart.amp_data[0] = 0x08;
-
- // poweramp_uavheart.amp_data[1] = 0;
- // poweramp_uavheart.amp_data[2] = 1;
- // poweramp_uavheart.amp_data[3] = 2;
- // poweramp_uavheart.amp_data[4] = 3;
-
- // poweramp_uavheart.amp_data[5] = 2;
-
- // poweramp_uavheart.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_uavheart.amp_length, poweramp_uavheart.amp_length+1, POWERAMP_CRC8_KEY);
-
- // poweramp_uavheart.amp_eof = '}';
-
- // send_poweramp_uavheart = true;
- // }
- // }
- // //��Ŀ��ص���Ҫ����������Ϣ�Ż�ظ������Ϣ,�����ֺ��״̬�ٴη����ֵ�ز���������ʱ��ػ��������ݣ��Ƚ����ж�
- // else if(Poweramp_Link.connect_status == COMP_NORMAL || Poweramp_Link.connect_status == COMP_LOST)
- // {
- // //��ȡ�汾��Ϣ
- // if(get_poweramp_ver == false && send_poweramp_ver_counts < VERSYS_COUNTS_MAX && HAL_GetTick() - time_poweramp_ver > 500 &&
- // HAL_GetTick() - time_poweramp_lastrecv > 100 && HAL_GetTick() - time_poweramp_lastsend > 200)
- // {
- // send_poweramp_ver_counts++;
- // time_poweramp_ver = HAL_GetTick();
- // time_poweramp_sys = HAL_GetTick();
- // time_poweramp_lastsend = HAL_GetTick();
-
- // poweramp_sver.amp_sof = '{';
- // poweramp_sver.amp_length = 1;
- // poweramp_sver.amp_command = 0x20;
-
- // poweramp_sver.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_sver.amp_length, poweramp_sver.amp_length+1, POWERAMP_CRC8_KEY);
-
- // poweramp_sver.amp_eof = '}';
-
- // send_poweramp_ver = true;
- // }
- // //��ȡϵͳ��Ϣ
- // else if((get_poweramp_ver == true || send_poweramp_ver_counts >= VERSYS_COUNTS_MAX) && get_poweramp_sys == false &&
- // send_poweramp_sys_counts < VERSYS_COUNTS_MAX && HAL_GetTick() - time_poweramp_sys > 500 &&
- // HAL_GetTick() - time_poweramp_lastrecv > 100 && HAL_GetTick() - time_poweramp_lastsend > 200)
- // {
- // send_poweramp_sys_counts++;
- // time_poweramp_sys = HAL_GetTick();
- // time_poweramp_lastsend = HAL_GetTick();
-
- // poweramp_ssys.amp_sof = '{';
- // poweramp_ssys.amp_length = 1;
- // poweramp_ssys.amp_command = 0x21;
-
- // poweramp_ssys.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_ssys.amp_length, poweramp_ssys.amp_length+1, POWERAMP_CRC8_KEY);
-
- // poweramp_ssys.amp_eof = '}';
-
- // send_poweramp_sys = true;
- // }
-
- // //ÿһ���ӷ���������
- // if(send_poweramp_uavheart == false && HAL_GetTick() - time_poweramp_uavheart > 1000 &&
- // HAL_GetTick() - time_poweramp_lastrecv > 100 && HAL_GetTick() - time_poweramp_lastsend > 200)
- // {
- // time_poweramp_uavheart = HAL_GetTick();
- // time_poweramp_lastsend = HAL_GetTick();
-
- // poweramp_uavheart.amp_sof = '{';
- // poweramp_uavheart.amp_length = 7;
- // poweramp_uavheart.amp_command = 0x25;
-
- // poweramp_uavheart.amp_data[0] = 0x08;
-
- // poweramp_uavheart.amp_data[1] = 0;
- // poweramp_uavheart.amp_data[2] = 1;
- // poweramp_uavheart.amp_data[3] = 2;
- // poweramp_uavheart.amp_data[4] = 3;
-
- // poweramp_uavheart.amp_data[5] = 2;
-
- // poweramp_uavheart.amp_crc = poweramp_CRC8((uint8_t *)&poweramp_uavheart.amp_length, poweramp_uavheart.amp_length+1, POWERAMP_CRC8_KEY);
-
- // poweramp_uavheart.amp_eof = '}';
-
- // send_poweramp_uavheart = true;
- // }
- // }
- // //��������
- // if(send_poweramp_uavheart == true){
- // send_poweramp_uavheart = false;
- // can_send_msg_normalstd((unsigned char *)&poweramp_uavheart,sizeof(poweramp_uavheart),CAN_POWERAMP_SEND_ID);
- // }
- // //�����ⲿ���͡����ܷ��������ڲ���������������ʱ����ɷ��Ͳ�������
- // else if(send_poweramp_handle == true){
- // send_poweramp_handle =false;
- // can_send_msg_normalstd((unsigned char *)&poweramp_handshake,sizeof(poweramp_handshake),CAN_POWERAMP_SEND_ID);
- // }
- // //�����ⲿ���͡����ܷ��������ڲ���������������ʱ����ɷ��Ͳ�������
- // else if(send_poweramp_pairack == true){
- // send_poweramp_pairack = false;
- // can_send_msg_normalstd((unsigned char *)&poweramp_handpair,sizeof(poweramp_handpair),CAN_POWERAMP_SEND_ID);
- // }
- // //�����ⲿ���͡����ܷ��������ڲ���������������ʱ����ɷ��Ͳ�������
- // else if(send_poweramp_ver == true){
- // send_poweramp_ver = false;
- // can_send_msg_normalstd((unsigned char *)&poweramp_sver,sizeof(poweramp_sver),CAN_POWERAMP_SEND_ID);
- // }
- // //�����ⲿ���͡����ܷ��������ڲ���������������ʱ����ɷ��Ͳ�������
- // else if(send_poweramp_sys == true){
- // send_poweramp_sys = false;
- // can_send_msg_normalstd((unsigned char *)&poweramp_ssys,sizeof(poweramp_ssys),CAN_POWERAMP_SEND_ID);
- // }
- // }
- // /**
- // * @brief ���ܵ�����Ӽ��
- // */
- // unsigned int poweramp_reconnent_time = 0;
- // void check_poweramp_link(void)
- // {
- // static short poweramp_lostcounts = 0;
- // Poweramp_Link.error_time = HAL_GetTick() - Poweramp_Link.recv_time;
- // // ��������ҳ���5sû���յ���ȷ�״����ݣ����ʾ���ܵ������������
- // // �������ȼ��dz��ߵģ���������ʱ�����ж϶Ͽ�
- // // �����������ʼ��û���ӻ������Ӻ�Ͽ��ˡ�
- // if (Poweramp_Link.connect_status == COMP_NORMAL && (Poweramp_Link.error_time > 5000))
- // {
- // poweramp_lostcounts++;
- // if(poweramp_lostcounts >= 50)
- // {
- // poweramp_lostcounts = 50;
-
- // Poweramp_Link.connect_status = COMP_LOST;
-
- // //��յ����Ϣ����
- // //memset(&poweramp_inf, 0, sizeof(poweramp_inf));
-
- // send_poweramp_uavheart_counts = 0;
- // send_poweramp_handle_counts = 0;
- // send_poweramp_pairack_counts = 0;
- // send_poweramp_ver_counts = 0;
- // send_poweramp_sys_counts = 0;
-
- // //�����»�ȥ�汾��ϵͳ��Ϣ
- // //get_poweramp_sys = false;
- // //get_poweramp_ver = false;
- // get_poweramp_handle_ack = false;
- // get_poweramp_pair_data = false;
- // }
- // }
- // else if((Poweramp_Link.connect_status == COMP_NORMAL && (Poweramp_Link.error_time < 5000)))
- // {
- // poweramp_lostcounts = 0;
- // }
- // //����200s����ػ�����
- // else if((Poweramp_Link.connect_status == COMP_LOST && (Poweramp_Link.error_time > 200000)))
- // {
- // Poweramp_Link.connect_status = COMP_RECON;
- // }
- // //�����ڻ�������״̬�Ƕ�ʱ����
- // else if((Poweramp_Link.connect_status == COMP_RECON || Poweramp_Link.connect_status == COMP_NOEXIST) &&
- // HAL_GetTick() - poweramp_reconnent_time > 10000)
- // {
- // poweramp_reconnent_time = HAL_GetTick();
-
- // get_poweramp_handle_ack = false;
- // get_poweramp_pair_data = false;
-
- // send_poweramp_uavheart_counts = 0;
- // //���ַ��ʹ���
- // send_poweramp_handle_counts = 0;
- // send_poweramp_pairack_counts = 0;
- // }
- // }
|