You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.3 KiB

#include "app_task_speech.h"
#include "app_task_tcp.h"
#include "../msp/uart3.h"
#include "../msp/uart2.h"
#include "../msp/uart0.h"
#define START_CODE 0x7E
#define END_CODE 0xEF
TS_TASK_SPEECH ts_speech;
void L3_task_speech_init(void)
{
//U8 music[6] = {0x7E,0x04,0xAE,0x1E,0x30,0xEF};
//L0_uart0_sendArray((U8 *)&open,9);
//U8 code open[9] = {0x7E,0x07,0xA3,0x43,0x30,0x30,0x39,0x86,0xEF};
//L0_uart3_sendArray((U8 *)&open , 9);
L1_task_init(&ts_speech.task);
L3_task_s_go(ts_speech,D_task_init);
}
#define D_task_wait_tcp_order 0x61
#define D_task_speech_send 0x62
void L3_task_speech_handle(TS_TASK_SPEECH *s)
{
TTSS_Task_init()
L2_task_go(D_task_wait_tcp_order);
TTSS_Task_step(D_task_wait_tcp_order)
// if(s_uart2_tcp_rec.ok && (ts_tcp.slaverIndex != 0))
//if(s_uart2_tcp_rec.ok)
{
// s_uart2_tcp_rec.ok = 0;
// s->pkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp);
if(s->pkg->slaver == SERVER_ID)
{
L3_ccmodbus_slaver_ack(s->pkg,s->ack);
s->ccmd_speech_info[0].start = START_CODE;
s->ccmd_speech_info[0].num = 0x07;
s->ccmd_speech_info[0].oper = SPEECH_NAME_PLAY;
s->ccmd_speech_info[0].title = 0x43;
//ts_speech.ccmd_speech_info[0].buf = (U8*)&R.spee_order;
s->ccmd_speech_info[0].end = END_CODE;
//Lc_buf_copy_uc((U8 *)&s->ccmd_speech_info[0].buf,(U8 *)&R.spee_order,(U16)2);
//L0_uart0_sendArray((U8 *)&R.spee_order,2); //00 04
s->slaverIndex = 0;
s->pkglen = L3_pack_speech(&s->speech_pkg , &s->ccmd_speech_info + s->slaverIndex);
L2_task_go(D_task_speech_send);
}
}
{
L2_task_go(D_task_wait_tcp_order);
}
TTSS_Task_step(D_task_speech_send)
{
L0_uart3_sendArray((U8 *)&s->speech_pkg, s->pkglen);
//L0_uart0_sendArray((U8*)&s->speech_pkg,s->pkglen);
}
L2_task_go(D_task_wait_tcp_order);
TTSS_Task_end();
}
U8 ascTable[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
U8 *hexBytes2AsciiBytes(U8 asciiBytes[],U8 hexBytes[],U8 hexBytesLen)
{
U8 i = 0;
for(i=0;i<hexBytesLen;i++)
{
asciiBytes[i*2] = ascTable[hexBytes[i] >> 4 & 0x0F];
asciiBytes[i*2 + 1] = ascTable[hexBytes[i] >> 0 & 0x0F];
}
return asciiBytes;
}
U8 Fun_SC_Check(U8 *p1, unsigned short int len)
{
U8 sum = 0;
for(;len > 0; len--)
{
sum += *p1++;
}
return sum;
}
U8 L3_pack_speech_A3(TS_SPEECH *pspeech , U8 start ,U8 num ,U8 title ,U8 end)//tcp传来的buf
{
int name;
U8 tcp_buf[6];
U8 str_buf[6];
U8 bufsize = 9;
pspeech->start = start;
pspeech->num = num;
pspeech->oper = SPEECH_NAME_PLAY;
pspeech->title = title;
Lc_buf_copy_uc((U8 *)&tcp_buf,(U8 *)&R.spee_order,(U16)2);
hexBytes2AsciiBytes(str_buf,tcp_buf,2);
name = getIndexOfSigns(str_buf[2])*16+getIndexOfSigns(str_buf[3])*1;
pspeech->buf[0] = (U8)(name/100) ;
pspeech->buf[1] = (U8)((name%100)/10);
pspeech->buf[2] = (U8)(name%10);
//L0_uart0_sendArray((U8*)&tcp_buf,3);
Lc_hex2ascii((U8 *)&pspeech->buf,(U8 *)&pspeech->buf,3);
pspeech->crc = Fun_SC_Check(&pspeech->num,6); //累加和校验
pspeech->end = end;
return bufsize;
}
U8 L3_pack_speech(TS_SPEECH *pspeech, CCMD_SPEECH_INFO
*speech_info)
{
U16 pkglen = 0;
switch(speech_info->oper)
{
case SPEECH_NAME_PLAY:
pkglen = L3_pack_speech_A3(pspeech,speech_info->start,speech_info->num,speech_info->title,speech_info->end);
break;
default:
break;
}
return pkglen;
}