Commit e170692d authored by 张泽仁's avatar 张泽仁

develop version 2023.11.3 back from suihua

parent 4c35b5cf
/*------------------------------------------------
angle for test below
--------------------------------------------------*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <fcntl.h> #include <fcntl.h>
...@@ -32,6 +37,7 @@ int fileusb; ...@@ -32,6 +37,7 @@ int fileusb;
int fileuart; int fileuart;
int t = 0;
int spi_fd; int spi_fd;
...@@ -57,7 +63,7 @@ int xfm_Init() ...@@ -57,7 +63,7 @@ int xfm_Init()
} }
printf("/dev/ttyUSB0 Open success\r\n"); printf("/dev/ttyUSB0 Open success\r\n");
if ((fileuart = serialOpen("/dev/ttyAMA0", 115200)) < 0) if ((fileuart = serialOpen("/dev/ttyAMA0", 9600)) < 0)
{ {
printf("/dev/ttyAMA0 Open Faild\r\n"); printf("/dev/ttyAMA0 Open Faild\r\n");
return 0; return 0;
...@@ -89,11 +95,10 @@ void protocalAck(int fileusb) ...@@ -89,11 +95,10 @@ void protocalAck(int fileusb)
} }
// get angle and change into 16bits, return; // get angle and change into 16bits, return;
uint16_t getAngle(char *rece) int getAngle(char *rece)
{ {
uint16_t angle; int angle;
int result = 0; int result = 0;
int i = 0; int i = 0;
char *p = rece; char *p = rece;
while (*(p + i) != 'a' || *(p + i + 1) != 'n') while (*(p + i) != 'a' || *(p + i + 1) != 'n')
...@@ -116,9 +121,8 @@ uint16_t getAngle(char *rece) ...@@ -116,9 +121,8 @@ uint16_t getAngle(char *rece)
angle = result; angle = result;
return angle; return angle;
} }
// crc // crc
uint16_t CrcValueCalc(uint8_t *cpucData, uint16_t usLength) uint16_t CrcValueCalc(uint8_t *cpucData, uint16_t usLength) //changed
{ {
uint16_t crcValue = 0xffff; uint16_t crcValue = 0xffff;
int i; int i;
...@@ -139,10 +143,10 @@ uint16_t CrcValueCalc(uint8_t *cpucData, uint16_t usLength) ...@@ -139,10 +143,10 @@ uint16_t CrcValueCalc(uint8_t *cpucData, uint16_t usLength)
} }
return crcValue; return crcValue;
} }
extern int get_audio_device_id(); extern int get_audio_device_id();
void sendMessageHead(int mode, char* message)
void sendMessageHead(int mode, char* message) //changed
{ {
*(message) = 0x40; *(message) = 0x40;
*(message + 1) = 0x38; // head *(message + 1) = 0x38; // head
...@@ -154,11 +158,13 @@ void sendMessageHead(int mode, char* message) ...@@ -154,11 +158,13 @@ void sendMessageHead(int mode, char* message)
*(message + 6) = 0x01; //ack *(message + 6) = 0x01; //ack
} }
else{ // write else{ // write
*(message + 2) = 0x09; //length *(message + 2) = 0x0b; //length
*(message + 3) = 0x06; //instru *(message + 3) = 0x06; //instru
*(message + 4) = 0x00; //reg0 *(message + 4) = 0x00; //reg0
*(message + 5) = 0x02; //reg1 write angle *(message + 5) = 0x02; //reg1 write
*(message + 8) = 0x00; //ack *(message + 6) = 0x00;
*(message + 7) = 0x00;
*(message + 8) = 0x00;
} }
} }
...@@ -166,15 +172,15 @@ void sentMessageAngle(int fileuart, uint16_t angle) //changed ...@@ -166,15 +172,15 @@ void sentMessageAngle(int fileuart, uint16_t angle) //changed
{ {
char messageAngle[11]; char messageAngle[11];
sendMessageHead(1, messageAngle); sendMessageHead(1, messageAngle);
messageAngle[6] = (angle >> 8) & 0xff; messageAngle[9] = (angle >> 8) & 0xff;
messageAngle[7] = angle & 0xff; messageAngle[10] = angle & 0xff;
uint16_t crc; uint16_t crc;
crc = CrcValueCalc(messageAngle, 9); crc = CrcValueCalc(messageAngle, 11);
messageAngle[9] = (crc >> 8) & 0xff; messageAngle[12] = (crc >> 8) & 0xff;
messageAngle[10] = crc & 0xff; messageAngle[11] = crc & 0xff;
write(fileuart, messageAngle, 11); write(fileuart, messageAngle, 13);
} }
char* readMessageAngle(int fileuart) char* readMessageAngle(int fileuart)
...@@ -272,6 +278,110 @@ void waitforReady_test(int fileuart) //test_version ...@@ -272,6 +278,110 @@ void waitforReady_test(int fileuart) //test_version
} }
} }
int last = 0;
int reality = 0;
int dealAngle(int angle)
{
int result = 0;
int ret = 0;
if (last <= 1800){
int max = last + 1800;
if (angle >= last && angle <= max){
//turn leftji
result = angle - last;
//prshortf("sent message = %d\n", reality + result);
}
else {
//turn right
if (last > angle){
result = angle - last;
//prshortf("sent message = %d\n", reality + result);
}
else{
result = last + (3600 - angle);
result = -result;
//prshortf("sent message = %d\n", reality + result);
}
}
}
else{
int over = last - 1800;
if (angle >= over && angle <= last){
//turn right
result = angle - last;
//prshortf("sent message = %d\n", reality + result);
}
else {
//turn left
if ( angle < over){
result = angle + 3600 - last;
//prshortf("sent message = %d\n", reality + result);
}
else{
result = angle - last;
//prshortf("sent message = %d\n", reality + result);
}
}
}
ret = reality + result;
return ret;
}
void sentUart(char *buf, int fileuart, int fileusb)
{
if (count == 9) //9
{
strcat(totalbuf, buf);
int angle;
angle = getAngle(totalbuf);
if (g_callback != NULL)
{
char buf[256] = {0};
snprintf(buf, 256, "cvlc --play-and-exit --aout alsa --alsa-audio-device hw:%d,0 /usr/local/bin/Videos/vioce_hello_L.wav &", get_audio_device_id());
//system("mpg321 /usr/local/bin/Videos/aaaa.mp3 &");
//system("cvlc --play-and-exit --aout alsa --alsa-audio-device hw:2,0 /usr/local/bin/Videos/aaaa.mp3 &");
system(buf);
g_callback(g_callback_ctx, 2);
}
char message1[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0xff, 0xff, 0xff, 0xa6, 0xdc, 0xa6};
if (angle >= 1420 + 200)
{
//0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x2, 0xee, 0x9c, 0x24 left 45
char messageleft[13] = {char message1[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0xff, 0xff, 0xff, 0xa6, 0xdc, 0xa6};};
write(fileuart, messageleft, 13);
}
else if (angle <= 1420 - 200)
{
//0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x2, 0xee, 0x9c, 0x24 right 45
char messageright[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x3, 0x52, 0x9c, 0x5};
write(fileuart, messageright, 13);
}
else
{
char messageReset1[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2c, 0x1d, 0x45};
write(fileuart, messageReset1, 13);
}
count = 1;
memset(totalbuf, 0, 1024);
serialFlush(fileusb);
}
else
{
count++;
strcat(totalbuf, buf);
}
}
/*
void sentUart(char *buf, int fileuart, int fileusb) //changed void sentUart(char *buf, int fileuart, int fileusb) //changed
{ {
if (count == 9) if (count == 9)
...@@ -280,14 +390,36 @@ void sentUart(char *buf, int fileuart, int fileusb) //changed ...@@ -280,14 +390,36 @@ void sentUart(char *buf, int fileuart, int fileusb) //changed
uint16_t angle; uint16_t angle;
angle = getAngle(totalbuf); angle = getAngle(totalbuf);
printf("angle = %x\n", angle); printf("angle = %x\n", angle);
sentMessageAngle(fileuart, angle); sentMessageAngle(fileuart, angle);
//sentMessageAngle(fileuart, angle);
// 0x40 0x38 0x0b 0x06 0x00 0x02 0x01 00 -- -- -- 1d 08 0
// 04 b0 1e 7c 120
// char message1[13] = {0x40, 0x38, 0x0b, 0x06, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x08};
// char message2[13] = {0x40, 0x38, 0x0b, 0x06, 0x00, 0x02, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x1e, 0x7c};
// if (t == 0){
// write(fileuart, message1, 13);
// t = 1;
// }
// else{
// write(fileuart, message2, 13);
// t = 0;
// }
count = 1; count = 1;
memset(totalbuf, 0, 1024); memset(totalbuf, 0, 1024);
protocalAck(fileusb); protocalAck(fileusb);
waitforReady_test(fileuart); if (g_callback != NULL)
{
char buf[256] = {0};
snprintf(buf, 256, "cvlc --play-and-exit --aout alsa --alsa-audio-device hw:%d,0 /usr/local/bin/Videos/aaaa.mp3 &", get_audio_device_id());
//system("mpg321 /usr/local/bin/Videos/aaaa.mp3 &");
//system("cvlc --play-and-exit --aout alsa --alsa-audio-device hw:2,0 /usr/local/bin/Videos/aaaa.mp3 &");
system(buf);
g_callback(g_callback_ctx, 2);
}
//waitforReady_test(fileuart);
} }
else else
...@@ -297,13 +429,29 @@ void sentUart(char *buf, int fileuart, int fileusb) //changed ...@@ -297,13 +429,29 @@ void sentUart(char *buf, int fileuart, int fileusb) //changed
} }
} }
*/
unsigned int time_reset = 0;
void circleReading() //changed void circleReading() //changed
{ {
printf("cicleReading..\n"); printf("cicleReading..\n");
serialFlush(fileusb); serialFlush(fileusb);
//send zero reset
char messageReset[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2c, 0x1d, 0x45};
write(fileuart, messageReset, 13);
while (1) while (1)
{ {
time_reset++;
if (time_reset == 47000 * 300)
{
write(fileuart, messageReset, 13);
time_reset = 0;
continue;
}
int recbytenum = serialDataAvail(fileusb); int recbytenum = serialDataAvail(fileusb);
char buf[1024] = {0}; char buf[1024] = {0};
if (recbytenum > 1) if (recbytenum > 1)
...@@ -322,7 +470,7 @@ void circleReading() //changed ...@@ -322,7 +470,7 @@ void circleReading() //changed
else else
{ {
sentUart(buf, fileuart, fileusb); printf(" %d\n", __LINE__); sentUart(buf, fileuart, fileusb); printf(" %d\n", __LINE__);
serialFlush(fileusb); //guarantee buf wont affect next input //serialFlush(fileusb); //guarantee buf wont affect next input
} }
} }
} }
...@@ -521,7 +669,8 @@ void eachPicWrite(int num, int pic) ...@@ -521,7 +669,8 @@ void eachPicWrite(int num, int pic)
int ops = op[i]; int ops = op[i];
for (int j = 0; j < 18; j++) for (int j = 0; j < 18; j++)
{ {
AW20144_Byte_Write(chips, AW20144_PAGE1, num+offset, LocalDimmingLedData[pic][i*18 + j]);
AW20144_Byte_Write(chips, AW20144_PAGE1, num+offset, 0xff); //LocalDimmingLedData[pic][i*18 + j]
//AW20144_Byte_Write(chips, AW20144_PAGE1, num+offset, *(a + temp)); //AW20144_Byte_Write(chips, AW20144_PAGE1, num+offset, *(a + temp));
//printf("%d\n", num+offset); //printf("%d\n", num+offset);
//printf("%x\n", *(a + temp)); //printf("%x\n", *(a + temp));
...@@ -529,38 +678,38 @@ void eachPicWrite(int num, int pic) ...@@ -529,38 +678,38 @@ void eachPicWrite(int num, int pic)
num = (num+1) % 18; num = (num+1) % 18;
} }
} }//
} }
/*
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <stdint.h>
#include <wiringPi.h>
#include<wiringSerial.h>
#include <string.h>
int main()
{
int fileuart;
if ((fileuart = serialOpen("/dev/ttyAMA0", 9600)) < 0)
{
printf("/dev/ttyAMA0 Open Faild\r\n");
// return 0;
}
printf("/dev/ttyAMA0 Open success\r\n");
// void sentUart(char *buf, int fileuart) char message1[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0xff, 0xff, 0xff, 0xa6, 0xdc, 0xa6};
// { char message2[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2c, 0x1d, 0x45};
// if (count == 9) char message3[13] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x3, 0x52, 0x9c, 0x5};
// { write(fileuart, message1, 13);
// strcat(totalbuf, buf);
// uint16_t angle; //0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0xff, 0xff, 0xff, 0xf1, 0x9d, 0x58 left
// angle = getAngle(totalbuf); //0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2c, 0x1d, 0x45, 30
// printf("angle = %x\n", angle); //0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x2, 0xee, 0x9c, 0x24 right
// char angleret[2]; return 0;
// angleret[1] = angle & 0xff; }*/
// angleret[0] = (angle >> 8) & 0xff; \ No newline at end of file
// write(fileuart, angleret, 2);
// count = 1;
// memset(totalbuf, 0, 1024);
// if (g_callback != NULL){
// char buf[256] = {0};
// snprintf(buf, 256, "cvlc --play-and-exit --aout alsa --alsa-audio-device hw:%d,0 /usr/local/bin/Videos/aaaa.mp3 &", get_audio_device_id());
// //system("mpg321 /usr/local/bin/Videos/aaaa.mp3 &");
// //system("cvlc --play-and-exit --aout alsa --alsa-audio-device hw:2,0 /usr/local/bin/Videos/aaaa.mp3 &");
// system(buf);
// g_callback(g_callback_ctx, 2);
// }
// }
// else
// {
// count++;
// strcat(totalbuf, buf);
// }
// }
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <stdint.h>
#include <wiringPi.h>
#include <string.h>
int main()
{
int fileuart;
if ((fileuart = serialOpen("/dev/ttyAMA0", 9600)) < 0)
{
printf("/dev/ttyAMA0 Open Faild\r\n");
// return 0;
}
printf("/dev/ttyAMA0 Open success\r\n");
char message[9] = {0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x2b, 0x58};
write(fileuart, message, 9);
char buf[100] = {0};
int recbytenum = serialDataAvail(filedevid);
for (int i = 0; i < recbytenum; i++)
{
buf[i] = serialGetchar(filedevid);
}
for (int i = 0; i < recbytenum; i++)
{
printf("%x ", buf[i]);
}
printf("\n");
int angle = (buf[7] << 24) | (buf[8] << 16) | (buf[9] << 8) | buf[10];
printf("angle = %d\n", angle);
return 0;
}
\ No newline at end of file
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>
// crc
uint16_t CrcValueCalc(uint8_t *cpucData, uint16_t usLength) // changed
{
uint16_t crcValue = 0xffff;
int i;
while (usLength--)
{
crcValue ^= *cpucData++;
for (i = 8 - 1; i >= 0; i--)
{
if (crcValue & 0x0001)
{
crcValue = (crcValue >> 1) ^ 0xa001;
}
else
{
crcValue = crcValue >> 1;
}
}
}
return crcValue;
}
int main()
{ //a 10 b11 c12 d13
unsigned char mess[13] = {0x40, 0x38, 0x0b, 0x06, 0x00, 0x02, 0x01, 0xff, 0xff, 0xff, 0xa6, 0x00, 0x00};
uint16_t crc = CrcValueCalc(mess, 11);
mess[11] = crc & 0xff;
mess[12] = (crc >> 8) & 0xff;
for (int i = 0; i < 13; i++)
{
printf("0x%x, ", mess[i]);
}
printf("\n");
return 0;
}
// 120 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x4, 0xb0, 0x1e, 0x7c,
// 0 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1d, 0x8,
// 60 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x2, 0x58, 0x1d, 0x92,
// 90 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x8, 0x84, 0x1a, 0xab,
// 150 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x5, 0xdc, 0x1f, 0xc1,
// 30 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x1, 0x2c, 0x1d, 0x45,
// 85 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0x0, 0x0, 0x3, 0x52, 0x9c, 0x5
// -25 0x40, 0x38, 0xb, 0x6, 0x0, 0x2, 0x1, 0xff, 0xff, 0xff, 0xe7, 0x1c, 0x96,
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment